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(仅用于发现上传节点,失败会自动回退)。
+1077
View File
File diff suppressed because it is too large Load Diff
+18
View File
@@ -0,0 +1,18 @@
@echo off
chcp 65001 >nul 2>&1
setlocal
cd /d "%~dp0"
set "PY="
where python >nul 2>nul && set "PY=python"
if not defined PY where py >nul 2>nul && set "PY=py"
if not defined PY (
echo [错误] 没有找到 Python,请先安装 Python 3.8+ 并勾选 "Add python.exe to PATH"
echo 下载地址: https://www.python.org/downloads/
pause
exit /b 1
)
%PY% "%~dp0wpyw-speedtest.py" %*
set "RC=%ERRORLEVEL%"
rem 双击运行时(无参数)保留窗口看结果
if "%~1"=="" pause
exit /b %RC%
+231
View File
@@ -0,0 +1,231 @@
{
"version": "1.0",
"time": "2026-09-17T20:23:01",
"mode": "标准",
"host": "Wpy",
"local_ip": "192.168.0.103",
"public_ip": "2408:8214:d1b:33e1:e102:d6f0:b0f1:43a9",
"isp": "联通",
"region": "中国 山东 青岛 联通",
"gateway": "192.168.0.1",
"latency": {
"avg": 10.5,
"jitter": 1.5,
"loss": 0.0,
"intl_avg": 206.75,
"intl_loss": 20.0,
"rows": [
{
"label": "默认网关",
"avg": 3.2,
"jitter": 2.0,
"loss": 0.0,
"kind": "gw"
},
{
"label": "阿里云 DNS",
"avg": 5.4,
"jitter": 1.75,
"loss": 0.0,
"kind": "dom"
},
{
"label": "腾讯 DNS",
"avg": 15.6,
"jitter": 1.25,
"loss": 0.0,
"kind": "dom"
},
{
"label": "百度",
"avg": null,
"jitter": null,
"loss": 100.0,
"kind": "dom"
},
{
"label": "国际出口",
"avg": 206.75,
"jitter": 7.0,
"loss": 20.0,
"kind": "intl"
}
]
},
"download": {
"mbps": 330.2833465679593,
"overall": 338.1661679189121,
"peak": 609.7620462905908,
"mb": 339.425541,
"seconds": 8.029793000023346,
"errors": 0,
"size": 38502361,
"node": "腾讯云镜像(深圳)",
"url": "https://mirrors.cloud.tencent.com/ubuntu/ls-lR.gz",
"samples": [
0.0,
308.29,
555.31,
439.14,
536.59,
308.59,
460.43,
516.33,
455.22,
422.74,
214.23,
387.52,
485.87,
365.81,
369.92,
15.69,
459.26,
271.78,
323.37,
376.16,
303.82,
312.97,
434.14,
387.46,
328.38,
329.67,
397.71,
345.71,
382.08,
162.42,
292.88,
370.53,
331.28,
340.17,
417.41,
281.5,
361.18,
359.96,
307.82,
297.63,
287.86,
370.21,
335.34,
324.11,
56.87,
609.76,
297.22,
167.61,
2.79,
334.06,
370.24,
345.77,
290.89,
297.4,
294.96,
266.95,
366.48,
277.65,
355.04,
303.22,
366.36,
275.67,
302.36,
359.89,
360.4,
365.12,
334.61,
356.07,
334.42,
392.41,
358.39,
371.19,
406.87,
385.91,
361.19,
328.06,
401.37,
341.87,
391.14,
261.5
]
},
"upload": {
"mbps": 134.99256792149274,
"overall": 134.43397026543454,
"peak": 167.5871437891513,
"mb": 101.187584,
"seconds": 6.021548499993514,
"errors": 197,
"node": "China Unicom 5G(Shanghai)",
"url": "http://mobile.shunicomtest.com:8080/speedtest/upload.php",
"samples": [
144.89,
167.06,
146.44,
104.69,
104.37,
167.21,
125.28,
125.35,
125.48,
125.23,
146.05,
104.29,
167.47,
146.51,
146.63,
125.27,
104.42,
146.65,
125.24,
145.79,
125.55,
125.68,
146.27,
167.31,
41.78,
83.45,
62.82,
146.03,
167.51,
125.26,
167.59,
104.54,
146.52,
125.18,
145.98,
146.48,
166.78,
145.97,
146.49,
146.44,
83.65,
125.15,
166.86,
167.49,
104.66,
104.64,
125.72,
167.29,
167.16,
145.97,
125.57,
104.45,
146.33,
125.05,
167.18,
146.43,
125.27,
146.59,
146.14,
146.6
]
},
"tier": {
"download": "300M 档",
"upload": "100M 档"
},
"grade": "A+",
"advice": [
"下载 41 MB/s:4K 在线视频可同时跑 13 路,游戏更新/大文件秒级",
"上传 16.9 MB/s:可稳定 4K 直播推流、大文件快速上传",
"延迟 10 ms:电竞级,网游/远程桌面手感好"
],
"elapsed": 36.1
}
+53
View File
@@ -0,0 +1,53 @@
�q�������������������������������������������������������������������������������������������������������������������������������������������������r
�� Wpyw ���ٲ��� �� �����а� v1.0 ��
�� ��ͨ / ���� / �ƶ����� �� ���̲߳��� �� �ڵ�ʵ����ѡ ��
�t�������������������������������������������������������������������������������������������������������������������������������������������������s
��ʼʱ�� 2026-09-17 20:22:58
����ģʽ ��׼ ���� 8s / 8 ���� �ϴ� 6s
������ַ 192.168.0.103
������ַ 2408:8214:d1b:33e1:e102:d6f0:b0f1:43a9 �й� ɽ�� �ൺ ��ͨ
��Ӫ�� ��ͨ �й� ɽ�� �ൺ ��ͨ
Ĭ������ 192.168.0.1
���� �� �ӳ� / ���� / ���� ��������������������������������������������������������������������������������������������������������������������������������������������������������
Ĭ������ 3.2 ms �� ���� 2.0 ms
������ DNS 5.4 ms ���� ���� 1.8 ms
��Ѷ DNS 15.6 ms �������� ���� 1.2 ms
�ٶ� ��ͨ / ȫ����ʱ
���ʳ��� 206.8 ms ���������������������������������������� ���� 7.0 ms ���� 20% ������·�������ο����������٣�
���ٽڵ� TCP 10.0 ms �����ٽڵ�Ĵ���������������ֵ��
����ƽ���ӳ� 10.5 ms ���� 1.5 ms ���� 0.0% ������ ����
���ʳ��� 8.8.8.8 207 ms������ 20%������ ���ʷ��򣬲���������ľ�ֵ
���� �� �����ٶ� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������
�ڵ��Բ� ��Ѷ�ƾ��� 454.6 Mbit/s ���� �� 4 ���� / 2s
�ڵ� ��Ѷ�ƾ������ڣ� 8 ���� �� 8.0s �� �� 339 MB
ʵ�� 330.28 Mbit/s = 41.3 MB/s ��ֵ 609.76 Mbit/s
���� �|�|�}�{�|�|�|�{�{�|�|�|�x���{�z�x�|�|�|�{�{�{�{�|�{�|�{�|�{�{�|�|�|�|�|�|�}�|�|�}�}�|�|�}�|�}�{ (����� 8s)
���� �� �ϴ��ٶ� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������
�ڵ��Բ� China Unicom 5G��Shanghai�� 62.7 Mbit/s
�ڵ� China Unicom 5G��Shanghai�� 4 ���� �� 6.0s �� �� 101 MB
ʵ�� 134.99 Mbit/s = 16.9 MB/s ��ֵ 167.59 Mbit/s
���� ���~�~�}�|���}�~�}�}�~���y�{�z�~���}���|�~�}�~�~���~�~�~�{�}�����|�|�~�����~�}�|�~�}���~�}�~�~�~
���� �� ���� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������
���� 330.28 Mbit/s (��300M ��) �ϴ� 134.99 Mbit/s (��100M ��)
�ӳ� 10.5 ms ���� 1.5 ms ���� 0.0%
���ص�Ч 41.3 MB/s �ϴ���Ч 16.9 MB/s
�ۺ����� A+ �����ݣ����� 330 Mbps / ���� 135 Mbps / �ӳ� 10 ms��
�� ���� 41 MB/s��4K ������Ƶ��ͬʱ�� 13 ·����Ϸ����/���ļ��뼶
�� �ϴ� 16.9 MB/s�����ȶ� 4K ֱ�����������ļ������ϴ�
�� �ӳ� 10 ms���羺��������/Զ�������ָк�
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
�ܺ�ʱ 36 �� �� ���ٽڵ������Ѽ�¼ �� �����д�� E:\deepseek\speedtest\_final.json
JSON �ѱ��棺E:\deepseek\speedtest\_final.json