当前位置: 首页 > news >正文

python3GUI--多功能WiFi网络工具箱 By:PyQt5(详细分享)

文章目录

  • 一.前言
  • 二.预览
    • 1.首页
    • 2.无线类工具
    • 3.工程类工具
    • 3.运维类工具
    • 3.安防类工具
    • 4.系统设置&关于软件
  • 三.主要功能实现
    • 1.获取WiFi数据
    • 2.实时wifi信号强度展示
    • 4.wifi信息回显
    • 5.终端查找
    • 6.Ping测试
    • 7.Tracert(路由跟踪)
    • 8.端口扫描
  • 四.总结


本软件为PyQt5开发的WiFi网络工具箱,包含多个页面和功能!

未使用QFluentWidgets!

请添加图片描述

一.前言

本次为PyQt5开发的网络工具类软件,主题颜色为#5BDCFA,主题字体为微软雅黑,整体UI风格为windows系统Fluent风格,左侧导航栏支持动态折叠、展开,右侧内容区域使用自定义组件的tab对子功能进行划分,每个页面组成自己的功能页面。

二.预览

1.首页

软件启动后进入本软件的首页,首页分为两部分,上面是wifi信息面板主要展示当前连接wifi网络的名称、MAC、IP地址以及详细的网络信息,下方为实时的wifi信号强度变化折线图,此折线图动态刷新每隔指定的描述绘制一个点,折线中展示近1分钟的信号强度变化。
请添加图片描述

2.无线类工具

此页面包含5个子页面,分别是:信号扫描、信号强度、网速测试、终端查找、连接记录查看
使用下面一张图展示所有功能:

3.工程类工具

此页面包含5个子页面,分别是:公网IP查询、MAC地址查询、PoE计算器、网桥高度计算器、子网掩码计算器
使用下面一张图展示所有功能:
请添加图片描述

3.运维类工具

此页面包含4个子页面,分别是:Ping测试、Tracert、Telnet、端口扫描
使用下面一张图展示所有功能:
请添加图片描述

3.安防类工具

此页面主要是对安防设备进行数据计算
此页面包含3个子页面,分别是:录像容量计算器、摄像机焦距计算器、带宽计算器
使用下面一张图展示所有功能:
请添加图片描述

4.系统设置&关于软件

在设置页面用户可以控制wifi数据扫描的频率以及开关
在关于页面展示了本软件的一些信息以及作者的相关博客、B站主页地址,方便与作者沟通交流。
请添加图片描述

三.主要功能实现

在此章节我来介绍一些基础知识以及功能的主要实现

1.获取WiFi数据

我们采用Pywifi对附近wifi信号进行扫描,将扫描到的数据封装到字典中,使用信号总线回传到指定的位置

PyWiFi 是一个基于 Python 的跨平台 Wi-Fi 管理库,主要用于操作无线网卡并进行 Wi-Fi 网络的扫描、连接、断开等操作。它封装了底层无线网络接口的调用,使开发者可以使用简单的 Python 代码实现复杂的 Wi-Fi 控制逻辑,例如获取无线网络信息、判断当前连接状态、自动连接指定的热点等。该库主要支持 Windows 和 Linux 平台,非常适合用在无线网络分析、自动化连接工具或 Wi-Fi 信号检测等应用场景中。

在这里插入图片描述

我们定义了一个名为 get_current_wifi_info 的函数,用于在 Windows 系统中获取当前 Wi-Fi 连接的详细信息以及周围可用的 Wi-Fi 网络列表。它首先检查网络接口是否连接到 Wi-Fi,然后扫描附近的网络,提取每个网络的 SSID、信号强度、加密方式、频率、BSSID、信号百分比、Wi-Fi 标准、是否为隐藏网络以及网络类型(2.4GHz 或 5GHz)。同时,它会识别当前已连接的 Wi-Fi 网络并单独标记,最终以包含当前网络信息和所有扫描到网络的列表的字典形式返回结果。该函数依赖 pywifi 库和一些自定义的辅助函数如 get_wifi_ssid_windows、get_encryption_type、get_signal_percent 和 get_network_standard 来完成数据的处理与格式化。
在这里插入图片描述

2.实时wifi信号强度展示

为了增强软件的交互以及实现实时数据回显,我们使用QChart 实时展示信号强度变化,采用主题蓝色绘制折线图,在软件首页实时展示信号强度变化曲线。

QChart 是 Qt Charts 模块中的核心类,用于管理和显示图表的数据和外观。它提供了统一的图表绘制框架,支持添加多个数据序列(如折线、柱状、饼图等)、坐标轴、自定义标题、图例和样式设置。通过 QChart,开发者可以灵活地构建交互式、动态更新的数据可视化界面,并与 Qt 的其他组件无缝集成,广泛应用于实时监控、数据分析和可视化展示等场景。

在这里插入图片描述

RealTimeLineChart 类是一个基于 PyQtChart 的自定义控件,用于实时绘制 WiFi 信号强度的折线图。它继承自 QWidget,通过 QChart 和 QLineSeries 实现图表绘制,利用 QDateTimeAxis 显示时间轴,QValueAxis 展示信号强度(单位 dBm),并支持自动更新和滑动窗口显示最近 60 秒的数据。该类采用黑色主题,界面简洁美观,适合嵌入实时监控类应用中,用于动态可视化时间序列数据的变化。在这里插入图片描述

4.wifi信息回显

对于wifi信息回显,我们这里采用了两种方案:
1.表格视图:即采用表格来展示具体的wifi信息、结构清晰、对比直观,便于用户快速浏览和理解大量数据
2.列表视图:采用自定义组件使用颜色、图标可视化展示具体的wifi信息,这样更能让用户接受
这里着重介绍一下列表视图:

WiFiNetworkItem 类是一个用于展示单个 Wi-Fi 网络信息的自定义界面组件,继承自 BaseBGFrame。它通过图文结合的方式呈现网络名称(SSID)、信号强度、加密方式、连接标准等关键信息,并带有“连接”按钮供用户交互。界面布局采用左右结构,左侧显示图标,右侧展示详细信息,支持根据网络类型动态设置颜色,同时通过悬浮提示显示完整的中文字段信息。该组件适用于 Wi-Fi 扫描结果列表中的每一项,方便用户快速浏览和选择目标网络。
在这里插入图片描述

代码中使用set_wifi_data方法即可设置wifi信息展示到自定义组件中,数据结构可以参考

{'ssid': 'NEWIFI_5g', 'signal': -50, 'signal_percent': 100, 'encryption': 'WPA2', 'frequency': 5180000,'bssid': '20:76:93:3f:ce:3e:', 'standard': '802.11a/n (5GHz)', 'is_hidden': False, 'network_type': '5GHz'}

在这里插入图片描述

5.终端查找

我们使用内网终端扫描对局域网内设备进行扫描,最后回显扫描结果到界面上,支持摄像头、路由器、手机、电脑终端设备’扫描
在这里插入图片描述

内网终端查找是一种网络管理功能,用于扫描和识别同一局域网(LAN)中所有在线的设备信息,如IP地址、主机名、MAC地址、操作系统类型等。通过该功能,用户可以快速了解当前内网中有哪些设备正在连接网络,常用于网络设备监控、故障排查、安全审计和资源管理等场景,有助于及时发现异常设备或未授权连接。

这段代码定义了一个名为 scan_network 的函数,用于在局域网内扫描所有活动设备。如果未指定目标 IP 网段,函数会自动获取本机 IP 并推导出默认子网(如 192.168.1.1/24)。它生成该子网范围内所有可能的主机 IP 地址,并通过多线程方式(最多 200 个并发线程)调用 scan_single_ip 函数对每个 IP 进行探测,加快扫描速度。最终返回一个包含所有在线设备信息的列表,适用于实现内网终端发现或网络设备监测功能。

def scan_network(target_ip=None):if target_ip is None:target_ip = '.'.join(get_local_ip().split('.')[:3]) + '.1/24'# 获取子网的所有 IPip_list = [f'{target_ip.rsplit(".", 1)[0]}.{i}' for i in range(1, 255)]devices = []# 使用多线程加速扫描with ThreadPoolExecutor(max_workers=200) as executor:futures = [executor.submit(scan_single_ip, ip) for ip in ip_list]for future in futures:devices.extend(future.result())return devices

6.Ping测试

这个功能实现很简单,难点在于如何实时回显Ping结果,不能等所有Ping结果结束再回显吧?这对于用户来说太不友好了,这里得用到多线程。
具体来说我们定义了一个名为“CommandThread”的线程类,这个类继承自QThread,我们重写其中run方法,在里面执行cmd命令,采用阻塞的方式,实时回传结果。

QThread 是 Qt 提供的线程类,用于在应用中实现多线程处理,提升程序响应速度和并发能力。通过 QThread,开发者可以将耗时的任务(如网络请求、文件读写、计算密集型操作)移出主线程,避免界面卡顿或无响应。QThread 支持信号与槽机制,使线程间通信安全且易于管理,同时可以自定义运行逻辑或将对象移动到线程中运行,广泛应用于 GUI 应用中的异步处理与后台任务管理。

请添加图片描述

7.Tracert(路由跟踪)

Tracert(路由跟踪) 是一种网络诊断工具,用于追踪数据包从本地主机到目标地址(通常是一个网站或服务器)之间所经过的每一跳(即每个路由器或网关)。它通过发送带有递增 TTL(生存时间)值的 ICMP 或 UDP 数据包,逐步探测路径上的每个节点,并记录每一跳的响应时间和 IP 地址。Tracert 可帮助定位网络延迟、路径中断或路由异常等问题,是分析网络连接质量和排查网络故障的重要工具。在 Windows 中命令为 tracert,在 Linux/macOS 中为 traceroute。
请添加图片描述

此功能已经集成到了我们的系统里,和Ping测试回显效果一样,都是实时回显
请添加图片描述

8.端口扫描

在这里插入图片描述

作为网络工具箱重要功能之一的端口扫描必须要介绍一下!

端口扫描是一种网络安全或运维常用的技术,用于探测目标主机上哪些端口处于开启状态,从而判断其运行了哪些服务(如 HTTP、SSH、FTP 等)。通过发送特定格式的网络数据包并分析目标的响应,端口扫描可以识别开放端口、过滤端口以及关闭的端口状态。它常用于网络资产管理、漏洞检测和安全审计,但也可能被用于恶意目的(如黑客探测入口)。常见的端口扫描工具有 Nmap、Masscan 等,使用时需合法合规,避免侵犯他人网络。
在这里插入图片描述

我们的系统集成了此功能,对主流的端口进行扫描,实时回显扫描结果到UI中
下面是一些常用的端口与协议对应关系

# 端口扫描目标端口列表
common_ports_dict = {# 网络协议20: "FTP 数据",21: "FTP 控制",22: "SSH",23: "Telnet",25: "SMTP",53: "DNS",67: "DHCP(客户端)",68: "DHCP(服务器)",69: "TFTP",80: "HTTP",110: "POP3",119: "NNTP",123: "NTP",135: "RPC / DCOM 服务",137: "NetBIOS 名称服务",138: "NetBIOS 数据报服务",139: "NetBIOS 会话服务",143: "IMAP",161: "SNMP",162: "SNMP Trap",179: "BGP",389: "LDAP",443: "HTTPS",445: "SMB(共享文件)",465: "SMTPS",514: "Syslog",515: "LPD(打印服务)",993: "IMAPS",995: "POP3S",1080: "SOCKS 代理",1433: "MSSQL",1434: "MSSQL 监听",1521: "Oracle 数据库",1723: "PPTP VPN",2049: "NFS",2082: "cPanel",2083: "cPanel SSL",2181: "ZooKeeper",2375: "Docker API(非加密)",2376: "Docker API(加密)",2483: "Oracle DB(TCP)",2484: "Oracle DB(TCPS)",3306: "MySQL",3389: "RDP(远程桌面)",3690: "SVN",4000: "多用途/调试端口",5000: "Flask/API",5001: "Flask/API 备用",5432: "PostgreSQL",5672: "RabbitMQ",5900: "VNC",5901: "VNC 备用",5984: "CouchDB",6379: "Redis",7001: "WebLogic",7002: "WebLogic 备用",8000: "HTTP 测试/开发",8001: "HTTP 备用",8080: "HTTP 常用端口",8081: "HTTP 备用端口",8088: "HTTP 测试端口",8443: "HTTPS 备用端口",8888: "Jupyter / Web服务",9000: "PHP-FPM / 其他服务",9200: "Elasticsearch",9300: "Elasticsearch 通信",11211: "Memcached",27017: "MongoDB",50070: "Hadoop NameNode WebUI",
}

请添加图片描述

下图为核心端口扫描代码
在这里插入图片描述

四.总结

本次和大家分享了我使用PyQt5开发的多功能WiFi网络工具箱,包含多个功能页面以及子功能,在第三章和大家讨论了相关技术知识以及具体实现代码。
需要代码的朋友请私聊我也可以点击下方的联系方式与我联系!谢谢大家!
在这里插入图片描述

在这里插入图片描述

相关文章:

  • 如何根据竞价数据判断竞价强度,是否抢筹等
  • LLM-Based Agent综述及其框架学习(五)
  • FreeCAD源码分析: Transaction实现原理
  • 安全性(一):加密算法总结
  • 技术测评:小型单文件加密工具的功能解析
  • 第五项修炼:打造学习型组织
  • 深度学习中ONNX格式的模型文件
  • 深入探讨 Java Switch Expressions
  • day33-网络编程
  • 操作系统学习笔记第4章 (竟成)
  • 小型气象站应用之鱼塘养殖方案
  • 中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
  • 【AI论文】EnerVerse-AC:用行动条件来构想具身环境
  • 【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
  • 如何利用技术手段提升小学数学练习效率
  • 【001】Cython功能及入门
  • 2025.05.17淘天机考笔试真题第三题
  • Scratch游戏 | 3D极速坡道
  • ModuleNotFoundError: No module named ‘SDToolbox‘
  • 基于Yolov8+PyQT的老人摔倒识别系统源码
  • 持续降雨存在落石风险,贵州黄果树景区水帘洞将封闭至6月初
  • 3月中国减持189亿美元美债、持仓规模降至第三,英国升至第二
  • 梅花奖在上海|湘剧《夫人如见》竞梅,长沙文旅来沪推广
  • 贵州仁怀通报“正新鸡排鸡腿里全是蛆”:已对同类产品封存送检
  • 国家统计局向多省份反馈统计督察意见
  • 韧性十足的中国外贸企业:“不倒翁”被摁下去,还会再弹起来