golang 實現ping 命令

2021-09-26 15:58:53 字數 739 閱讀 5260

在專案中,我們需要知道哪些ip是可用ip,這時候想到了用icmp(internet控制報文協議)。於是就在網上查詢,後來找到了乙個開源庫–github.com/sparrc/go-ping。這個庫簡單好用,能達到專案需求,也推薦大家使用。

貼乙個示例吧.(當然你得先 go get github.com/sparrc/go-ping 庫)。

func serverping(target string) bool  

pinger.count = icmpcount

pinger.timeout = time.duration(pingtime*time.millisecond)

pinger.setprivileged(true)

pinger.run()// blocks until finished

stats := pinger.statistics()

fmt.println(stats)

// 有回包,就是說明ip是可用的

if stats.packetsrecv >= 1

return false

}

這裡是通過回包數量來判斷的,也可以通過掉包率來判斷。同時,該庫提供了statistics結構體,包含了詳細的icmp資訊,如下

type statistics struct
非常豐富的icmp資訊,足夠應付多種應用場景。個人感覺這個庫非常棒,在這裡mark一下。

ping命令實現內幕

在網路上有不少ping命令的實現,但是要麼連執行都不行,要麼就是表層的僥倖的能成功一些例子。今我自己寫了個ping命令程式,自習研究了一下,原來問題頗多。很多還得看底層協議 才能搞清楚它的來龍去脈。先將除錯版ping命令程式 貼上 ping程式,completed by ben include in...

ping命令的實現

ping命令的實現 include include include include include include include include include include include include include include include define packet size 4...

ping 命令 Ping命令

簡單介紹使用ping命令檢查網路連線是否可達以及分析網路發生故障的位置。其中,ping用於檢查網路連線及主機是否可達 ping命令主要用於檢查網路連線及主機是否可達。ping功能是基於icmp協議來實現的 源端向目的端傳送icmp請求 echo request 報文後,根據是否收到目的端的icmp應...