小计 -- 如何利用speedtest-cli 来实现ping丢包率的功能

要在新加坡架一台云主机,是使用AWS的、阿里云的、Ucloud的?决定因素中,到东南亚各国的网络品质是决定性在因素。speedtest-cli给我们提供了一个很好的测速工具,唯一不足是不能提供ping的丢包率功能。没有这个功能 ,而且还需要的话,那就补足一下。

speedtest-cli安装:

在ubuntu LTS16.04上,使用下面的命令安装:

1
2
pip install --upgrade pip
pip install speedtest-cli

speedtest-cli 项目github 6000+星

speedtest-cli 使用

1
2
3
4
speedtest-cli --byte  --share --server=1536
#--byte 是以byte来显示上传下载速度
#--share 会在www.speedtest.net 上生成一个png图来显示结果
#--server=<server_id> 是测试目标主机的id号,可以用speedtest-cli list命令来显示所有speedtest.net可用的全世界各地的测速主机。1536是speedtest.net在香港的一台主机。

显示效果如下:

share results中的图片:

增加ping丢包率

用speedtest-cli工具已经非常很不错了,小小的不足就是ping延时会有比较大的波动,无法显示丢包率。没有这个功能 ,而且还需要的话,那就补足一它。

  1. 要解决的第一个问题就是如果通过 speedtest-cli list命令显示的server_id 来找到ping的主机?其实方法还是很简单的,speedtest-cli是用python写的,可以直接在代码中找到获取server_id 对应服务器host_name的url.这个url就在speedtest-cli的python代码中。url地址如下:
    http://www.speedtest.net/speedtest-servers-static.php
  2. 通过上面的页面,找到server_id所对应host_name后,就可以用ping命令来生成丢包率了。
    1
    2
    #如上面那台香港服务器的域名,我们ping 1000个包,取到最后面三行的结果
    ping -c 1000 www.suntechspeedtest.com | tail -n 3

最后给个脚本,来测试东南亚几个国家网络情况

  1. 先用上面的方法生成一个list.txt东南亚各国测试ip的文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    root@ip-xx-xx-xx-xx:~# cat list.txt 
    香港:1536:www.suntechspeedtest.com
    新加坡:2054:speedtest10.vqbn.com
    越南:16749:vnmhcmspt1.vietnamobile.com.vn
    泰国:13700:speedtest.rmutsv.ac.th
    马来西亚:9580:speedokuantan1.celcom.net.my
    印尼:3070:speedtest.pesat.net.id
    菲律宾:9935:ns3.panaybroadband.com.ph
    新德里:9214:speedtestdelhi.actcorp.in
  2. 再写个脚本来把从新加坡的测试服务器到上面的国家网络情况给跑出来

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    root@ip-xx-xx-xx-xx:~# cat speedtest.sh 
    #!/bin/bash
    for i in `cat list.txt`
    do
    name=`echo $i | awk -F: '{print $1}'`
    server_id=`echo $i | awk -F: '{print $2}'`
    host_name=`echo $i | awk -F: '{print $3}'`
    echo $name
    speedtest-cli --byte --share --server=$server_id
    ping -c 1000 $host_name | tail -n 3
    done

脚本生成的数据图如下:

图中已经增加了1000个ping包的统计数据,有丢包率,ping的延时也会比speedtest给出的来得准确。

如果有时间,会去改一下speedtest-cli的原码,可以设置一个长ping 的参数,让它可以支持长ping并生成延时,这样就完美了。

坚持原创技术分享,您的支持将鼓励我继续创作!