一、使用步骤
1.引入库
代码如下(示例):
go get github.com/go-ping/ping
2.使用
package main
import (
"fmt"
"time"
"github.com/go-ping/ping"
)
func main() {
fmt.Println(Ping("www.baidu.com", time.Second))
}
func Ping(addr string, t time.Duration) bool {
// ping.New()
pinger, err := ping.NewPinger(addr)
if err != nil {
return false
}
// 设置ping的次数
pinger.Count = 3
pinger.Timeout = time.Duration(t)
/*
设置pinger将发送的类型。
false表示pinger将发送“未经授权”的UDP ping
true表示pinger将发送“特权”原始ICMP ping
*/
pinger.SetPrivileged(true)
// 运行pinger
pinger.Run()
stats := pinger.Statistics()
if stats.PacketsRecv >= 1 {
return true
} else {
return false
}
}
pinger.Statistics()
的返回值类型为 *ping.Statistics
,如下。所以也可以用stats.PacketsRecv/stats.PacketsSent == 1
来表示是否成功!
type Statistics struct {
// PacketsRecv is the number of packets received.
PacketsRecv int
// PacketsSent is the number of packets sent.
PacketsSent int
// PacketsRecvDuplicates is the number of duplicate responses there were to a sent packet.
PacketsRecvDuplicates int
// PacketLoss is the percentage of packets lost.
PacketLoss float64
// IPAddr is the address of the host being pinged.
IPAddr *net.IPAddr
// Addr is the string address of the host being pinged.
Addr string
// Rtts is all of the round-trip times sent via this pinger.
Rtts []time.Duration
// MinRtt is the minimum round-trip time sent via this pinger.
MinRtt time.Duration
// MaxRtt is the maximum round-trip time sent via this pinger.
MaxRtt time.Duration
// AvgRtt is the average round-trip time sent via this pinger.
AvgRtt time.Duration
// StdDevRtt is the standard deviation of the round-trip times sent via
// this pinger.
StdDevRtt time.Duration
}