C

程序員有二十年 2024-05-12 19:45:14

項目上引用nuget包 Wesky.Net.OpenTools(包同時兼容.net standard2.0和2.1,可以被.net framework4.6.1+環境引用和所有.net core和.net 5以上版本引用)

OpenTools是一個致力于給.NET開發者提高開發效率的開源工具庫。該項目爲個人開源項目,采用MIT開源協議,永不更改協議。開源項目地址:

Gitee:https://gitee.com/dreamer_j/open-tools.gitGithub: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 try11 {12 // 解析域名獲取 IP 地址13 // Resolve the domain name to get IP address14 IPAddress[] addresses = Dns.GetHostAddresses(host);15 if (addresses.Length == 0)16 {17 return new PingResultInfo18 {19 Host = ,20 Result = false,21 Message = "No IP addresses resolved"22 };23 }24 using (Ping pingSender = new Ping())25 {26 PingOptions options = new PingOptions27 {28 // 設置防止數據包被分片29 DontFragment = true // Prevent packet fragmentation30 };31 32 // 數據緩沖區,包含要發送的字符串數據33 // Data buffer containing the string data to send34 string data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";35 byte[] buffer = Encoding.ASCII.GetBytes(data);36 37 // 使用第一個解析的 IP 地址進行 ping 操作38 // Use the first resolved IP address to perform the ping39 IPAddress targetIP = addresses[0];40 41 // 發送 ping 請求並獲取回複42 // Send the ping request and obtain the reply43 PingReply reply = pingSender.Send(targetIP, timeout, buffer, options);44 45 // 創建並返回包含 ping 操作結果的 PingResultInfo 對象46 // Create and return a PingResultInfo object containing the ping result47 return new PingResultInfo48 {49 Host = targetIP,50 Result = reply.Status == IPStatus.Success,51 Message = reply.Status == IPStatus.Success52 ? $"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.Length57 };58 }59 }60 catch (Exception e)61 {62 // 捕獲異常並返回錯誤信息63 // Catch any exceptions and return error information64 return new PingResultInfo65 {66 Host = ,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,說明超時了。

應用場景:

該功能可以應用于需要不定時驗證某個遠程主機或設備或其他機器是否還在線的情況。並根據狀態來展示具體主機是在線還是掉線。

0 阅读:0

程序員有二十年

簡介:感謝大家的關注