使用Go第三方库实现ping命令

一、使用步骤

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
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值