Initial commit: Wpyw 网络测速工具(单文件 Python,零依赖)
This commit is contained in:
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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%
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|
||||||
Reference in New Issue
Block a user