image.png

项目地址:https://gitee.com/thomasblog/it_network|技术栈:Python 3.9+ / Tkinter / scapy / psutil

一、为什么需要"42 合一"的网络工具箱?

在企业 IT 运维场景中,网络故障排查往往面临一个痛点:工具碎片化

  • 排查网络不通:需要打开 CMD 分别敲 pingtracertnslookup
  • 检查端口开放:需要用 telnet 或第三方扫描工具
  • 查看本机 WiFi 密码:需要以管理员身份运行 netsh wlan show profiles
  • 测试带宽:需要安装 iperf3 服务端 + 客户端
  • 抓包分析:需要打开 Wireshark,过滤规则复杂

每次排查需要切换 3~5 个工具,且命令行输出不够直观,非专业人员难以理解。it_network 的设计初衷正是为了解决这一问题:将 42 个常用网络工具封装为图形化桌面应用,通过 Tkinter + ttk 实现跨平台运行,通过 scapy 实现底层协议分析,通过 ping3 替代 ICMP 系统命令,最终实现"一个窗口搞定所有网络排查"。

二、架构设计:为什么是 Python + Tkinter?

核心选型思考

组件
选型理由
替代方案对比
GUI 框架
Tkinter 内置于 Python,零外部 GUI 依赖,跨平台开箱即用
PyQt/PySide 安装包大、学习成本高;Kivy 移动端友好但桌面端生态弱
Ping 实现
ping3
 纯 Python 实现 ICMP,无需调用系统 ping 命令
subprocess.call('ping')
 跨平台解析困难、输出格式不统一
底层协议
scapy
 支持 ARP/DHCP/原始套接字,协议构造灵活
系统命令无法伪造数据包、无法解析 DHCP OFFER 等协议交互
性能监控
psutil
 跨平台系统信息获取,CPU/内存/网络/磁盘全覆盖
各平台 API 不同(Windows WMI vs Linux /proc vs macOS sysctl)

三、核心模块深度解析

3.1 入口与权限提升机制

网络工具中 ARP 扫描、DHCP 发现、抓包等功能需要 root/Administrator 权限。main.py 实现了跨平台权限检测与自动提权:

# main.py 核心逻辑 import os import sys import tkinter as tk from gui import NetworkToolbox  def is_admin():     """Windows 下检测是否为管理员权限"""     try:         import ctypes         return ctypes.windll.shell32.IsUserAnAdmin() != 0     except Exception:         return False  def elevate_and_exit():     """请求 UAC 提权并重启"""     try:         import ctypes         params = " ".join(f'"{a}"' for a in sys.argv)         ctypes.windll.shell32.ShellExecuteW(             None, "runas", sys.executable, params, None, 1         )     except Exception:         pass     sys.exit(0)  def main():     # Windows 下非管理员自动请求提权     if os.name == "nt" and not is_admin():         elevate_and_exit()         return     root = tk.Tk()     apply_theme(root)     apply_window_icon(root)     NetworkToolbox(root)     root.mainloop()

💡 设计亮点

  • Linux/macOS 依赖 sudo python main.py 提权(README 明确说明)
  • Windows 下通过 ShellExecuteW + runas 触发 UAC 弹窗
  • 提权失败时优雅退出(sys.exit(0)),避免静默崩溃

3.2 ping 工具(ping3 vs 系统命令)

# tools/ping_tool.py 核心思路 from ping3 import ping  def ping_once(host, timeout=2):     """单次 ping 测试"""     try:         delay = ping(host, timeout=timeout)         if delay is False:             return None  # 目标不可达         elif delay is None:             return None  # 超时         return delay * 1000  # 转换为 ms     except Exception:         return None

3.3 ARP 扫描(scapy 实现)

# tools/arp_scanner.py 核心思路(需 root/Admin) from scapy.all import ARP, Ether, srp  def arp_scan(network):     """扫描局域网存活主机"""     arp_request = ARP(pdst=network)     broadcast = Ether(dst="ff:ff:ff:ff:ff:ff")     packet = broadcast / arp_request     answered, _ = srp(packet, timeout=2, verbose=False)      results = []     for sent, received in answered:         results.append({             'ip': received.psrc,             'mac': received.hwsrc         })     return results

四、生产部署指南

4.1 开发环境搭建

# 1. 克隆项目 git clone https://gitee.com/thomasblog/it_network.git cd it_network  # 2. 创建虚拟环境 python -m venv .venv .venv\Scripts\activate  # Windows source .venv/bin/activate  # Linux/macOS  # 3. 安装依赖 pip install -r requirements.txt

依赖说明(来自 requirements.txt):

  • scapy>=2.5.0
     — ARP/DHCP/抓包(需 Npcap/WinPcap)
  • ping3>=4.0.0
     — 纯 Python ICMP ping(无需系统命令)
  • psutil>=5.9.0
     — 系统信息、进程、网络统计

4.2 依赖安装避坑

依赖
常见问题
解决方案
scapy
Windows 下无 Npcap 驱动报错
安装 Npcap 并勾选"Install Npcap in WinPcap API-compatible Mode"
ping3
非 root 权限下 ICMP 发送失败
Windows 需管理员运行;Linux 需 sudo 或 CAP_NET_RAW 能力
iperf3
带宽测试提示找不到 iperf3
手动下载 iperf3 二进制 并加入 PATH

4.3 打包为独立 EXE(PyInstaller)

# 使用 PyInstaller 打包 python -m PyInstaller --onefile --windowed --clean --noconfirm --uac-admin \   --name "网络工具箱" --icon app.ico --add-data "app.ico;." \   --hidden-import ping3 --hidden-import scapy --hidden-import psutil main.py

打包后生成 dist/网络工具箱.exe,体积约 15 MB。

⚠️ 生产避坑提示

  • PyInstaller
     打包时务必加 --hidden-import 指定动态导入的模块(ping3/scapy/psutil)
  • EXE 运行需要 requireAdministrator 权限才能使用 ARP/DHCP/抓包功能
  • wifi_password
     功能在 Windows 下需管理员权限执行 netsh wlan key=clear

五、功能清单

7 大类 42 个工具全景:

分类
工具数量
典型工具
基础工具
7
Ping / 路由跟踪 / MTR / 公网 IP / 网络健康
端口与连接
7
端口扫描 / ARP 扫描 / 批量 Ping / TCP 连接
无线与流量
5
WiFi 密码 / 流量监控 / 带宽测试 / 延迟测试
IP 与子网
4
IP 计算器 / 子网规划 / 路由表 / IP 地理位置
安全与证书
5
DNS 查询 / SSL 证书 / Whois / MAC OUI
系统管理
7
系统信息 / WiFi 密码 / 网卡配置 / 代理 VPN 检测
高级工具
7
DHCP 发现 / 子网全扫描 / HTTP 压力测试 / SSL 批量检查

当前版本 v2.5 测试状态:OK=32 / WARN=3 / FAIL=0

六、结语

it_network 不是另一个"命令行工具封装器",而是针对 IT 运维日常痛点的务实解法。它用 ping3 替代系统 ping 命令实现跨平台一致性,用 scapy 实现底层协议分析,用 psutil 实现系统监控,最终将 42 个常用工具收敛到一个 Tkinter 窗口中。

🔗 项目地址:https://gitee.com/thomasblog/it_network
📚 配套截图/docs/screenshots/ 目录(42 个工具演示图)