前言
-
由于家中路由器没有改桥接(防止本人不在家父母更换宽带服务商等人为因素断网),为了验证光猫的路由转发性能是否可以跑满带宽需要在主路由侧直接进行Wan口测速。
-
众所周知的原因
Speedtest
已经关闭了中国大陆境内的测速服务器,因此直接使用Speedtest-cli
进行测速无法得到真实的国内出口带宽。 -
在互联网上简单搜索后找到了speedtest.cn-CN-ID和speedtest.net-CN-ID项目,感谢作者维护了多国,尤其是国内三大运营商的可用测速节点,于是有了如下的教程。
正文
直接运行作者的脚本失败
- 主要原因是
Openwrt
的默认Shell是ash
(通过echo $SHELL
查看),本着尽可能不在主路由上“大刀阔斧”的原则,对作者测速脚本进行分析
分析作者测速脚本
-
脚本的执行流程如下
heckroot checksystem # checkupdate checkcurl checkwget checknslookup checktar check_cdn_file check_china install_speedtest checkver statistics_of_run-times main print_end_time global_exit
-
根据函数名可以清晰的推测对应功能,重点需要关注的是
install_speedtest
和main
install_speedtest
部分
- 经过分析,他干了两件事:
-
获取系统架构
-
调用
download_speedtest_file
下载目标架构的speedtest-go
-
主要依据是
download_speedtest_file
中的local url3="https://github.com/showwin/speedtest-go/releases/download/v${Speedtest_Go_version}/speedtest-go_${Speedtest_Go_version}_Linux_${sys_bit}.tar.gz" curl -o speedtest.tar.gz "${cdn_success_url}${url3}"
-
- 好在我使用的
immortalWrt
的仓库正好维护了speedtest-go
,于是就省去了手动下载上传的流程,使用opkg install speedtest-go
安装即可。
题外话
- 绝大多数的
speedtest
测速教程都指向了安装python
和pip
后使用官方的speedtest-cli
,其实这也无可厚非,毕竟绝大多数人的测速需求是对一些不可言喻的服务进行测速,显然这个是不使用于目前的需求的。
main
部分
-
经过分析,他通过调用
runtest
,根据脚本交互过程中用户的选择进行节点的获取和测速,主要流程是:-
判断用户测速选择
-
获取对应选择的测速节点列表即项目维护的
*.csv
-
遍历该
csv
中的所有测速节点进行测速
-
-
主要的测速执行命令是
BrowserUA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36" if [ -z "$1" ]; then ./speedtest-cli/speedtest-go --ua="${BrowserUA}" >./speedtest-cli/speedtest.log 2>&1 else ./speedtest-cli/speedtest-go --ua="${BrowserUA}" --custom-url=http://"$1"/upload.php >./speedtest-cli/speedtest.log 2>&1 fi
-
即通过
--custom-url
制定测速服务器地址进行测速,地址格式为http://"$1"/upload.php
,要求测速节点遵循speedtest
的API标准。
测试具体步骤
安装speedtest-go
-
有两种方式安装
-
包管理:
opkg install speedtest-go
-
下载二进制文件后上传speedtest-go
-
-
安装后可直接运行
speedtest-go --version
或speedtest-go
查看安装是否成功
查询可用服务器
-
共用两个项目可查询
-
打开对应区域的
.csv
文件,获取测速节点的服务器域名/地址与端口号(一般是8080)
测速
-
配置
user-agent
和测速节点对应uri
,使用speedtest-go
进行测速,等待结果即可BrowserUA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36" TestNodeURI=http://speedtest1.sc.chinamobile.com:8080/upload.php #根据不同节点进行替换 speedtest-go --custom-url=${TestNodeURI} --ua="${BrowserUA}"
运行结果
root@Home-LC-Main-Route:~# speedtest-go --custom-url=http://speedtest1.sc.chinamobile.com:8080/upload.php --ua="${BrowserUA}"
speedtest-go v1.7.8 (git-dev) @showwin
⠋ Retrieving User Information
✓ Skip: Using Custom Server
✓ Test Server: [Custom] speedtest1.sc.chinamobile.com:8080
✓ Latency: 47.995197ms Jitter: 723.347µs Min: 47.481928ms Max: 50.015833ms
✓ Packet Loss Analyzer: Running in background (<= 30 Secs)
✓ Download: 998.60 Mbps (Used: 1596.59MB) (Latency: 55ms Jitter: 14ms Min: 46ms Max: 85ms)
✓ Upload: 84.67 Mbps (Used: 134.72MB) (Latency: 97ms Jitter: 3ms Min: 92ms Max: 104ms)
✓ Packet Loss: N/A
后记
-
没有想好要不要专门写个脚本或者为OP开发一个
luci-app
,等以后闲了再看吧,不过确实没找到已有的测速插件。 -
已知有一个luci-app-netspeedtest,但他还是用的
python
那一套speedtest
评论区