C# 实现Ping远程主机功能
  S34pIcuyyIVd 2024年05月17日 50 0

C#实现Ping远程主机功能。

 

1、引用nuget包 Wesky.Net.OpenTools

OpenTools是一个用于提高开发效率的开源工具库。该项目为个人开源项目,采用MIT开源协议,永不更改协议。开源项目地址:

Gitee:https://gitee.com/dreamer_j/open-tools.git
Github:https://github.com/LittleLittleRobot/OpenTools.git
个人公众号:Dotnet Dancer
工具更新说明:
1.0.1 提供AES加密解密功能
1.0.2 提供本地Ping远程主机功能,包括支持IP地址、域名

本教程将演示1.0.2版本更新功能,以及实现的具体代码演示。

 

咱们先看一下正常的Ping的效果:

 引用nuget包以后,只需要直接调用:

 PingHelper.PingHost方法即可,第一个参数是IP地址或域名,第二个是超时时间,单位毫秒.

具体源码和实现说明:

 1  /// <summary>
 2  /// 对指定主机执行 ping 操作并返回结果  3  /// Ping the specified host and return the result  4  /// </summary>
 5  /// <param name="host">需要被 ping 的主机或 IP 地址 The hostname or IP address to ping</param>
 6  /// <param name="timeout">ping 超时时间,以毫秒为单位 Timeout duration in milliseconds for ping</param>
 7  /// <returns>包含 ping 操作结果的 PingResultInfo 对象 A PingResultInfo object containing the result of the ping operation</returns>
 8  public static PingResultInfo PingHost(string host, int timeout)  9  { 10      try
11  { 12          // 解析域名获取 IP 地址 13          // Resolve the domain name to get IP address
14          IPAddress[] addresses = Dns.GetHostAddresses(host); 15          if (addresses.Length == 0) 16  { 17              return new PingResultInfo 18  { 19                  Host = null, 20                  Result = false, 21                  Message = "No IP addresses resolved"
22  }; 23  } 24          using (Ping pingSender = new Ping()) 25  { 26              PingOptions options = new PingOptions 27  { 28                  // 设置防止数据包被分片
29                  DontFragment = true // Prevent packet fragmentation
30  }; 31 
32              // 数据缓冲区,包含要发送的字符串数据 33              // Data buffer containing the string data to send
34              string data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"; 35              byte[] buffer = Encoding.ASCII.GetBytes(data); 36 
37              // 使用第一个解析的 IP 地址进行 ping 操作 38              // Use the first resolved IP address to perform the ping
39              IPAddress targetIP = addresses[0]; 40 
41              // 发送 ping 请求并获取回复 42              // Send the ping request and obtain the reply
43              PingReply reply = pingSender.Send(targetIP, timeout, buffer, options); 44 
45              // 创建并返回包含 ping 操作结果的 PingResultInfo 对象 46              // Create and return a PingResultInfo object containing the ping result
47              return new PingResultInfo 48  { 49                  Host = targetIP, 50                  Result = reply.Status == IPStatus.Success, 51                  Message = reply.Status == IPStatus.Success 52                      ? $"Success: RoundTrip time={reply.RoundtripTime}ms; TTL={reply.Options.Ttl}; Data size={buffer.Length} bytes"
53                      : $"Failed: Status={reply.Status}", 54                  RoundTripTime = reply.Status == IPStatus.Success ? reply.RoundtripTime : -1, 55                  Ttl = reply.Status == IPStatus.Success ? reply.Options.Ttl : -1, 56                  DataSize = buffer.Length 57  }; 58  } 59  } 60      catch (Exception e) 61  { 62          // 捕获异常并返回错误信息 63          // Catch any exceptions and return error information
64          return new PingResultInfo 65  { 66              Host = null, 67              Result = false, 68              Message = $"错误: {e.Message} Error: {e.Message}"
69  }; 70  } 71  }

我们也可以直接PING域名,例如 www.baidu.com

并且可以自动解析出来该域名的IP地址(Host)

 如果Ping一个不存在的IP,或者连不上的,例如192.168.0.1

显示超时,并且Result状态为false,代表没连上。状态值为TimeOut,说明超时了。

 应用场景:

该功能可以应用于需要不定时验证某个远程主机或设备或其他机器是否还在线的情况。并根据状态来展示具体主机是在线还是掉线。

 

 

 

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: C#委托 下一篇: WPF 稳定的全屏化窗口方法
  1. 分享:
最后一次编辑于 2024年05月17日 0

暂无评论

推荐阅读
  NPQODODLqddb   2024年05月17日   58   0   0 .NET
  mVIyUuLhKsxa   2024年05月17日   45   0   0 .NET
  XkHDHG7Y62UM   2024年05月17日   39   0   0 .NET
  f18CFixvrKz8   2024年05月18日   73   0   0 .NET
  rBgzkhl6abbw   2024年05月18日   65   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   33   0   0 .NET
  S34pIcuyyIVd   2024年05月17日   50   0   0 .NET
  gKJ2xtp6I8Y7   2024年05月17日   47   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   28   0   0 .NET
S34pIcuyyIVd