本作品采用 知识共享署名-非商业性使用 4.0 国际 (CC BY-NC 4.0) 协议授权。允许他人免费非商业性使用、改编和传播作品,但必须清晰标注原作者署名,且禁止任何商业用途(如销售、广告、盈利项目等),修改后的衍生作品也需遵循相同条款(署名+非商用),商业使用需额外获得授权。详见LICENSE文件。
一款支持多协议(ICMP/UDP/TCP/DNS)的网络测试工具,提供高效并发测试、终端表格输出和Excel自动导出功能,适用于网络运维、性能评估及科研场景。
脚本简介
`NetTestMaster` 是一款支持多协议(ICMP/UDP/TCP/DNS)、多线程并发、断点续传、自动导出 Excel、终端美观表格输出的网络测速工具。它主要用于**批量测试**各大公共 DNS 服务器(或自定义目标)的网络连通性、延迟、丢包率、协议兼容性等,支持IPv4/IPv6,支持终端美观表格输出和Excel自动导出,适合网络运维、教育、科研等场景。环境准备
- 操作系统:Windows、Linux、macOS均可。
- 推荐 Python 3.7 及以上版本。
- Windows 用户建议以"管理员身份"运行(ICMP 协议需要)。
脚本依赖以下第三方库:
- ping3
- pandas
- wcwidth
- dnspython
- openpyxl
可执行脚本实现一键自动安装
pip install ping3 pandas wcwidth dnspython openpyxl如遇网络问题可用清华镜像:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ping3 pandas wcwidth dnspython openpyxl
- 依赖导入区:所有用到的库
- 工具函数区:如获取桌面路径、时间戳、协议包大小等
- 配置参数区:所有可调参数集中管理
- Excel导出格式区:表头、列宽、对齐方式等
- DNS与国家映射表:常用DNS及归属地
- 断点续传区:测速中断恢复
- 域名解析区:本地/指定DNS解析
- 测速与调度区:核心测速逻辑
- 表格格式区:终端输出美化
- 主函数:主流程、表格输出、Excel导出
- 程序入口:直接运行时自动执行
脚本参数详解
所有参数集中在 config 字典中,支持灵活修改。主要参数如下:
| 参数名 | 说明 | 示例/默认值 |
|---|---|---|
| total_scan_time | 总扫描时间限制(秒),超时强制终止 | 60 |
| concurrent_threads | 并发线程数,越大速度越快,建议 50~200 之间 | 100 |
| timeout | 单次请求超时时间(秒) | 0.5 |
| protocol_type | 测试协议类型:ICMP、UDP、TCP | "UDP" |
| enable_ipv6 | 是否启用 IPv6 测试 | False |
| use_local_ip | 是否显示本地出口 IP | True |
| resolved_ip_type | 解析 IP 类型:'A'(IPv4)、'AAAA'(IPv6)、'auto' | "A" |
| 参数名 | 说明 | 示例/默认值 |
|---|---|---|
| test_count_per_dns | 每个目标测试次数 | 3 |
| test_domain | 指定测试域名(留空则按协议类型测试 IP) | "www.baidu.com" |
| total_test_count | 限制总测试次数(None 不限制) | None |
| 参数名 | 说明 | 示例/默认值 |
|---|---|---|
| export_to_desktop | 是否导出到桌面 | True |
| export_to_script_dir | 是否导出到脚本同路径下 | False |
| export_path | 兜底导出路径(自动生成) | 自动生成 |
| 参数名 | 说明 | 示例/默认值 |
|---|---|---|
| top_n | 显示/导出前 N 个结果 | 30 |
| show_config | 是否输出配置区内容 | True |
| show_recv_sent | 是否输出 Recv/Sent 数据 | True |
| show_loss_rate | 是否输出丢包率 | True |
| show_protocol | 是否输出协议类型 | True |
| show_country | 是否输出国家 | True |
| show_packet_size | 是否输出测试包大小 | True |
| 参数名 | 说明 | 示例/默认值 |
|---|---|---|
| enable_resume | 是否启用断点续传功能 | False |
| resume_file | 断点续传记录文件 | "scan_resume.json" |
| 参数名 | 说明 | 示例/默认值 |
|---|---|---|
| packet_size | 测试包大小(字节):int 为自定义,"default" 推荐,"auto" 动态 | "auto" |
如何运行脚本
- 用文本编辑器(如 VSCode、Notepad++)打开
NetTestMaster.py。 - 找到
config = { ... }区块,根据需求修改参数。
- 以管理员身份打开命令提示符(cmd)或 PowerShell。
- 切换到脚本所在目录:
cd 路径\到\NetTestMaster.py\所在文件夹- 运行脚本:
python NetTestMaster.py- 打开终端,切换到脚本目录,运行:
python3 NetTestMaster.py结果解读
- 会以美观表格形式输出每个 DNS 的延迟、丢包率、协议、国家等信息。
- 支持自适应宽度、对齐、超长 IP 折叠显示。
- 末尾会显示总用时、导出路径等信息。
- 默认导出到桌面(可配置)。
- 文件名如
NetTest_20240601_153000.xlsx,包含所有表格字段。 - 表头、内容自动美化,丢包率为百分比格式,便于后续分析。
- 启用
enable_resume后,测速中断可自动恢复进度。 - 断点文件为
scan_resume.json,参数变动会自动清理。
进阶用法与扩展建议
- 默认测试内置 DNS 列表。
- 如需自定义目标,可修改
DNS_NAMES字典,增删目标IP及名称,或扩展addresses生成逻辑。
- 设置
test_domain后,强制使用 DNS 查询协议,统计各 DNS 解析该域名的速度。
- 设置
enable_ipv6=True,可测试 IPv6 DNS。 - 需保证本机有 IPv6 网络环境。
- 同时设置
export_to_desktop和export_to_script_dir,会导出到桌面和脚本目录。
- 可扩展为从文件读取目标列表(如CSV、TXT)。
- 可用
argparse增加命令行参数,动态指定配置文件、目标、导出路径等。
- 可在
get_packet_size或test_ping中根据丢包率、延迟等实时调整包大小。
- 可引入
logging替代print,支持多级别日志和文件输出。
脚本结构简要说明
- 工具函数区:如获取桌面路径、时间戳、IP 判断等。
- 配置参数区:所有可调参数集中管理。
- Excel 导出格式区:统一设置表头、列宽、对齐方式。
- DNS 列表与国家映射:内置常用 DNS 及归属地。
- 断点续传区:支持测速中断恢复。
- 域名解析区:支持本地和指定 DNS 解析。
- 核心测速区:多协议测速、并发调度、统计。
- 表格输出区:终端美观表格输出。
- 主函数:主流程调度、排序、导出。
- 程序入口:直接运行时自动执行测速。
常见问题与解决
- 依赖未安装:请检查依赖是否全部安装。
- ICMP 权限不足:请以管理员身份运行。或切换为UDP/TCP协议。
- Excel 打不开/乱码:请确保 Excel 支持 UTF-8,或更换字体。
- IPv6 无法测速:请确认本机 IPv6 网络正常。
- 网络不通时/超时:检查本地网络、目标DNS可达性,适当增大
timeout。 - 断点续传无效:请确认本机 IPv6 网络正常。需将
enable_resume设为True,且不要手动删除resume_file。
