项目地址:https://gitee.com/thomasblog/it_network|技术栈:Python 3.9+ / Tkinter / scapy / psutil
一、为什么需要"42 合一"的网络工具箱?
在企业 IT 运维场景中,网络故障排查往往面临一个痛点:工具碎片化。
-
排查网络不通:需要打开 CMD 分别敲 ping、tracert、nslookup -
检查端口开放:需要用 telnet或第三方扫描工具 -
查看本机 WiFi 密码:需要以管理员身份运行 netsh wlan show profiles -
测试带宽:需要安装 iperf3 服务端 + 客户端 -
抓包分析:需要打开 Wireshark,过滤规则复杂
每次排查需要切换 3~5 个工具,且命令行输出不够直观,非专业人员难以理解。it_network 的设计初衷正是为了解决这一问题:将 42 个常用网络工具封装为图形化桌面应用,通过 Tkinter + ttk 实现跨平台运行,通过 scapy 实现底层协议分析,通过 ping3 替代 ICMP 系统命令,最终实现"一个窗口搞定所有网络排查"。
二、架构设计:为什么是 Python + Tkinter?
核心选型思考
|
|
|
|
|---|---|---|
|
|
|
|
|
|
ping3
|
subprocess.call('ping')
|
|
|
scapy
|
|
|
|
psutil
|
|
三、核心模块深度解析
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 |
|
|
ping3 |
|
sudo 或 CAP_NET_RAW 能力 |
iperf3 |
|
|
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 个工具全景:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当前版本 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 个工具演示图)


Thomas3 年前
发表在:SQL Server2008报错:值不能为空[S35]
Thomas3 年前
发表在:解决Composer Installing dependencies from lock file你这都看不清了
1112021-03-15 23:30
发表在:Cetnos7 新手安装ZABBIX4.0.5详解教程有人嘛
Tyreunorm2020-08-27 22:51
发表在:php5.6 连接SQL SERVER<a href=https://mega...
耗子2020-04-08 15:02
发表在:写给正在创业的自己看到了,想写点。可能我开过这网站了,以后...
Thomas2019-11-19 19:57
发表在:twcms您的IP地址已改变,为了安全考虑,请重新登录这个好
酷喵2016-08-03 15:22
发表在:我家侄女成长记前排支持啦!
五爷2015-12-01 03:26
发表在:关于centos中的相关查看命令@admin:呵呵
admin2015-12-01 01:49
发表在:关于centos中的相关查看命令非常不错