在<Go语言编程>中有icmp ping的例子,不过实际测试不通过....这个有空研究一下源码再看.
注: 原文代码需要修改
_, err = conn.Read(msg[0:])
改为_, err = conn.Read(msg[20:])
在网找到了一个可用的模块,还可以支持ipv6(摘自go自带源码 src/pkg/net/ipraw_test.go)
http://golangtc.com/t/526e1f8b320b522433000003
https://github.com/paulstuart/ping/blob/master/ping.go
简单测试了一下.可用
package main
import (
"ping"
"fmt"
"time"
"os"
)
func main() {
//1.输入参数处理.这里使用os而非flag
var host string
if len(os.Args) != 2 {
host="127.0.0.1"
}else{
host = os.Args[1] //目标域名
}
t1:=time.Now().UnixNano()
alive,err:=ping.Ping(host,3)
fmt.Println("result ",alive,err)
t2:=time.Now().UnixNano()
fmt.Println(t2-t1);
}