首页 > 编程语言 >C# 实现Ping远程主机功能

C# 实现Ping远程主机功能

时间:2024-05-11 13:42:12浏览次数:13  
标签:return C# 主机 ping PingResultInfo IP reply 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版本更新功能,以及实现的具体代码演示。

 

咱们先看一下正常的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,说明超时了。

 应用场景:

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

 

 

 

 

标签:return,C#,主机,ping,PingResultInfo,IP,reply,Ping
From: https://www.cnblogs.com/weskynet/p/18186329

相关文章

  • 采用flex布局,父组件width为百分比,解决子组件canvas画布width自适应问题
     创建EleResize.js文件(拷贝以下代码即可)varEleResize={ _handleResize:function(e){  varele=e.target||e.srcElement  vartrigger=ele.__resizeTrigger__  if(trigger){   varhandlers=trigger.__z_resizeListeners   if......
  • 利用pearcmd实现裸文件包含
    利用pearcmd实现裸文件包含在ctf中,常常有这样一类题:题目很简单,一般围绕一个include函数展开。例:ctfshow元旦水友赛easy_include这类题目没有提供文件上传点,因此不能使用常规方法上传一句话实现命令执行。裸文件包含是一种针对这类题目的解题手法。这里引入大佬的文......
  • 怎么把excel里已经变成科学记数法的数字恢复
    从数据库导出的数据经常有id字段,包含一长串的数字,导出为excel或者csv格式后打开,id字段经常被转换成科学技术法了,不方便查看。如果想把它转变为通常的显示方法,在单元格上点击鼠标右键,点击“设置单元格格式”。在打开的窗口中,切换到“数字”选项卡,点击“自定义”,然后在右侧“类型......
  • C++_函数式编程-以及常用序列化
    函数式编程函数式编程是一种编程范式,它强调程序的构建是通过应用(applying)和组合函数(composingfunctions)来实现的函数式编程属于“结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用 LambdaCalculus函数式编程语言早期的函数式......
  • Copilot - OpenAI与GitHub联合出品的自动代码生成AI+VirtualLCD - 可用于 GUI 移植的
    1、AntOS-适用8051的超轻量级实时操作系统AntOS是一款超轻量级实时操作系统,抢占式调度极简内核,专门为小型家电及轻量型物联网终端设计,适合在8051为内核的MCU上运行。项目主页: https://gitee.com/zeweni/ant-osAntOS提供层级服务,可以进行任意裁剪。内核层包含两个子系......
  • post与.net core接受请求参数
    ///ffff constres=awaitinstancs.post(  "Know/DocList_Insert",  {   Id:1,   Name:"酷酷酷酷酷",   ClientId:1,   EqId:1,  },  {headers:{"Content-Type":"application/form-data"}} ......
  • PikaScript - 面向嵌入式的超轻量级python引擎+Ring-Buffer - 仅80行代码的超简洁环形
    1、PikaScript-面向嵌入式的超轻量级python引擎PikaScript(前称mimiscript)是一个完全重写的超轻量级python引擎,零依赖,零配置,可以在少于4KB的RAM下运行(如stm32g030c8和stm32f103c8),极易部署和扩展。项目地址:https://github.com/pikasTech/pikascriptPikaScript是使用c语言写......
  • buuctf-pwn-ciscn_2019_es_2
    checksecida我们看到在vul函数中,有两个read函数,每个都读取了0x30(48)大小的字符,并放入字符数组s中,也就是说我们能溢出的只有8个字节,刚好覆盖到ebp和返回地址所以我们需要栈迁移,使我们能溢出更多字节首先利用第一个read,输入40字节的数据,刚好覆盖到ebp,然后printf就会顺带打印......
  • C和C++中size sizeof strlen length的对比
    一、sizeof()sizeof是一个操作符,它在编译期间确定的,返回的是静态大小。它可以应用于基本类型、类类型、数组和指针等。例如:sizeof(int)或sizeof(array)。对于数组,sizeof返回整个数组的大小(包括所有元素)。对于指针,sizeof返回指针本身的大小(通常取决于平台和编译器,例如在3......
  • Oracle异常(二)
    ORA-01704:字符串文字太长当我们在Oracle数据库中插入或更新一个字符串时,如果字符串的长度超过数据库的限制,就会出现ORA-01704错误。这个错误的具体描述是“字符串文字太长”。在Oracle数据库中,一个字符串的长度不能超过4000个字符。如果字符串超过了这个限制,将导致ORA-01704错误......