侧边栏壁纸
博主头像
Gerchart's Blog 博主等级

For the ideal life is the ideal of the life.

  • 累计撰写 5 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Openwrt使用SpeedTest进行Wan口速率测试

gerchart
2025-02-26 / 0 评论 / 0 点赞 / 67 阅读 / 0 字
温馨提示:
本文最后更新于2025-02-26,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

  • 由于家中路由器没有改桥接(防止本人不在家父母更换宽带服务商等人为因素断网),为了验证光猫的路由转发性能是否可以跑满带宽需要在主路由侧直接进行Wan口测速。

  • 众所周知的原因Speedtest已经关闭了中国大陆境内的测速服务器,因此直接使用Speedtest-cli进行测速无法得到真实的国内出口带宽。

  • 在互联网上简单搜索后找到了speedtest.cn-CN-IDspeedtest.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_speedtestmain

install_speedtest部分

  • 经过分析,他干了两件事:
  1. 获取系统架构

  2. 调用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测速教程都指向了安装pythonpip后使用官方的speedtest-cli,其实这也无可厚非,毕竟绝大多数人的测速需求是对一些不可言喻的服务进行测速,显然这个是不使用于目前的需求的。

main部分

  • 经过分析,他通过调用runtest,根据脚本交互过程中用户的选择进行节点的获取和测速,主要流程是:

    1. 判断用户测速选择

    2. 获取对应选择的测速节点列表即项目维护的*.csv

    3. 遍历该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 --versionspeedtest-go查看安装是否成功

查询可用服务器

测速

  • 配置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

0

评论区