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,说明超时了。

应用场景:

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

C# 实现Ping远程主机功能的更多相关文章

  1. 用C语言实现Ping程序功能

    本文转载自:http://www.ibm.com/developerworks/cn/linux/network/ping/ ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具.p ...

  2. 用C语言实现Ping程序功能---转

    ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具.ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这 ...

  3. (转)用C#实现实现简单的 Ping 的功能,用于测试网络是否已经连通

    本文转载自:http://blog.csdn.net/xiamin/archive/2009/02/14/3889696.aspx 用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通 1 ...

  4. 开启windows ping端口功能

    1.打开控制面板,选择程序 2.选择打开和关闭windows功能 3.将Tenet客户端选项勾上 4.运行栏中输入cmd,进入到命令窗口 5.输入命令   ping    ip地址     端口号  ...

  5. 【转】perl ping检测功能脚本代码

    我的第一个用于生产环境的perl脚本,虽然不是很优秀,但也迈出了扎实的一步 :)领导有任务,给一批IP列表,ping每一台机器,如果没有响应就发邮件通知,通知的邮件需要分开,不能通知一个列表,得一封一 ...

  6. C#实现简单的 Ping 的功能,用于测试网络是否已经联通

    /// <summary> /// 是否能 Ping 通指定的主机 /// </summary> /// <param name="ip">ip ...

  7. C++实现ping功能

    今天接到需求要实现ping的功能,然后网上查了一些资料,对网络编程的一些函数熟悉了一下,虽然还有一些细节不清楚,但是慢慢积累. 要实现这样的功能: 基础知识 ping的过程是向目的IP发送一个type ...

  8. C++实现ping功能<转>

    今天接到需求要实现ping的功能,然后网上查了一些资料,对网络编程的一些函数熟悉了一下,虽然还有一些细节不清楚,但是慢慢积累. 要实现这样的功能: 基础知识 ping的过程是向目的IP发送一个type ...

  9. Java实现ping功能的三种方法及Linux的区分

    前大半部份转自:https://blog.csdn.net/futudeniaodan/article/details/52317650 检测设备的运行状态,有的是使用ping的方式来检测的.所以需要 ...

  10. PING命令入门详解

    转自:http://www.linkwan.com/gb/tech/htm/928.htm 1.Ping的基础知识 ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很 ...

随机推荐

  1. Mysql Order 排序的时候占用很长时间解决思路

    MySQL中的连表查询(JOIN)在进行ORDER BY排序时可能会变得很慢,尤其是当处理大量数据时.以下是一些优化策略,可以帮助减少排序操作的时间: 索引优化: 确保参与排序的列上有索引.如果排序的 ...

  2. 使用OHOS SDK构建bullet

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/bulletphysic ...

  3. C++执行Linux命令

    一.执行简单命令 比如需要创建文件.文件夹.删除文件 #include <iostream> #include <stdio.h> #include <stdlib.h& ...

  4. spring复习(二)AOP

    1.aop基于xml以及注解的AOP配置 什么是AOP 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强. AOP术语: ...

  5. 鸿蒙开发套件之DevEco Profiler助您轻松分析应用性能问题

     作者:shizhengtao,华为性能调优工具专家 应用的性能优化一直以来都是开发者所面临的一大难题,在2023HDC大会上全新亮相的HarmonyOS NEXT开发者预览版,其中鸿蒙开发套件Dev ...

  6. Node.js 中的事件循环机制

    一.是什么 在浏览器事件循环中,我们了解到javascript在浏览器中的事件循环机制,其是根据HTML5定义的规范来实现 而在NodeJS中,事件循环是基于libuv实现,libuv是一个多平台的专 ...

  7. python实现不同颜色气球隔开摆放,并且提示不能摆放的情况

    这个是一位隐秘人物让我做的一道题(如标题),我也分享出来了. 首先是成品展示(暂时没有做成可视化界面的样子): 我做的是把所有的气球录入进来,然后利用基础数据结构(字典,数据等)排序等,由于我是初学, ...

  8. 顺通鞋服ERP库存管理系统

    鞋服ERP库存管理系统是专门为鞋服行业设计的企业资源规划软件,它提供了一系列库存管理功能,帮助鞋服企业有效管理库存流程和提升库存管理效率.以下是一些鞋服ERP库存管理系统常见的功能和特点: 1. 库存 ...

  9. Java面试题:请谈谈Java中的volatile关键字?

    在Java中,volatile关键字是一种特殊的修饰符,用于确保多线程环境下的变量可见性和顺序性.当一个变量被声明为volatile时,它可以确保以下两点: 内存可见性:当一个线程修改了一个volat ...

  10. 全链路灰度新功能:MSE 上线配置标签推送

    简介: 本文介绍了全链路灰度场景给配置管理带来的问题,介绍了 MSE 针对这一场景的解决方案,并通过实践的方式展示了配置标签推送的使用流程.后续,MSE 还会针对配置治理做更多的探索,帮助用户更好地解 ...