鉴于某些地区家庭宽带 IPv4 和 IPv6 上下带宽并不对等,需要分开测速,Ookla 的测速服务器越来越少,支持双栈的服务器更少,官方的 Web 端 和 cli 端 没有 ipv6 only 和指定地域选项,默认会根据 IP 返回服务器列表,speedtest 域名本身就在国外,获取服务器列表接口不小心分流后就会出现无法返回中国服务器的情况,所以需要精确找出中国地区的服务器,并且支持 IPv6 。其实可以通过 修改系统 hosts 指定 IPv4/IPv6 地址,干预程序域名解析,这样就可以 定点 (指定服务器 ID ) 定栈 ( IPv4/IPv6 )进行测速了。
因为官方客户端闭源,通过阅读非官方客户端 https://github.com/sivel/speedtest-cli 可知,目前官方尚有 API 查询接口可用 https://www.speedtest.net/api/js/servers?engine=js&search=china 通过遍历中国地区服务器,使用 dig 命令找出有 AAAA 记录的服务器即可 (以下命令请确保 jq 程序已安装)
for host in $(curl -s https://www.speedtest.net/api/js/servers\?engine\=js\&search\=china | jq ".[].url" | awk -F'[:/]' '{print $4}'); do if r=$(dig +short AAAA $host @223.5.5.5 | head -n 1) && [[ -n "$r" ]]; then echo "$r" $host; fi; done
成果如下 (更新:2023/08/04):
# 成都电信 29071 China - China Telecom
240e:16:1001:150::3 speedtest1.sc.189.cn
# 重庆广电 5530 Chongqing - CCN
2401:7e00:fffe:22::6a speedtest1.cqccn.com
# 兰州电信 3973 Lanzhou - China Telecom
# 240e:2a:1:ff00::2 speed.bajianjun.com
# 上海联通 24447 Shanghai - China Unicom 5G
2408:8000:9000:20e6::5dd 5g.shunicomtest.com
# 北京联通 43752 Beijing - BJ Unicom
2408:8000:1010:10::254:31 beijing.unicomtest.com
# 北京移动 25828 Beijing - China Mobile Group Beijing Co.Ltd
2409:8087:0:45:600::9 speedtest.bmcc.com.cn
Linux/Mac:/etc/hosts
Windows:C:\Windows\system32\drivers\etc\hosts
追加上述内容,如果使用了 dnsmasq/smartdns 等自建 DNS 也可以加入相关规则进行全局干预。
打开 https://ipv6.speedtest.net Change Server 输入关键字切换切换服务器,按 F12 观察网络请求
优点:使用方便,所见即所得
缺点:浏览器开销太大,在低配软路由开虚拟机,跑一个 windows 再开一个浏览器,机器本身就快死了,测速偏低。
到 https://www.speedtest.net/apps/cli 根据系统下载官方 cli 客户端,使用 speedtest -s <服务器 ID> 进行定点测速(定栈已通过 hosts 文件干预),通过抓包分析,程序会通过 cli.speedtest.net 域名获取服务器列表并进行 ISP 定位,可根据实际情况加入分流名单,解决其使用境外服务器导致的 程序卡顿/报错,或者 ISP 定位不准的问题。
优点: 多平台官方客户端,程序占用资源小,可在裸机/容器中运行,性能优良,测速准确。
缺点: 闭源黑盒
非官方客户端高 stars 项目 sivel/speedtest-cli release 版本中依然使用了根据 IP 返回最近服务器列表,使用参数--server <服务器 ID> 有可能报会服务器不存在。在 pull request #784 "Add option --custom to perform test with custom servers" 有大佬加入了自定义补丁,但是没有被作者 merge 到主干分支中,并目前已经和主干冲突,但是实测可用,具体使用步骤:
wget "https://raw.githubusercontent.com/sivel/speedtest-cli/ca087bac99f94608f65d050f2401f08aea6d376f/speedtest.py" -O speedtest-cli
chmod 755 speedtest-cli
./speedtest-cli --custom "https://www.speedtest.net/api/js/servers?engine=js&search=china" --server <服务器 ID>
优点:开源、跨平台
缺点: python 脚本程序,包依赖复杂,程序占用资源小,但性能一般(估计测速时间过短,未到 QoS 上限窗口就结束了,有兴趣朋友可修改读数据的时长试试),测速偏低。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.