7.8 KiB
NetPilot 网络调试工具
NetPilot 是一个基于 Python Tkinter 的 Windows 网络调试工具,面向日常桌面网络排障、网卡配置、局域网资产发现和连通性检测场景。
应用采用左侧功能导航、右侧公共输出控制台的布局。所有功能页的执行日志、诊断过程和错误提示都会统一输出到右侧控制台,便于在不同工具之间切换时保留排障上下文。
功能概览
网卡配置
- 读取本机所有网卡,包括已启用和已禁用的网卡。
- 显示网卡描述、MAC 地址、连接状态、IPv4 地址、子网掩码、默认网关、DNS 等信息。
- 支持启用网卡、禁用网卡。
- 支持 DHCP 自动获取和静态 IPv4 / DNS 配置切换。
- 支持重新读取网卡信息,便于配置变更后快速刷新。
- 支持网卡配置模板保存、套用和删除。
说明:修改网卡状态、IP、网关、DNS 等配置通常需要以管理员权限运行程序。
DNS 诊断
- 读取本机网卡 DNS 配置,并支持选择不同网卡进行诊断。
- 支持手动填写或自动补全 DNS 服务器。
- 支持多个域名、多个记录类型的解析测试。
- 对不同 DNS 服务器的解析结果、耗时、失败原因进行对比。
- 诊断结果以表格展示,支持复制摘要和导出 CSV。
- 提供“修复异常”功能,用于处理常见 DNS 配置异常。
设备发现
- 按所选网卡的配置网段进行局域网设备发现。
- 通过 Ping 探活和 ARP 信息补充发现设备。
- 展示 IP、MAC、厂商、来源网卡、延迟、发现方式和备注。
- 支持自动范围、刷新网卡、开始发现、停止发现。
- 支持复制设备清单和导出 CSV。
当前设备发现按配置网段扫描,不再做跨网段邻居表扩展,也不做主机名解析。
Ping 探测
- 支持单目标 Ping 和批量 Ping。
- 支持指定次数、持续探测、间隔、超时、包大小、TTL、禁止分片。
- 支持选择本地源 IP。
- 批量目标支持 CIDR、IP 范围和列表输入。
- 输出实时探测结果,并统计丢包率、平均延迟、抖动和质量状态。
- 支持导入目标和导出 CSV。
端口扫描
- 支持单主机单端口连通性测试。
- 支持端口列表、端口范围和常用端口预设。
- 支持批量主机扫描,目标可使用 CIDR、IP 范围或列表。
- 支持并发数、超时、仅显示开放端口等控制项。
- 支持服务名识别和可选 Banner 探测。
- 支持复制开放端口和导出 CSV。
路由追踪
- 支持 IPv4 / IPv6 路由追踪。
- 支持主机名解析开关。
- 支持单次、指定次数和持续追踪。
- 支持最大跳数、单跳超时、高延迟阈值等参数。
- 展示逐跳 RTT 表格,并保留原始命令输出。
- 对超时、高延迟、波动等情况给出诊断摘要。
- 支持复制摘要和导出 CSV。
环网检测
- 基于本机网卡统计、广播 / 组播流量、ARP / 邻居表变化和网关 Ping 稳定性进行综合判断。
- 用于辅助发现疑似二层环路、广播风暴或局域网异常波动。
- 支持检测单个网卡或全部活动网卡。
- 输出诊断摘要,支持复制和导出 CSV。
IP 冲突
- 支持检测本机 IP 冲突风险。
- 支持按网段进行安全限速扫描。
- 结合地址状态、系统事件、ARP / 邻居信息、IP / MAC 异常关系判断冲突风险。
- 支持自动范围、刷新网卡、复制摘要和导出 CSV。
界面说明
- 左侧为功能导航区。
- 中间为当前功能页的参数和结果区域。
- 右侧为公共输出控制台,所有页面共用。
- 底部状态栏显示当前状态、本机名、操作系统和权限状态。
公共控制台可用于查看执行过程、错误提示和诊断摘要;点击“清空”可以清除当前控制台内容。
运行环境
- 操作系统:Windows 10 / Windows 11
- Python:建议 Python 3.10 或更高版本
- UI 框架:Tkinter
- 系统依赖:PowerShell、Windows 网络相关命令
大部分只读诊断功能可以普通权限运行。涉及以下操作时建议使用管理员权限:
- 启用或禁用网卡
- 修改 IP、网关、DNS、DHCP
- 执行部分需要系统网络信息的诊断或修复动作
源码运行
在项目根目录执行:
python main.py
如果需要管理员权限,可以使用管理员 PowerShell 进入项目目录后再执行:
cd E:\Git\Network-tools
python main.py
打包
项目提供了 Windows 打包脚本:
.\打包.bat
打包完成后,输出文件位于:
dist\NetworkTool.exe
打包脚本会优先使用本机指定的 Python 运行时,并在 .packaging\pyinstaller 下安装 PyInstaller;如果指定运行时不存在,则尝试直接调用系统中的 pyinstaller。
目录结构
Network-tools
├─ assets # 图标等静态资源
├─ core
│ ├─ Function # 网络检测和配置相关业务逻辑
│ └─ ui # Tkinter 界面、主题和各功能页
├─ main.py # 程序入口
├─ 打包.bat # PyInstaller 打包脚本
├─ NetworkTool.spec # PyInstaller 配置
└─ README.md
配置和导出文件
- 网卡配置模板会保存到程序同级目录的
network_profiles.json。 - 各功能页的 CSV 导出文件由用户在导出时选择保存路径。
- 程序不会主动上传网络检测结果,所有诊断和导出均在本机完成。
常见问题
为什么修改网卡配置失败?
请确认程序以管理员权限运行。Windows 对网卡启用/禁用、IP 配置、DNS 配置等操作有权限限制。
为什么设备发现扫不到某些设备?
常见原因包括:
- 目标设备禁用了 ICMP Echo 响应,无法被 Ping 探活。
- 目标设备与当前网卡不在同一配置网段内。
- 本机防火墙或安全软件限制了探测行为。
- 交换机、VLAN、无线隔离或终端防火墙阻止了局域网发现。
- 扫描期间目标设备未产生可见 ARP 信息。
当前设备发现按所选网卡的配置网段扫描,不会跨网段扫描,也不会解析主机名。
为什么 DNS 诊断的网卡数量和系统里看到的不一样?
程序会尽量读取启用和禁用网卡,但部分虚拟网卡、隧道网卡、隐藏适配器或驱动异常的网卡,可能无法提供完整 DNS/IP 信息。可以先在网卡配置页刷新网卡,确认目标网卡是否能被系统命令读取。
为什么部分按钮是灰色不可用?
按钮状态会根据当前任务状态和网卡状态变化。例如扫描正在运行时会禁用开始按钮;没有选择有效网卡或当前网卡状态不支持某项操作时,也会禁用对应按钮。
导出的 CSV 用 Excel 打开乱码怎么办?
建议使用 Excel 的“数据 -> 自文本/CSV”导入方式,并选择 UTF-8 编码。也可以先用支持 UTF-8 的编辑器检查文件内容。
开发说明
界面层主要位于 core/ui:
ui_main.py:主窗口布局、侧边栏、公共输出控制台、页面切换。theme.py:全局颜色、字体、ttk 样式。components.py:公共 Page、Console、字段、按钮等组件。tab_*.py:各功能页 UI 和事件逻辑。
业务逻辑主要位于 core/Function:
network_fun.py:网卡读取和配置。dns_diag_fun.py:DNS 诊断。device_discovery_fun.py:设备发现。ping_fun.py:Ping 探测。telnet_fun.py:端口连通性和扫描。tracert_fun.py:路由追踪。loop_fun.py:环网检测。ip_conflict_fun.py:IP 冲突检测。
开发时建议先运行:
python -m compileall main.py core
再启动界面进行手动验证:
python main.py