☰
Aircrack-ng抓包实战:从四次握手到跑字典破解WPA/WPA2
2026/10/5 5:10:36 网站建设 项目流程

简介:西南科技大学无线网络安全技术实验四报告,以使用aircrack-ng完成WPA/WPA2密码破解为主题,面向高校无线安全课程实验、网络攻防方向学生及安全爱好者。文档从实验目的出发,明确认识WPA/WPA2安全原理、熟悉口令破解方法两项目标;实验设计涵盖Kali Linux环境配置、开启无线网卡监听模式、字典文件生成、目标AP扫描监听、Deauth攻击抓取握手包及aircrack-ng离线破解等环节,并提供airodump-ng、aireplay-ng、aircrack-ng等关键命令的参数说明与执行结果截图。内容还讨论分析破解原理,以及家用WiFi弱密码、MAC白名单、管理口令隔离等安全加固建议,并记录了目录参数理解偏差导致找不到握手包等典型问题与解决思路。资源共1个doc格式文档,压缩包大小1.37MB,整体为完整实验报告,既可用于随步骤复现实验,也可作为课程实验报告写作模板。已有812人学习,适合边读边操作、对照排错。

1. 用 aircrack-ng 做 WPA 破解:大学实验里被追问最多的不是命令,而是抓包时机

很多高校的无线网络安全实验都会出现这个题目:用 aircrack-ng 对 WPA/WPA2 做破解。西南科技大学那类课程把整个环节拆成三步——监听模式、抓握手包、跑字典,看起来都是现成命令,实际多数人卡在第二步:包没抓到,字典再大也白搭。aircrack-ng 不是一把“一键破解”的锤子,它是一套无线报文分析工具,核心价值是离线验证口令。这篇笔记按课程实验的顺序把环境、抓包、字典和常见翻车点讲透,建议你在自己家里那台路由器上复现同样步骤,并且只在你有权测试的设备上操作。

2. WPA-PSK 四次握手:破解对象不是密码,而是握手中的“主会话密钥”

2.1 从 WEP 到 WPA/WPA2:破解思路为何从“嗅探”转向“离线字典”

无线安全课上总要先讲 WEP。WEP 用 RC4 流密码,初始向量只有 24 位,客户端一忙就会重用 IV,攻击者抓几十万个数据包就能靠统计相关性推出密钥,整个过程几乎不需要碰“口令”这个概念。WPA/WPA2 出现后,加密机制换成 AES-CCMP 或 TKIP,单靠抓数据包反推密钥的路子基本被堵死,于是攻击面转移到了口令本身。

WPA2-Personal 的密钥体系里,AP 与客户端共享一个预共享密钥(PSK),也就是你在路由器里设置的那串 8 到 63 字符的口令短语。这个 PSK 不是直接用来加密数据的,它只是“种子”。真正加密数据用的是 PTK,PTK 又由 PMK 派生。PMK 由 SSID 和 PSK 经过 PBKDF2-SHA1 算法迭代 4096 次生成,固定输出 256 位。这里的关键在于:SSID 和 PSK 都是可预测的输入,只要 PSK 存在于某个字典里,攻击者就能在本地把同样的 PMK 重新算出来。

正因为如此,破解 WPA-PSK 的思路从“在线嗅探”转成了“离线字典”。在线去猜一个 PSK 非常不现实,因为一次认证失败后 AP 会拒绝重试,频率限制加协议开销让在线尝试慢得可怕;离线则不同,你只要拿到一次合法握手,之后每秒可以试几千甚至几十万个候选口令。aircrack-ng 做的事,是把抓到的握手包与字典里的每个候选口令做“匹配验证”。

2.2 四次握手做了什么:PMK、PTK、Nonce、MIC 各自管什么

WPA/WPA2 的认证过程叫四次握手(4-way handshake),目的是让 AP 和客户端各自确认对方确实知道同一个 PMK,并协商出一份临时密钥 PTK。PTK 由五个输入算出来:PMK、AP 的随机数 ANonce、客户端的随机数 SNonce、AP 的 MAC、客户端的 MAC。只要这五个输入一致,双方就能算出完全相同的 PTK,后续用 PTK 加密单播数据。

四次握手的过程用浅白的方式拆开看:

消息方向内容作用
第 1 条AP → 客户端ANonce让客户端开始构造 PTK
第 2 条客户端 → APSNonce + MIC客户端证明自己知道 PMK
第 3 条AP → 客户端GTK + MICAP 确认客户端身份,并下发组播密钥
第 4 条客户端 → AP确认 ACK客户端确认收到 GTK,握手完成

MIC 是消息完整性校验码,它由 KCK(PTK 的一部分)对 EAPOL 帧内容计算得出。攻击者抓包时看不到 PSK,也看不到 PMK,但能看到 ANonce、SNonce、双方 MAC 和 MIC。于是验证一个候选口令的过程就变成了:拿候选口令算出 PMK,再结合抓到的 ANonce、SNonce、MAC 算出 PTK,最后用 PTK 里的 KCK 去校验那个 MIC 是否一致。一致,口令正确;不一致,继续试下一个。

这就是为什么说“破解对象不是密码,而是握手”。握手包如同一把锁,字典里的每个候选口令都是钥匙,aircrack-ng 只是快速试钥匙的人。你在实验里如果只抓到了 beacon 帧和数据帧,没有抓到 EAPOL 握手消息,那和没有锁是一样的——钥匙再多也没有验证对象。

2.3 为什么 cap 文件里抓到握手包,才能开始跑字典

aircrack-ng 判断“抓到握手”的标准很明确:在抓包文件里找到一对合法的 EAPOL 消息,并且能从中提取出完整的 PTK 推导所需参数。airodump-ng 界面右上角出现“WPA handshake”字样时,通常意味着已经抓到可以先跑字典的握手。

有一个容易忽略的细节:WPA2 和 WPA3 的握手行为不同。WPA3 引入 SAE(Simultaneous Authentication of Equals)以后,不再采用传统的 PSK 四次握手,aircrack-ng 这种离线字典验证方式对 WPA3-Personal 基本失效。所以实验课上的目标绝大多数是 WPA/WPA2,这是协议层面的选择,不是工具选择。在做实验之前,先确认你的路由器把无线模式设置成 WPA2-PSK,而不是 WPA3 或“WPA2/WPA3 混合”,否则第一步就白忙。

cap 文件是原始报文容器。airodump-ng 用-w参数落盘时会把抓到的 802.11 管理帧、控制帧、数据帧全部写进 pcap 格式文件里,后缀通常是-01.cap。之后 aircrack-ng 会自己扫描这个文件里的 AP 和 EAPOL 记录,不需要你做任何预处理。但如果你是拿 Windows 下 Wireshark 抓的包,那就得注意:普通网卡抓不到 802.11 管理帧,只有处于监听模式的网卡才能把 EAPOL 帧完整抓到,这也是下一章要先解决环境问题的原因。

3. 搭一个能“听”的实验环境:无线网卡选型、Kali 启动与监听模式

3.1 为什么课程实验推荐外接 USB 无线网卡而不是笔记本内置网卡

很多同学第一次做这个实验,直接拿笔记本内置网卡开抓,结果airodump-ng跑起来一个 AP 都看不到,或者能看到 AP 但发不出 deauth。问题不在命令,在网卡。笔记本内置无线网卡大多使用 Intel 芯片,驱动为 iwlwifi,在监听模式下经常只能收不能发,注入能力非常受限。

实验环境里最省事的方案是外接 USB 无线网卡,认芯片型号比认品牌重要。常见支持监听和注入的芯片如下:

芯片频段监听/注入说明
Atheros AR92712.4GHz支持老牌实验卡,兼容性最好
Ralink RT30702.4GHz支持驱动 mt7601 或 rt2800usb 均可识别
Realtek RTL8812AU2.4/5GHz支持支持 5GHz,但需要装 8812au 驱动
Realtek RTL8188EU2.4GHz支持廉价方案,驱动偶尔需要 dkms 编译

判断一张网卡能不能用,不要看它宣传页写了多大的天线增益,直接用iw list查看内核识别到的能力位。如果输出里包含Supported interface modes: monitor,说明监听模式可用;valid interface combinations里允许 monitor 与其他模式共存,说明注入大概率没问题。内核不认的网卡,aircrack-ng 全家桶再牛也白搭。

3.2 最小命令:airmon-ng 从 wlan0 到 wlan0mon

Kali Linux 是无线安全实验最常见的系统,因为 airmon-ng、airodump-ng、aireplay-ng、aircrack-ng 全部预装。如果你用的是 Ubuntu,需要自己安装aircrack-ng软件包和网卡驱动。下面这组命令是把网卡切到监听模式的最小流程:

sudo airmon-ng check kill sudo airmon-ng start wlan0 iw dev

airmon-ng check kill会检查当前系统里与无线网络冲突的进程并临时停掉它们。最常见的是 NetworkManager,它会周期性发起扫描和连接请求,导致网卡被反复拉回 managed 模式。执行完这条命令后,终端会列出一串被杀掉的进程名,这属于正常现象。

airmon-ng start wlan0把物理网卡 wlan0 切换到监听模式,并把接口名改名为 wlan0mon。做完这一步后,网卡不再参与正常的 Wi-Fi 连接,它会持续监听空中的 802.11 帧。iw dev用来确认接口状态,输出里只要看到type monitor就算成功。如果你的网卡驱动比较特殊,接口名可能不变,你只需要记住iwconfig显示 Mode:Monitor 即可。

实验结束后想恢复正常联网,执行sudo airmon-ng stop wlan0mon,然后手动启动 NetworkManager,命令因发行版而异,Kali 下通常执行sudo systemctl restart NetworkManager。

3.3 虚拟机里怎么把 USB 无线网卡传给 Kali

课程实验最常见的拓扑是:Windows 物理机跑 VMware 或 VirtualBox,虚拟机里装 Kali。这种情况下 USB 无线网卡默认被宿主机占用,必须手动把设备“直通”给虚拟机。

VMware Workstation 的操作路径是:虚拟机设置 → USB 控制器 → 添加设备 → 选择你的无线网卡。VirtualBox 则是:设置 → USB → 添加 USB 过滤器。要注意宿主机上如果有某个软件正在使用这张无线网卡,例如 Windows 的“移动热点”功能,那么网卡不会出现在虚拟机的lsusb输出里。先到宿主机断开该网卡连接,再直通虚拟机。

直通后进入 Kali,检查一下:

lsusb sudo airmon-ng

如果lsusb能看到网卡的厂商 ID,说明设备已在虚拟机内;如果airmon-ng输出里对应该网卡的 Chipset 一栏是空的,多半是驱动没装上,后面抓包会频繁出错。此时优先回到物理机,在 Kali 里用apt install realtek-rtl88xxau-dkms之类的方式补驱动,而不是急着抓包。

3.4 监听模式启动后,先确认三件事

切换监听模式后不要急着跑 airodump,先做三件事:确认接口名、确认信道、确认注入能力。接口名用iwconfig看,信道用iw dev看,注入能力用aireplay-ng --test看。

sudo iwconfig wlan0mon sudo aireplay-ng --test wlan0mon

aireplay-ng --test会向空中发送注入测试帧并等待回显,输出Injection is working!说明网卡注入没问题。如果卡死在这里,常见原因是当前环境太嘈杂或网卡驱动不支持发送注入帧,不要硬撑,换一块网卡比调参数靠谱。这步测试只要几十秒,但能把后面 deauth 失败的问题提前暴露出来,属于血泪经验。

4. 从扫描 AP 到抓到握手包:airodump-ng 过滤、deauth 注入与 cap 落盘

4.1 先看全场再锁目标:airodump-ng 的输出怎么读

监听模式就绪后,第一件事是扫描周围环境里的 AP。这一步是“看全场”,不锁定任何目标:

sudo airodump-ng wlan0mon

输出会动态刷新,每一行是一个 AP,下面缩进行是对应的客户端。最关键的表头字段要会读:

字段含义怎么判断
BSSIDAP 的 MAC 地址锁定目标的唯一标识
PWR信号强度,负数越接近 0 信号越强,低于 -70 就不好抓
CH信道锁定目标后必须用这个值过滤
ENC / CIPHER加密方式和密码套件找 WPA/WPA2 的,跳过 WEP 和 OPEN
AUTH认证方式PSK 开头的是我们要的目标
ESSID无线网络名称方便人工识别

从这里选一个信号强、信道不拥挤、明确是 WPA2-PSK 的 AP 做实验目标。初次实验可以只挑一个 AP,不要贪多。多 AP 同时抓包会让后面 airmon-ng 对目标 BSSID 匹配时多出不少干扰,排查起来比较闹心。

信号弱的 AP 即使能抓到握手包,跑字典时也容易因 EAPOL 帧不完整而失败。判断标准很朴素:PWR 至少有 -60 左右,最好距离路由器不要超过两三米,别隔着承重墙做实验。

4.2 锁定目标开始落盘:-c、--bssid、-w 三个参数

看到全场后,Ctrl+C 停掉扫描,然后用过滤参数重新开一轮,只盯目标 AP,同时把报文写入文件:

sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w lab wlan0mon

这里的-c 6指定信道为 6,Kali 会自动把网卡切成单信道监听。单信道比扫全频段抓包效率高得多,因为网卡同一时刻只能监听一个信道,扫全频段时每个信道停留时间很短,很容易错过客户端重连瞬间的 EAPOL 帧。--bssid AA:BB:CC:DD:EE:FF是目标 AP 的 MAC,airodump-ng 收到这个参数后会隐藏其它 AP,界面干净很多。-w lab是输出前缀,程序会自动生成lab-01.cap、lab-01.csv等文件。再次 Ctrl+C 结束时如果继续用-w lab抓,编号会变成lab-02.cap、lab-03.cap,注意别把新老文件混在一起。

落盘文件默认生成在当前目录。实验结束后回头整理时,cap 文件里除了 EAPOL 帧还有大量无关报文,aircrack-ng 会自动过滤,但 Wireshark 打开时最好用过滤器只看 EAPOL,避免眼晕。

4.3 没有客户端在线,deauth 注入如何“制造”一次握手

WPA 握手发生的前提是客户端与 AP 建立关联。如果你实验时屋里没人在用这个 Wi-Fi,airodump-ng 界面上客户端列表为空,那就需要主动触发一次重连。经典做法是发 deauth 帧把现有客户端踢下线,它会立刻自动重新关联,关联瞬间就会重新完成四次握手。这个操作在课程实验里是标准动作,但在真实公共网络里对陌生设备使用是越界行为,请只对自家路由器操作。

sudo aireplay-ng -0 3 -a AA:BB:CC:DD:EE:FF wlan0mon

-0表示发送 deauth 帧,3是发送数量,-a指定目标 AP 的 BSSID。这个命令不加-c参数时,向所有客户端的广播 deauth;加上-c 00:11:22:33:44:55则定向踢某个客户端。广播方式简单有效,但有的网卡对广播 deauth 支持不好,定向方式更稳。如果发送后 airodump-ng 界面里#Data列数字明显增长,说明客户端正在重新关联,保持抓包窗口开着,等待右上角出现握手提示。

有的实验课里,学生会用手机连上自家 AP,然后反复开关手机 Wi-Fi 来制造握手,这其实是最“温柔”的方式。deauth 是辅助,不是必需品;只要客户端有重连行为,握手自然会发生。

4.4 如何判断真的抓到握手包

airodump-ng 界面右上角出现WPA handshake: AA:BB:CC:DD:EE:FF,这是最直观的标志。但我习惯再用报文级验证确认一下,避免只抓到半截握手。用 tcpdump 直接看 cap 文件里的 EAPOL 帧:

sudo tcpdump -r lab-01.cap -nn -c 20 'eapol'

输出里如果能连续看到 EAPOL key 相关报文,说明握手确实落盘了。如果你在 Windows 上更习惯用 Wireshark,打开 cap 文件后,显示过滤器填eapol效果一样。判断标准是:至少看到一条客户端发出的 EAPOL 第 2 条消息和一条 AP 发出的 EAPOL 第 3 条消息。只有一条 EAPOL 帧时,后面 aircrack-ng 能跑,但经常因为 MIC 字段不完整而报错。

如果右上角迟迟不出现握手,多半是界面上没有一个活跃客户端。先确认 airodump-ng 客户端列表里有人,再执行 deauth。别小看这个顺序,很多翻车都是先发 deauth,后开抓包窗口,恰好错过了重连瞬间。

5. 跑字典与踩坑排查:破解命中率为什么这么低、总是“Waiting for beacon”或“0 handshake”

5.1 aircrack-ng 的完整命令:读 cap、指定字典、限定 AP 与客户端

抓到握手包后,跑字典的命令反而很短:

aircrack-ng -w /usr/share/wordlists/rockyou.txt -b AA:BB:CC:DD:EE:FF lab-01.cap

-w指定字典文件,Kali 自带rockyou.txt,它在/usr/share/wordlists/下,首次使用需要先解压rockyou.txt.gz。-b指定目标 BSSID,这一步不是为了省时间,而是防止 aircrack-ng 把 cap 文件里其它 AP 的握手一起拿来试。不加-b时它会对每个 AP 都跑一遍,输出乱且慢,还容易让人误判“破解成功”——其实成功的是另一个无关 AP。

执行后输出会显示候选口令的进度条和每秒测试数。如果命中,会直接打印出KEY FOUND! [ 口令内容 ]。如果整个字典跑完,显示KEY NOT FOUND,可以先换字典,也可以检查下面这几类常见问题。

5.2 现象一:cap 文件里根本没有 EAPOL 帧,提示“No matching network found”

现象:aircrack-ng 启动后显示No matching network found,文件列表里看不到任何 AP。原因有两种可能:一是-b指定的 BSSID 和 cap 文件里记录的不一致,比如看错了一行;二是抓包过程中 EAPOL 帧没有被正确写入,cap 文件里只包含 beacon 和数据帧。解决方法是先用aircrack-ng lab-01.cap不带任何参数跑一遍,让它列出文件里识别到的所有网络和握手状态。如果列表为空或全部是No handshake,回到第 4 章重抓;如果能看到多个网络,再检查是不是 BSSID 抄错了。

5.3 现象二:deauth 一直发不出去,客户端始终不掉线

现象:aireplay-ng命令执行后没有任何报错,但 airodump-ng 界面上客户端纹丝不动。原因通常是网卡不支持注入,或者监听模式没有被正确激活。有些便宜网卡号称“支持监听”,实际驱动只能收不能发,deauth 帧根本没到空中。解决方法是先用aireplay-ng --test wlan0mon做注入测试,如果测试失败就换一块 AR9271 或 RT3070 芯片的网卡。另外,现在的部分路由器默认开了管理帧保护(PMF,802.11w),deauth 帧会被客户端直接丢弃,这种情况下发多少帧都没用,只能等客户端自己重连。

5.4 现象三:右上角显示 WPA handshake,但跑字典全是 KEY NOT FOUND

现象:抓包界面明明出现过WPA handshake,字典也跑完了,结果一个都没命中。原因有两大类:第一,密码确实不在字典里,这是最常见也最无解的情况;第二,抓到的握手包不完整,比如只抓到第 1、2 条消息,或者客户端这一侧的 EAPOL 第 2 条消息丢了关键字段。解决方法是先自己造一个确定能命中的场景:把路由器密码临时改成Test123456,同时把这一行写进一个只有一行的test.txt,再用 aircrack-ng 去跑。如果这样能出来KEY FOUND,说明你的抓包链路没问题,问题在字典覆盖范围。这种“最小验证”的办法养成了习惯,后面排查任何无线问题都很省事。

5.5 现象四:字典里明明有正确密码,偏偏破解不出来

现象:你确认密码就在字典里,文件中也能搜到那行字符串,但 aircrack-ng 就是显示KEY NOT FOUND。原因通常是文件格式问题:Windows 下编辑过的字典可能带\r回车符,或文件开头有 BOM,aircrack-ng 按行读取时把\r当成密码的一部分。我一般顺手用head -5 dict.txt | cat -A看行尾,如果末尾出现^M$,就先把回车符清掉:

sed -i 's/\r$//' dict.txt

清掉之后重新跑。还有一个容易忽略的点:如果密码里有$、!这种特殊字符,注意在 shell 里给字典路径加引号,路径里的特殊字符被展开成变量或历史命令,会产生各种很难排查的玄学现象。

5.6 现象五:虚拟机里的 USB 网卡中途掉线,airodump-ng 界面卡死

现象:抓包抓了十几分钟,airodump-ng 界面突然不刷新,lsusb也看不到那枚无线网卡。原因大概率是虚拟机 USB 直通不稳定,也有网卡长时间工作过热掉电的因素。解决办法是把虚拟机的 USB 控制器设置里“自动连接”关掉,避免主机端抢占;同时抓包时间尽量控制在几分钟内,抓到手就停。同一个实验如果非要长时间挂着,优先用物理机装 Kali,而不是虚拟机。老生常谈,但确实是“等待 beacon”问题时最容易被忽略的根因。

6. 验证结果和防御视角:这堂实验做完,我会立刻改掉这三个配置

6.1 先做一个最小验证

拿到一次成功的破解结果后,别急着收拾环境,先做一个最小验证:把自己的密码写进一个小字典,验证链路完整性。

echo "MyLabPassword123" > test.txt aircrack-ng -w test.txt -b AA:BB:CC:DD:EE:FF lab-01.cap

这一步的意义是确认“抓包无误 + 命令无误 + 字典格式无误”。如果小字典能命中,后面换大字典跑不中就只可能是字典覆盖问题;如果小字典都跑不出来,说明前面某一步错了,换一万个字典也白搭。这个套路我一直用到现在,花一分钟省一小时排查时间。

6.2 从实验结果反推防御配置

知道攻击者是怎么拿到握手包并跑字典的之后,再回头看路由器配置,很多默认设置都会让你后背一凉。我实验完立刻改了三个配置:

配置项常见默认值实验后的建议值
Wi-Fi 密码8 位纯数字或纯字母不少于 14 位,混合大小写与符号
WPS开启关闭
无线模式WPA2/WPA3 自动明确 WPA2-PSK,开启 PMF

密码长度是决定性因素。aircrack-ng 跑字典的速度取决于 CPU 和 GPU,但一个 14 位随机口令的搜索空间已经远超大字典的能力;WPS 关闭是为了堵住 PIN 码暴力破解这条路,WPS 的 PIN 只有 8 位,前四位和末位校验位还能分开爆破,比跑 WPA 字典快得多;PMF 则是把 deauth 注入的路也挡了。这三个改动都不影响日常上网体验,但对暴力破解的阻力是数量级的提升。

6.3 把验证留给 hashcat:同一个 cap 文件的另一种跑法

如果实验时间富裕,可以再试一次 hashcat,它对 GPU 利用得更充分,跑长字典比 aircrack-ng 快不少。把 cap 文件转成 hashcat 格式:

hcxpcapngtool -o lab.22000 lab-01.cap hashcat -m 22000 -a 0 lab.22000 test.txt

-m 22000是 WPA-PBKDF2-PMKID+EAPOL 的 hashcat 模式,-a 0表示字典攻击。这不会取代 aircrack-ng,而是给你一种“同一份证据、两种验证手段”的思路。课程实验的终点不是那个KEY FOUND,而是你能解释清楚:为什么 PSK 口令可猜、为什么握手包能离线验证、为什么 PMF 挡得住 deauth。做完整轮实验后,我养成了两个习惯:一个是所有破解实验只跑自己家里的路由器,另一个是抓包文件和字典按日期归档,方便事后复查。说句心里话,这套工具链的边界比它看起来要窄得多——它考验的不是工具多强,而是你对抓包时机的理解有多深。希望这些文字能帮你在下一次实验里少走点弯路,也希望那份好奇心始终用在保护自己设备的方向上。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询