用户国营 发表于 2024-5-19 19:57:49

C# 实现Ping远程主机功能

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版本更新功能,以及实现的具体代码演示。
https://img2024.cnblogs.com/blog/1995789/202405/1995789-20240511125256099-40559103.png
 
咱们先看一下正常的Ping的效果:
https://img2024.cnblogs.com/blog/1995789/202405/1995789-20240511130231142-211571678.png
 引用nuget包以后,只需要直接调用:
 PingHelper.PingHost方法即可,第一个参数是IP地点或域名,第二个是超时时间,单位毫秒.
https://img2024.cnblogs.com/blog/1995789/202405/1995789-20240511130321499-1391360782.png
具体源码和实现说明:
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>
8public 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;
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)
https://img2024.cnblogs.com/blog/1995789/202405/1995789-20240511130955365-724886671.png
 如果Ping一个不存在的IP,或者连不上的,比方192.168.0.1
显示超时,并且Result状态为false,代表没连上。状态值为TimeOut,说明超时了。
https://img2024.cnblogs.com/blog/1995789/202405/1995789-20240511131155610-1623716138.png
 应用场景:
该功能可以应用于需要不定时验证某个远程主机或设备或其他机器是否还在线的情况。并根据状态来展示具体主机是在线照旧掉线。
 
 
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C# 实现Ping远程主机功能