Initial commit: Wpyw 网络测速工具(单文件 Python,零依赖)

This commit is contained in:
WpyQwq
2026-09-19 11:00:15 +08:00
commit a5bd4448da
5 changed files with 1478 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
# 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(仅用于发现上传节点,失败会自动回退)。