golang的ping检测网络实现
golang ping 服务器,可以用系统调用也可以用go内置的库。
系统调用
func NetWorkStatus() bool {cmd := exec.Command("ping", "www.google.com", "-c", "4", "-W", "5")fmt.Println("NetWorkStatus Start:", time.Now().Unix())err := cmd.Run()fmt.Println("NetWorkStatus End :", time.Now().Unix())if err != nil {fmt.Println(err.Error())return false} else {fmt.Println("Net Status , OK")}return true
}
使用 ICMP Ping
借用第三方的库 https://github.com/tatsushid/go-fastping 48
go-fastping 例子:
p := fastping.NewPinger()
ra, err := net.ResolveIPAddr("ip4:icmp", os.Args[1])
if err != nil {fmt.Println(err)os.Exit(1)
}
p.AddIPAddr(ra)
p.OnRecv = func(addr *net.IPAddr, rtt time.Duration) {fmt.Printf("IP Addr: %s receive, RTT: %v\n", addr.String(), rtt)
}
p.OnIdle = func() {fmt.Println("finish")
}
err = p.Run()
if err != nil {fmt.Println(err)
}
还有一个库使用也很方便 go-ping https://github.com/sparrc/go-ping 71
go-ping 使用例子:
pinger, err := ping.NewPinger("www.google.com")
if err != nil {panic(err)
}
pinger.Count = 3
pinger.Run() // blocks until finished
stats := pinger.Statistics() // get send/receive/rtt stats
不过上面两个例子都用到 ICMP
,这需要以管理员身份运行。
如果只是想检查服务器的某个端口是否能连上,可以用下面的方式,速度更快
func CheckServer(){timeout := time.Duration(5 * time.Second)t1 := time.Now()_, err := net.DialTimeout("tcp","www.google.com:443", timeout)fmt.Println("waist time :", time.Now().Sub(t1))if err != nil {fmt.Println("Site unreachable, error: ", err)return}fmt.Println("tcp server is ok")
}
用http.Client 速度稍慢
func CheckServerHttp() {timeout := time.Duration(5 * time.Second)client := http.Client{Timeout: timeout,}t1 := time.Now()resp, err := client.Get("https://www.google.com")fmt.Println("waist time :", time.Now().Sub(t1))if err != nil {fmt.Println("client.Get, error: ", err)return}defer resp.Body.Close()fmt.Println(resp.Status)
}
golang的ping检测网络实现相关推荐
- 通过Ping检测网络故障的典型次序和IPconfig命令的使用
1.通过Ping检测网络故障的典型次序 (1)ping 127.0.0.1 这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机.如果没有做到这一点,就表示TCP/IP的安装或运行存在某 ...
- 你会用Ping检测网络吗?
经常用Ping来检测网络的通断,同样的操作,还可以使用Pathping,但pathping慢一些,好处是可以得到路由信息. 1.连续测试. ping 1.2.3.4 -t 2.设置测试的包大小和个数. ...
- android ping网络连接服务器失败,Android 中网络连接检测和使用ping检测网络是否可访问...
Android开发中网络相关的检测包括网络是否正常连接和网络已连接但是否可以正常访问两类. (1)其中最常用的就是网络连接是否正常的检测,具体的代码如下:ConnectivityManager con ...
- Android 中网络连接检测和使用ping检测网络是否可访问
Android开发中网络相关的检测包括网络是否正常连接和网络已连接但是否可以正常访问两类. (1)其中最常用的就是网络连接是否正常的检测,具体的代码如下: ConnectivityManager co ...
- golang的ping检测主机存活
Go语言的协程会并发,执行,可以大大提高效率. 列如,我们通过 ping 来检测网络的主机的话. 如果使用shell的话,会检查一个IP,在检查下一个IP,速度很慢. 如果我们使用Python 的话, ...
- BAT脚本: ping检测网络稳定性 与 取命令结果的指定行方法 与 将变量内容追加写入txt文件方法
ping检测稳定性脚本 @echo off set filePath=D:/pingRecord.csv set ping_url=www.baidu.com set sleep_times=5 :t ...
- 通过ping检测网络故障的典型次序
网络设置维修故障: 正常情况下,当你使用Ping命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题:如果某些Ping命令 ...
- 脚本自动ping检测网络情况
在一个实际的集群中,可能有几十上百台服务器,每次自己检测集群健康状态时,一台服务器一台服务器检测,一个字母一个字母敲,我都累成狗 .鉴于此,写了一个小脚本,自动跑ping,减轻工作量,呀吼吼,爽歪歪. ...
- ping检测网络连接异常
一般来说当出现网络无法连接时,习惯性的用ping命令来ping某个ip地址,从而判断网络连接是否正常,但是ping如何来判断的呢?我们可以用下列四步骤来检验网络工作情况. Ping 127.0.0.1 ...
最新文章
- USB开发基础:USB设备的开发流程
- Microsoft Visual Studio 2005 Beta 2 下载地址
- nginx大量TIME_WAIT的解决办法 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'...
- java ipmitool_ipmitool使用手册
- nnlm 中的 Softmax
- 数据结构 5-0 树与二叉树总结
- 关于 iOS 中 new Date()的坑
- int和Integer的区别,哪个在定义变量好
- 手写一个Spring Boot Starter
- 银行的压力测试如何进行?
- SSH项目整合基本步骤
- java deflate_[Java]关于Deflate、GZip格式网页的解压
- 在百度地图中叠加CAD图及GIS数据展示踩坑记
- jQuery读取Table表格数据
- 《Wireshark数据包分析实战(第2版)》目录—导读
- 【求由正方形组成的图形的周长】C++实现
- R语言中级图形:相关系数图及马赛克图
- 9月16日计算机视觉基础学习笔记——认识机器视觉
- 新版V10MXone Pro自适应苹果CMS影视模板/亲测
- 图像处理(灰度化的三种方式)
热门文章
- 什么牌子的蓝牙耳机音质好?2022好音质蓝牙耳机推荐
- python绘制多边形的程序_Python – 绘制多边形
- 银行利息,活期,定期,本金知识集锦!
- 手机录制的视频怎么旋转回来
- 京东双叠加神单漏洞券操作教程
- Cruise的API简介--Properties篇
- 一位大学老师感染新冠期间写的年终总结:怀疑得了新冠39次,吃黄桃罐头5次…...
- 【壁纸】动漫绝美壁纸
- 2022-2028全球及中国光伏金属化铝膏行业研究及十四五规划分析报告
- 软件测试为什么评审,为什么要做设计评审和测试用例评审