经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
C# 实现Ping远程主机功能
来源:cnblogs  作者:WeskyNet  时间:2024/5/13 8:55:25  对本文有异议

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

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

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

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

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

 应用场景:

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

 

 

 

 

原文链接:https://www.cnblogs.com/weskynet/p/18186329

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号