Files

100 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Wpyw 网速测速(命令行版)
针对中国大陆宽带(**联通 / 电信 / 移动**)优化的零依赖命令行测速工具。
纯 Python 标准库实现,不需要 `pip install` 任何东西,双击 `测速.cmd` 就能跑。
```
╭──────────────────────────────────────────────────────────────────────╮
│ Wpyw 网速测速 · 命令行版 v1.0 │
│ 联通 / 电信 / 移动宽带 · 多线程测速 · 节点实测优选 │
╰──────────────────────────────────────────────────────────────────────╯
开始时间 2026-09-17 20:22:13
测试模式 快速 下载 5s / 8 连接 上传 4s
本机地址 192.168.0.103
公网地址 2408:8214:... 中国 山东 青岛
运营商 联通 中国 山东 青岛 联通
默认网关 192.168.0.1
── ① 延迟 / 抖动 / 丢包 ────────────────────────────────────────────────
默认网关 1.7 ms ▎ 抖动 0.5 ms
阿里云 DNS 4.7 ms ▎ 抖动 2.0 ms
国际出口 184.3 ms ████████████████ 国际线路,仅供参考
测速节点 TCP 9.4 ms 到测速节点的纯网络往返(最优值)
国内平均延迟 4.7 ms 抖动 2.0 ms 丢包 0.0% ★★★★★ 极佳
── ② 下载速度 ──────────────────────────────────────────────────────────
节点 腾讯云镜像(深圳) 8 连接 · 5.0s · 共 231 MB
实测 374.40 Mbit/s = 46.8 MB/s 峰值 637.03 Mbit/s
── ③ 上传速度 ──────────────────────────────────────────────────────────
节点 China Unicom 5G(Shanghai) 4 连接 · 4.0s · 共 40 MB
实测 74.64 Mbit/s = 9.3 MB/s 峰值 167.04 Mbit/s
── ④ 结论 ──────────────────────────────────────────────────────────────
下载 374.40 Mbit/s (≈300M 档) 上传 74.64 Mbit/s (≈50M 档)
综合评级 A
```
## 用法
| 命令 | 说明 |
| --- | --- |
| 双击 `测速.cmd` | 标准测速(约 25–40 秒) |
| `python wpyw-speedtest.py --quick` | 快速测速(约 15 秒) |
| `python wpyw-speedtest.py --full` | 完整测速(约 60 秒,更接近峰值) |
| `python wpyw-speedtest.py --conns 16 --duration 12` | 千兆宽带建议加大并发与时长 |
| `python wpyw-speedtest.py --json result.json` | 结果同时写入 JSON(`--json -` 输出到标准输出) |
| `python wpyw-speedtest.py --no-upload` | 只测下行与延迟 |
| `python wpyw-speedtest.py --ascii --no-color` | 老终端 / 日志重定向场景 |
全部参数见 `python wpyw-speedtest.py --help`。
> 目录里另附一份真实运行记录:`示例输出.txt`(终端报告原文)与 `示例结果.json`(机器可读结果)。
> 那次跑在山东青岛联通家用宽带上:下行 330 Mbit/s、上行 135 Mbit/s、国内平均延迟 10.5 ms、评级 A+、耗时 36 秒。
## 为什么要「节点实测优选」
同一台机器、同一条联通线路,不同节点的实测差距可以是**几十倍**:
| 下载节点 | 实测(8 连接) | 说明 |
| --- | --- | --- |
| 腾讯云镜像(深圳) | **445 Mbit/s** | 联通出口友好,工具默认首选 |
| 华为云镜像(贵州) | 350 Mbit/s | 备用 |
| 上海交大镜像 | 34 Mbit/s | 教育网互联一般 |
| 阿里云镜像(杭州) | **5 Mbit/s** | 该线路与阿里云互联极差 |
所以工具**不写死节点**:先对候选节点各做一次短测(默认 2.5 秒),
实测够快就立刻停止试测并进入正式测试;下载节点与上传节点都是运行时选出来的。
结果里会明确写出**本次用的是哪个节点**,避免「换个节点数字就变」却不知道原因。
## 测量方法(以及为什么这样测)
- **下载**:多线程(默认 8 连接)HTTP 循环拉取大文件,跳过前 1.2 秒慢启动,
取稳态均值;同时给出峰值与逐秒曲线(曲线能直观看到限速/抖动)。
- **上传**:每轮发送固定大小请求并**正常收尾**(不是「发一半掐断」)。
早期版本用掐断式测量会把内核缓冲区的数据也算进去,数字虚高(实测虚高近一倍),
而且会在测速节点留下半开连接,拖慢后续测量。
- **延迟**:调用系统 `ping` 并发测试多个国内目标,抖动 = 相邻样本差的均值。
**国际出口单独列出、不计入国内均值** —— 否则 8.8.8.8 的丢包会把你整条线的评分带沟里。
- **节点发现**:上传节点从 speedtest.net 服务器列表里筛中国境内节点,**联通节点优先**,
失败则回退 Cloudflare。
## 判读建议
- **上行明显低于下行是正常的**:家用宽带普遍不对称(例如 500M/50M)。
工具会按实测值给出档位估算,只做保守取整。
- **公共测速节点会限速排队**:上行波动大时工具会明确提示「结果偏保守」。
要更准就 `--full`,或换时段复测。
- **延迟高但测速快**:通常是 WiFi 或路由器 QoS 造成的 bufferbloat,
看「默认网关」那一行 —— 网关延迟就几十毫秒的话,问题在局域网侧,不在运营商。
- **丢包**:国内目标出现丢包才值得排查(网线/水晶头/路由器负载);
国际出口丢包在晚高峰属常见现象。
## 环境要求
- Windows + Python 3.8 及以上(不需要任何第三方库;本机 Python 3.13 实测通过)。
- 无需管理员权限(网关、DNS 都是从 `route print` / `ipconfig` 解析的)。
- 需要能访问国内镜像站(腾讯云/华为云等)与 speedtest.net(仅用于发现上传节点,失败会自动回退)。