做无线网络实验,第一步不是打开终端,而是先把环境折腾明白。前阵子我把笔记本装了双系统,又开了台虚拟机跑 Kali Linux,从 VMware 到无线网卡直通,再到 Wireshark 里看到四次握手那四个 EAPOL 帧,整个过程踩了不少坑。今天把整个流程完整还原出来,从零开始搭一台能抓 WIFI 握手包的 Kali Linux 实验机,整个过程只针对自家路由器、实验网络或者你有授权的测试目标,合法合规是底线。
这篇文章适合三类人:一是刚开始接触 Kali Linux、不知道怎么在虚拟机上装系统的安全新手;二是准备考无线安全相关认证、需要亲手抓到握手包做实验的选手;三是做网络运维、想理解 WPA2 认证过程和 802.11 帧结构的人。我会把虚拟机配置、Kali 安装、无线网卡接入、monitor 模式切换、airodump-ng 抓包、Wireshark 验证这条链路全部走一遍,每一步都讲清楚为什么这么做,以及我实测中遇到的问题和解决办法。
1. 为什么用虚拟机做无线安全实验:整体方案怎么选
1.1 实验环境规划
先说我最终跑通的环境配置:
- 宿主机:Windows 11(22H2),内存 32GB
- 虚拟机软件:VMware Workstation Pro 17
- Kali Linux 版本:2024.2(内核 6.8)
- 无线网卡:Ralink RT3070 芯片 USB 网卡(MTK 芯片组实测也能用)
- 目标 AP:自建实验室 TP-Link 路由器,WPA2-PSK(AES)+ WPA3 混合模式这块后面有坑,下文细说
如果你内存只有 16GB,跑 Windows + Kali 虚拟机也能顺畅,分配 4GB 给 Kali 就行。CPU 建议虚拟机里给 2 核以上,因为 aircrack-ng 跑字典的时候多核优势明显。存储至少给 40GB,Kali 默认装完 20GB 出头,抓包、装驱动、存 cap 文件都要空间。
有人问为什么非要用虚拟机,直接在物理机上装 Kali 不就行了?确实,物理机方案在无线网卡兼容性上没有 USB 直通这些额外障碍。但虚拟机的好处是快照功能。你在系统里装坏一个驱动,一份快照回滚,省掉重装系统的整个晚上。我是在 VMware 里长期保持一个"刚装好、未装无线工具"的快照,一个"已配好网卡驱动"的工作快照,这样实验环境永远可以回到干净状态。
1.2 虚拟机方案的优势与取舍
虚拟机方案有个核心争议点:无线网卡的直通。VMware 默认情况下,USB 无线网卡插入宿主机后,会先被 Windows 的无线服务接管(wlanAutoConfig 服务可能会自动连接网络),这就导致 Kali 虚拟机里看不到网卡。需要先做"断开连接"再到 VM 里连接设备,顺序错了就各种摸不到网卡。
我的建议是:宿主机有线网络连接路由器,无线网卡专供虚拟机抓包使用。这样宿主机和虚拟机网络通道互不干扰。如果宿主机本身就是无线连网,那 USB 无线网卡每次插入都会被 Windows 抢走,你必须进"网络连接"里手动禁用这个无线网卡的 Windows 管理,才能让 USB 直通给虚拟机生效。这个操作我在后面实操部分会详细展开。
另外,虚拟机软件的选择上,我最终还是用 VMware Workstation Pro,而不是 VirtualBox。原因有二:一是 VMware 对 USB 3.0 直通的支持更稳定,我测试 RT3070 网卡在回环模式下不掉线;二是 VMware 的 NAT/桥接网络管理界面对新手更友好。VirtualBox 免费开源,也能做实验,但如果你手头是 Broadcom 或 Intel 卡的话,USB 直通后的驱动兼容问题会让你折腾到怀疑人生。
2. 从镜像下载到 Kali 系统装进虚拟机
2.1 Kali Linux 版本选择与镜像下载
Kali Linux 是滚动发布(Rolling Release),没有传统意义上的"稳定版"。下载的时候认准官网,别去第三方站点下载精简版或者"中文版",那些打包镜像我遇到过篡改源和预置后门的先例。用官方 ISO 最稳,Kali 官方对中文的支持本来就不错,装完再手动配置 fcitx 输入法就行。
选择镜像时有个细节:如果你是 Intel 网卡(比如 AX200 之类),或者要在 ARM 设备上实验,建议先跑一下uname -r看看内核版本,因为新款无线网卡的驱动经常要靠新内核才带得上。镜像站实际下载的就三种:Installer ISO(完整离线安装)、Network Installer(网络安装)、Live ISO(试用+安装二合一)。我建议下 Full Installer 版本的 ISO,离线包装完就能用,省得装系统时到处联网找依赖包。
下载完镜像后先做一件事:校验 SHA256。Kali 官网每个镜像文件都附了 SHA256 哈希值,Windows 下用certutil -hashfile kali-linux-2024.2-installer-amd64.iso SHA256核对一下,确认下载文件没有被劫持。安全实验第一步是保证自己的实验环境可信,这个习惯值得养成。
2.2 VMware 虚拟机配置参数
创建虚拟机时,建虚拟机硬盘这一步有几个关键参数。磁盘类型选 SCSI(NVMe 也可以),容量给 50GB,选"将虚拟磁盘存储为单个文件",这个选项在后续做快照、迁移时速度更快。内存给 4GB 起步,处理器给 2 核。网络适配器先选 NAT,装系统阶段不需要桥接。
这里要重点说的是处理器虚拟化设置。VMware 编辑虚拟机设置 → 处理器下,默认开启了"虚拟化 Intel VT-x/EPT 或 AMD-V/RVI"。这个选项如果你的 BIOS/UEFI 里没有打开 CPU 的虚拟化功能(BIOS 里 Intel 平台叫 VT-x,AMD 平台叫 SVM),虚拟机启动时会直接蓝屏或者报"无法启用虚拟机平台"。排查思路放在后面第五章,但这里提前做一次检查:任务管理器 → 性能 → CPU,看"虚拟化"这一项是否为"已启用"。不是的话,重启进 BIOS 打开 CPU 虚拟化,这是 VMware 安装的常见翻车点。
还有一个容易忽略的配置:CD/DVD 驱动器里加载 ISO 镜像后,在"虚拟机设置 → 选项 → 高级"里把"固件类型"设为 UEFI 而不是 BIOS。新版 Kali 默认以 UEFI 模式安装,跟 VMware 默认的 BIOS 不匹配,直接导致开机黑屏没法进引导菜单。我实测 UEFI 没问题,改完就好了。
2.3 Kali 安装过程与环境初始化
Kali 安装过程比较顺,按照界面点下去就行。分区选"使用整个磁盘",向导会帮你把 EFI 分区和根分区自动建好。到软件选择那一步,默认选了"Kali Desktop Environment"(XFCE 桌面)和"standard system utilities",这两个一定要勾上。如果你之后要用 GNOME,需要额外选,但我建议 XFCE,轻量不卡无线工具。
装完之后重启,进入系统第一件事:开终端,更新软件源。
sudo apt update sudo apt upgrade -y sudo apt install -y kali-linux-wirelesskali-linux-wireless 元包会装上 airmon-ng、airodump-ng、aireplay-ng、wifite 等无线工具集,这些工具在完整版镜像里部分是自带,但通过元包安装能保证依赖完整。升级过程大概 10 到 20 分钟,取决于网络。就在这段等待时间里,我发现两个环境初始化小坑:
第一个是中文输入法。Kali 默认不带中文输入法框架,需要装 fcitx5:
sudo apt install -y fcitx5 fcitx5-chinese-addons装完后在"设置 → 区域和语言"里把输入法添加为"拼音",重启一次系统。注意别装 ibus,跟 XFCE 的兼容性很差,我踩过这个坑。
第二个是 VMware Tools(或者 open-vm-tools):
sudo apt install -y open-vm-tools open-vm-tools-desktop这个包解决虚拟机和宿主机之间的剪贴板共享、窗口自适应分辨率。没装之前,Kali 的分辨率永远锁定在 800x600,终端里命令都写不全,极其折磨。
3. 无线抓包的核心原理:理解 WPA 握手包和工具链
3.1 WPA/WPA2 四次握手是怎么工作的
在跑无线抓包命令之前,必须先理解你抓的是什么。WPA2-PSK 网络里,客户端(Station)和 AP 之间建立会话时,会执行一次"四次握手"(4-Way Handshake)。参考下面这个简化时序:
第一次握手:AP 向客户端发送 ANonce(随机数) 第二次握手:客户端用自身生成的 SNonce,加上密码(PSK)派生的 PMK,一起生成 PTK 并回传给 AP 第三次握手:AP 确认 PTK,并向客户端安装密钥 第四次握手:客户端确认密钥安装完成,之后开始用加密数据通信
握手包就是在抓包文件里体现为四个 EAPOL 帧。只要抓到了这四个帧中的任何一个(Wireshark 过滤规则eapol),就说明这个 AP 和某个客户端之间正在建立或重新建立会话。你后续用字典验证某个 PSK 是不是正确,关键就是这四个帧里携带的 ANonce、SNonce 和 MIC 校验值。
有个实操细节:现在很多路由器默认开启 WPA2/WPA3 混合模式(称为 Transition Mode),在这种模式下抓包会发现频率上出现两个 BSSID(一个 WPA2 一个 WPA3)。WPA3 的握手机制完全不同于 WPA2,你抓到的握手包套用 aircrack-ng 验证不了。所以实验时建议把 AP 单独设为 WPA2-PSK(AES),或者至少知道混合模式下要对着 WPA2 那个 BSSID 抓。这是我第一次实验没抓到"有效握手包"的直接原因。
3.2 工具链:Aircrack-ng 套件的逻辑关系
Aircrack-ng 套件的关系是这样的:
- airmon-ng:把无线网卡从"受管模式"(managed)切换到"监听模式"(monitor),并创建一个 wlan0mon 接口
- airodump-ng:扫描周围 AP 和客户端,也能监听指定信道、指定 BSSID 并抓包写入 cap 文件
- aireplay-ng:可以注入 deauth 帧(解除客户端认证),强制在线客户端重新发起握手,加速抓包
- aircrack-ng:验证破解密码,也常用来检查 cap 文件里是否有握手包
还有 Wireshark:用来人工分析抓到的帧结构,确认 EAPOL 四次握手是否完整。
这套工具链设计的核心逻辑是:监听模式 → 扫描并锁定目标 → 抓取握手帧 → 验证握手有效性。每一步都有单独的职责,你不需要每次全跑,但理解他们之间的数据流会帮你省很多排查时间。
4. 完整实操:从虚拟机到真正抓取握手包
4.1 无线网卡准备与接入虚拟机
这是整个实验最容易卡住的一环。无线网卡芯片选型上,我实测稳定的两款是 Ralink RT3070 和 Realtek RTL8812AU 芯片组的 USB 网卡。它们天生支持 monitor 模式和包注入,Kali 内核自带驱动,插上去直接识别。Intel 的 AX200 这类网卡虽然性能好,但驱动要装 debian firmware-iwlwifi 包,而且部分芯片的 monitor 模式支持很差,容易在抓包中途掉帧,不建议拿来起步。
先说宿主机一侧:插入 USB 无线网卡前,先把 VMware 的"可移动设备"菜单打开,这个菜单在虚拟机窗口右下角。插上网卡后,底下的设备列表里会多出一个 USB 设备,右键选择"连接"(Connect)。如果连接之后 Kali 里还是lsusb看不到,多半是 USB 兼容性问题,要在虚拟机设置里把 USB 控制器改为 USB 3.1。这个控制器设置很容易被忽略,但它直接影响直通稳定性。
还有一个前置坑:如果宿主机 Windows 正通过这块无线网卡上网,直通给虚拟机后宿主机就断网了。Windows 自动重新连接时,虚拟机的直通连接会被强制打断。解决办法就是前面说的:宿主机用有线网,无线网卡专门给 Kali 抓包。没有条件用有线的,就去"网络连接"里右键这块无线网卡的属性,禁用"Internet 连接共享"以及"当此设备连接网络时自动连接"之类的自动连接机制,保证 Windows 不主动碰这块网卡。
接入后,在 Kali 里确认设备:
lsusb应该能看到类似Ralink Technology, Corp. RT2870/RT3070的条目信息。如果看不到,重新在 VMware 菜单里断开再连接一次,注意顺序。
4.2 开启 monitor 模式
确认网卡可见后,用它查看当前接口名称:
ip a通常 USB 网卡显示为 wlan0 或 wlan1。接下来先做完备检查,杀掉可能占用网卡的进程:
sudo airmon-ng check kill这一步会停止 NetworkManager 等无线网络管理服务,避免它们把网卡重新切回 managed 模式。如果跳过这步,你会发现网卡刚进入 monitor 模式,几秒后又被系统自动拉回受管模式,抓包日志里全是噪音。
然后启用监听模式:
sudo airmon-ng start wlan0提示信息会告诉你创建了新接口wlan0mon。这里有个版本差异:新版的 aircrack-ng(1.7+)有时直接复用原接口名而不是新建 mon 后缀接口,实际以输出信息为准。启动后看接口状态:
iwconfig确认 wlan0mon 的 Mode 一栏显示为 Monitor。如果显示的是 Managed,说明切换失败,重新检查网卡驱动和 suck 服务占用。
如果 airmon-ng start 一直报 "Failed to start monitor mode",可以用 iw 手动切换作为备选:
sudo ip link set wlan0 down sudo iw wlan0 set monitor control sudo ip link set wlan0 up注意切换后接口名可能仍然叫 wlan0,不影响后续使用。
4.3 扫描目标与抓取握手包
监听接口就绪后,先扫一遍周边环境:
sudo airodump-ng wlan0mon这个命令会把周围所有 AP 列出来。表格里有几列信息需要看懂:BSSID(AP 的 MAC 地址)、CH(信道)、ENC(加密方式,WPA2)、CIPHER、AUTH、PWR(信号强度)。你要找的目标应该是你自己实验路由器对应的 BSSID,注意别对着"WPA3"的条目抓。
锁定目标后,单独对这个 BSSID 和信道抓包。假定目标 BSSID 是AA:BB:CC:DD:EE:FF,信道是 6:
sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w lab wlan0mon-w lab表示以 lab 为前缀把抓包结果写入当前目录,会生成lab-01.cap文件。这个命令窗口不要关,让它持续抓包。刚开始抓的时候 cap 文件里基本没有说话,因为抓包是等客户端和 AP 之间发生握手才留下帧。如果你的实验网络里没有设备正在连接,可以打开一台手机连一下这个 WIFI,就会触发新的握手。
如果不想等,还可以主动加速:开一个终端窗口,对这个目标发送 deauth 帧强制客户端断开重连。airodump-ng 窗口别动,新终端执行:
sudo aireplay-ng -0 5 -a AA:BB:CC:DD:EE:FF -c 44:44:44:44:44:44 wlan0mon-0 5表示发送 5 个 deauth 帧,-a指定目标 AP 的 MAC,-c指定要踢的客户端 MAC(可以从 airodump-ng 客户端列表里看)。客户端被踢下线后,它会自动重连,重连的那一瞬间就是握手抓取的最佳时机。等 airodump-ng 窗口右上角出现WPA handshake: AA:BB:CC:DD:EE:FF的字样,说明握手已经抓到了。
注意发送 deauth 帧这个操作在真实公共网络上属于干扰行为,在你的实验环境里没问题,在别人的网上这么做就是不合规的行为了。我反复强调这个,是因为这类工具设计出来就是用来测试你自己网络的,边界一定要清楚。
4.4 验证握手包有效性并用 Wireshark 分析
抓包完成后 Ctrl+C 停掉 airodump-ng,先用 aircrack-ng 验证一下:
sudo aircrack-ng lab-01.cap输出结果里会显示1 handshake(或者0 handshake)。如果显示 0,说明没抓到,重新看 4.3 步,通常是客户端没有重新连接。如果显示 1,握手包有效,可以用自己设的密码跑一遍验证整个链路闭合。
验证密码这一步有个正确姿势:如果你知道实验路由器设的密码是Test123456,把密码写入文件,然后:
echo "Test123456" > pass.txt sudo aircrack-ng -w pass.txt lab-01.cap正常会看到KEY FOUND! [ Test123456 ]。注意这里字典里必须刚好有这个密码或者包含它,才能真正验证;如果你是用随机密码做实验,那 airckrack-ng 输出会显示未找到。至于用大字典暴力跑邻居家网络密码的玩法,不是这篇文的方向,也强烈不建议碰。
用 Wireshark 打开 cap 文件是个很有价值的分析习惯:
wireshark lab-01.cap过滤栏输入eapol,你会看到四次握手的四个帧,每条帧的 Info 标签都有序号(Message 1/2/3/4)。重点关注 Message 1 和 Message 2 里的 Nonce 字段、Message 2 里的 MIC 校验值。这四个 EAPOL 帧才是后续密码验证的数据基础。过滤条件也可以换成wlan.fc.type_subtype == 0x08看管理帧里的 Beacon,观察 AP 广播的加密能力是否符合预期。
5. 常见问题排查与实操速查表
5.1 高频报错与解决手段
把我在整个流程里碰到的高频问题汇总成一张速查表,方便你踩坑时快速定位:
| 现象 | 可能原因 | 排查手段 |
|---|---|---|
| 虚拟机启动蓝屏,报"无法启用虚拟机平台" | 宿主 BIOS/UEFI 未开启 CPU 虚拟化 | 重启进 BIOS,开启 Intel VT-x 或 AMD SVM |
| 虚拟机分辨率固定在 800x600,终端字体巨大 | open-vm-tools 未安装 | sudo apt install -y open-vm-tools-desktop |
| USB 网卡在 Kali 里 lsusb 看不到 | VMware USB 控制器版本低,或没点连接 | 设置 USB 3.1;虚拟机右下角手动连接设备 |
| 网卡在 monitor 模式几分钟后自动掉回 managed | NetworkManager 服务抢占 | 执行sudo airmon-ng check kill |
| airodump-ng 扫描列表里找不到目标 AP | 网卡被锁定在某个信道 | airmon-ng stop 后重新 start,不指定信道扫描 |
| airodump-ng 抓了很久没有 WPA handshake | 客户端没有重新连接,或 AP 开 WPA3 混合模式 | 改用 aireplay-ng 发 deauth;AP 侧关闭 WPA3 |
| aircrack-ng 报 "Zero handshake" | cap 文件里只有 beacon,没有 EAPOL 帧 | Wireshark 过滤 eapol 确认;重抓 |
| 网卡支持 monitor 但无法注入包(aireplay 超时) | 驱动不支持 raw injection | 换 RT3070 或 RTL8812AU 芯片网卡 |
| Kali 无法上网,apt update 超时 | 虚拟机 NAT 网卡 IP 冲突 | 删除 VMnet8 重新设置子网段(如 192.168.88.0/24) |
这里面 VMware 的 VMnet8 问题值得多说一句。Kali 装完后,你可能会想把网络从 NAT 改成桥接模式,但 VMware 桥接默认桥接到宿主机有线网卡,如果宿主机实际是靠无线连接的,那桥接后 Kali 直接失联。解决办法是:桥接设置里手动指定绑定的物理网卡,或者干脆保持 NAT 模式。抓包实验本身走的是无线网卡直通,跟虚拟机的上网方式没有关系,NAT 完全够用。
5.2 驱动相关:为什么有些网卡一插就灵,有些折腾一晚上
新手最痛苦的就是无线网卡驱动。我实测下来,Kali 对比较新的网卡芯片支持并不总是即插即用。比如 Intel AX210,系统能识别,但 firmware 可能提示掉线。这就是为什么我建议起步就选老牌 Ralink/Realtek USB 网卡。它们的驱动内核里就有,monitor 模式支持也验证充分。
如果想实时查看驱动加载状态:
dmesg | grep -i firmware dmesg | grep -i rt3070看到Firmware is ready之类字样就说明固件加载成功。遇到 WiFi 设备被 RF kill 开关禁用的情况(有些笔记本有硬件开关),注意执行:
sudo rfkill list如果显示Soft blocked: yes,先sudo rfkill unblock all。
5.3 抓不到握手包的一种隐蔽场景
有一种隐蔽场景值得记录:实验 AP 和客户端之间已经建立了会话,且双方都保存了密钥,此时客户端不会重新启动四次握手,airodump-ng 就会一直显示 0 handshake。发 deauth 踢一次是标准解法,但如果你的网卡注入能力差,deauth 帧发不出去,客户端根本不会掉线。
这种情况下,可以从 airodump-ng 的表中找一个信号强的客户端 MAC,然后精准地只踢它一次:
sudo aireplay-ng -0 1 -a AA:BB:CC:DD:EE:FF -c CLIENT_MAC wlan0mon发送 1 个帧就够,踢多了反而容易被客户端漫游到隔壁信号更好的路由器上,导致它从另一个 AP 重新连接,白等半天。
还有一个就是信道问题。2.4GHz 频段的 AP 之间相互干扰,如果目标 AP 实际在信道 6,但 airodump-ng 扫描时显示它在另一个信道(有些 AP 开了自动信道优化,扫描期间信道跳变),抓包就会失焦。解决方法是锁定--band bg或者在扫描时留意 CH 列的变化。5GHz 频段同理,网卡必须支持对应频段的 monitor 模式,否则看着在扫其实一片空白。
6. 一些实在的体会
写这篇文章时的实验环境,我家路由器后来被我调成了纯 WPA2-PSK 模式,手机连上一瞬间,airodump-ng 窗口右上角跳出了WPA handshake几个字,那一刻整个链路才算彻底闭环。之后我拿 Wireshark 把四次握手逐帧点开看,才真正理解了 EAPOL 那几行关键字段到底起了什么作用。
几个建议放在最后。第一,实验完了别把网卡留在监听模式里,sudo airmon-ng stop wlan0mon然后重启 NetworkManager 服务,不然你自己的虚拟机可能断网。第二,cap 文件注意保存路径,我因为-w lab直接写在 /root 下,后来做快照回滚时丢过一次实验数据,最好固定一个目录比如 ~/captures 存放。第三,多花点时间学 Wireshark 的过滤器,eapol、wlan.fc.type_subtype == 0x08这类过滤条件才是真正理解无线协议的门把手。
整个流程走下来,本质上就是一次标准无线安全审计的前半段:环境隔离、监听、取证。至于抓到握手包之后的密码验证环节,我只建议在明确授权的网络里做。给自己家的路由器测试密码强度,你会学到比任何人教的都多的细节。