目录

实例

安装

支持的操作系统

Linux

Windows


go-ping库地址:https://github.com/go-ping/ping

受go-fastping启发,一个简单但功能强大的Go Go的ICMP回显(ping)库 。

实例

这是一个非常简单的示例,该示例发送和接收三个数据包:

pinger, err := ping.NewPinger("www.google.com")
if err != nil {panic(err)
}
pinger.Count = 3
err = pinger.Run() // Blocks until finished.
if err != nil {panic(err)
}
stats := pinger.Statistics() // get send/receive/duplicate/rtt stats

这是一个模拟传统UNIX ping命令的示例:

pinger, err := ping.NewPinger("www.google.com")
if err != nil {panic(err)
}// Listen for Ctrl-C.
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {for _ = range c {pinger.Stop()}
}()pinger.OnRecv = func(pkt *ping.Packet) {fmt.Printf("%d bytes from %s: icmp_seq=%d time=%v\n",pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt)
}pinger.OnDuplicateRecv = func(pkt *ping.Packet) {fmt.Printf("%d bytes from %s: icmp_seq=%d time=%v ttl=%v (DUP!)\n",pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt, pkt.Ttl)
}pinger.OnFinish = func(stats *ping.Statistics) {fmt.Printf("\n--- %s ping statistics ---\n", stats.Addr)fmt.Printf("%d packets transmitted, %d packets received, %v%% packet loss\n",stats.PacketsSent, stats.PacketsRecv, stats.PacketLoss)fmt.Printf("round-trip min/avg/max/stddev = %v/%v/%v/%v\n",stats.MinRtt, stats.AvgRtt, stats.MaxRtt, stats.StdDevRtt)
}fmt.Printf("PING %s (%s):\n", pinger.Addr(), pinger.IPAddr())
err = pinger.Run()
if err != nil {panic(err)
}

它发送ICMP Echo Request数据包,并等待Echo Reply作为响应。如果收到响应,它将调用OnRecv回调,除非已经接收到具有该序列号的数据包,在这种情况下,它将调用OnDuplicateRecv回调。完成后,它将调用OnFinish回调。

对于全平示例,请参阅 CMD /平/ ping.go。

安装

go get -u github.com/go-ping/ping

要安装本地Go ping可执行文件,请执行以下操作:

go get -u github.com/go-ping/ping/...
$GOPATH/bin/ping

支持的操作系统

Linux

该库尝试通过UDP发送“非特权” ping。在Linux上,必须使用以下sysctl命令启用它:

sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"

如果您不想这样做,则可以调用pinger.SetPrivileged(true) 代码,然后在二进制文件上使用setcap使其绑定到原始套接字(或仅以root身份运行):

setcap cap_net_raw=+ep /path/to/your/compiled/binary

有关更多详细信息,请参见此博客 和Go x / net / icmp软件包。

Windows

您必须使用pinger.SetPrivileged(true),否则您将收到以下错误:

socket: The requested protocol has not been configured into the system, or no implementation for it exists.

尽管使用了方法名称,但该方法无需提升特权即可工作,并且已在Windows 10上进行了测试。请注意,由于Go x / net / ipv4和x / net / ipv6程序包中的限制,因此不支持访问数据包TTL值。 。

golang ping go-ping库 简介相关推荐

  1. Golang GUI编程-图形化界面库简介

    Fyne是一个开源的Golang图形化界面库,通过它可以便捷的为桌面/移动及其它设备建立图形化应用.结合了Golang的强大和简洁,Fyne提供了一整套的组件库,通过它我们可以更方便的进行全平台开发并 ...

  2. linux使用ping命令ping本机,Linux下使用ping命令判断网络的好坏

    简介 在Linux系统里面如果想判断网络的好坏,脑海中蹦出的第一个命令就是ping了. ping命令基本是最常用的网络命令,它可以用来测试与目标主机的连通性. ping通过发送ICMP ECHO_RE ...

  3. log包在Golang语言的标准库中是怎么使用的?

    Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger.但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等. 01. ...

  4. 【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )

    文章目录 一.Windows 动态库简介 二.Visual Studio 调用动态库 一.Windows 动态库简介 在 C:\Windows\System32 目录中 , 存放着 Windows 中 ...

  5. Py之Pandas:Python的pandas库简介、安装、使用方法详细攻略

    Py之Pandas:Python的pandas库简介.安装.使用方法详细攻略 目录 pandas库简介 pandas库安装 pandas库使用方法 1.函数使用方法 2.使用经验总结 3.绘图相关操作 ...

  6. linux命令菜鸟ping,Linux ping命令

    Linux ping命令 Linux ping命令用于检测主机. 执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 语 ...

  7. c++中algorithm头文件、STL库简介及使用说明

    c++中algorithm头文件.STL库简介及使用说明 c++中algorithm头文件是STL的算法部分,里边定义了各种算法,比如sort之类的.加上algorithm就可以使用stl库里的各种算 ...

  8. 网络编程知识预备(5) ——libcurl库简介及其编程访问百度首页

    本文为学习笔记,整合课程内容以及下列文章: 其中,libcurl函数库常用字段解读部分: 参考博文:原文地址 作者:冬冬他哥哥 目录 Libcurl库简介 Libcurl等三方库的通用编译方法 三方库 ...

  9. 复制vmware overLay网络无法ping通 ping www.baidu.com可以

    因为忘记关闭防火墙了!!!!!    要永久关闭!! 修改hostname https://blog.csdn.net/qq_27327261/article/details/109100219 关闭 ...

  10. OpenGL 库 简介

    OpenGL 库 简介 OpenGL库函数的命名方式为:<库前缀><根命令><可选的参数个数><可选的参数类型>. 库前缀有gl.glu.aux.glu ...

最新文章

  1. 李宏毅机器学习笔记(三)——Regression: output a scalar amp;amp; Gradient Descent
  2. 中断锁与信号量的一种使用场景
  3. 分数运算C++代码实现
  4. Linux的NTP配置总结(转)
  5. C语言十进制数转换为八进制(附完整源码)
  6. 通过反射越过泛型检查
  7. 排序(选择,冒泡,直接插入,希尔排序)
  8. 域服务器怎么修改管理员密码,域服务器更改客户端管理员的密码
  9. WinCE5.0下直接写屏操作与函数 CreateDIBSection() 的使用(转)
  10. php上传视频无图像,php-PHP实现视频上传与播放,代码出现问题,求解!上传图片后提示没有上传文件或文件大于300M,是什么原因?...
  11. 图解源码之java锁的获取和释放(AQS)篇
  12. Oracle EBS:打开工作日历查看
  13. 【Autoware自动驾驶-开源项目实践】大家快来入门体验啦
  14. 使用注册表文件(REG)添加、修改或删除windows注册表项和值
  15. myeclipse10破解补丁激活方法
  16. 互联网大佬“舌战”996:马云、刘强东、周鸿祎、张朝阳、李国庆,你站谁?
  17. 程序员面试指南 - 自我介绍
  18. 微信小程序开发之——婚礼邀请函-项目展示(4.1)
  19. Spring Boot开发之使用JustAuth组件实现第三方登录(QQ、微博等)
  20. 如何使用 scp 将文件夹从远程复制到本地?

热门文章

  1. 行业发展之关于有用信息和无用信息的思考
  2. [翻译]Json.NET API-Linq to Json Basic Operator(基本操作)
  3. 升级office SP3一定要小心!
  4. FD.io/VPP — 流量追踪
  5. Nova rebuild for boot from volume issue
  6. Linux VIM IDE
  7. 使用VScode开发ESP32,PlatformIO开发ESP32
  8. #ifdef __cplusplus
  9. C# 对字符进行UrlEncode/UrlDecode
  10. PAT A1030 动态规划