捕获 Wi-Fi 数据包后,您就可以在内容到达设备上运行的软件之前查看以其他方式被遮盖的详细信息和互动,因此捕获这些数据包是解决某些类型的 bug 的重要工具。
涉及的主要步骤如下:
- 找到合适的频道进行嗅探。
- 捕获流量。
- 分享捕获的 WLAN 密码和哈希。
1. 确定合适的通道和宽度
WLAN 网络运行:
网络中的每个接入点(例如路由器、网状网节点)通常具有唯一的 2.4GHz 信道和 5GHz 信道,您需要确定设备连接到的是哪个接入点。有以下几个选项:
使用路由器的控制面板
如果您使用的是 Nest WiFi,请跳过此选项,系统不会公开此类信息。
大多数路由器都会列出已连接的设备以及它们使用的信道和宽度。
- 使用此指南查找路由器的 IP 地址。
- 在网络浏览器中转到路由器的地址,例如 http://192.168.1.1。
- 登录。忘记密码了?查找路由器上的标记,或使用路由器密码。
查找名称类似于“clients”或“attached devices”的页面。例如,Netgear 路由器页面可能如下所示(或适用于 Eero 设备)。
您可能需要查看设置中的其他位置,以将第 4 步中的信息映射到特定频道和带宽。例如,Netgear 路由器:
使用 Mac(如果它已连接到同一频道)
按住键盘上的 Option,然后点击 Mac 状态栏右上角的 WLAN 图标。您应该会看到常规 WLAN 菜单,其中包含一些更多选项和信息。查看不可用的菜单项,并找到提及“Channel”的菜单项:
`Channel 60 (DFS, 5GHz, 40MHz)`
找不到频道和宽度
如果其他方法都行不通,您可以尝试:
列出 AP 使用的所有信道(通常每个 AP 或网状点 2 个)。
a. 建议:在 Android 手机上,您可以使用 Wifiman 或 Aruba 实用程序等应用。
a. 在 Mac 上,您可以使用
/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport-s
列出选项。按照以下说明,在每个频道中执行短暂的拍摄(即使 15 秒就足够了)
安装 Wireshark(如需帮助,请参阅安装 Wireshark)。
使用 Wireshark 打开每个捕获,应用
wlan.addr == YOUR_DEVICE'S_MAC
的显示过滤器,然后查看是否显示任何数据包。
2. 开始拍摄
重要提示:捕获四次握手
如果为 Wi-Fi 开启了安全功能,您需要知道用于解密捕获的数据包的加密密钥。加密密钥派生自设备连接到网络时发生的四次握手,并且对于设备和 AP 之间的每个连接都是唯一的。
因此,您必须捕获四次握手,以解密 Wi-Fi 载荷。如果在开始捕获时设备已连接到网络,请在嗅探功能开始后断开设备连接后再重新连接(或重新启动)。
在 Mac 上截取
按住键盘上的 Option 键的同时,点击 WLAN 图标,然后选择“打开无线诊断...”:
在“无线诊断”菜单栏中,依次选择 Window > Sniffer:
将信道和宽度设置为您之前检索的值(屏幕截图示例针对的是信道 60,宽度为 40 MHz):
按 Start
并输入密码。现在,尝试重现问题。
确保通过连接捕获四次握手,如捕获四次握手中所述。
完成后,请按 Stop
。新的 *.pcap
文件可在 /var/tmp
中找到,其中包含所有流量。示例文件名为:(null)_ch100_2018-11-06_10.52.01.pcap
。
在 Linux 上捕获
关闭 WLAN。这可以通过以下方法完成:
- 使用 GUI(推荐)
- 使用网络管理器 CLI 指示其停止管理 WLAN 接口:
sudo nmcli dev set <wlan-ifname> managed on
- 如果使用备用网络管理器,请进行相应调整。
保存此脚本。将
<wlan-ifname>
替换为您的 Wi-Fi 接口的名称。本文档假定脚本名称为setup-wifi-capture
。#!/usr/bin/env bash sudo ifconfig <wlan-ifname> down sudo rfkill unblock wifi sudo iwconfig <wlan-ifname> mode monitor sudo ifconfig <wlan-ifname> up sudo iw dev <wlan-ifname> set channel $@
执行上述脚本,并传入通道和最高带宽进行嗅探,例如通道 153 和 80MHz 的带宽:
./setup-wifi-capture chan 153 80 MHz
打开 Wireshark,现在您应该能够在 wlan 接口上捕获数据包。
3. 分享拍摄的内容
使用 WPA PSK(原始密钥)生成器生成密码哈希值。这样,您就可以在不知道纯文本密码的情况下解密捕获的内容。
您还需要共享生成的 PSK,以便其他人可以解密捕获的内容。
附录
安装 Wireshark
您可以在 Linux 上使用 apt install Wireshark 安装 Wireshark,也可以从 Wireshark 网站在线下载 Wireshark。
设置 Wireshark 解密流量
这对于共享捕获文件而言并不是必需的,只有当您想要在 Wireshark 中自行检查解密的流量时,才需要执行此操作。
借助 Wi-Fi 上的 WPA2 安全机制,WPA2-PSK 不会直接用于流量加密和解密,它用于四次握手,您需要捕获该握手才能解密数据包。但是,如果您尝试捕获的只是与 Wi-Fi 连接问题或连接中断(可从 Wi-Fi 管理帧收集),则不需要捕获 4 向握手。不管是哪种情况,拍下来也没什么坏处。
打开 Wireshark 并打开“Preferences”页面(Wireshark 菜单 > Preferences 或 **Cmd + , **)。
在“协议”类别中找到“IEEE 802.11”部分,并确保选中“启用解密”:
点击解密密钥标签旁边的修改按钮。
点击左下角的“+”按钮,然后选择“wpa-pwd”选项。
点击新创建的行的密钥列(在 wpa-pwd 字符串旁边),以
<password>:<ssid>
格式输入您的 WPA2 PSK 和 SSID。例如,如果您的网络名称是MyHomeNetwork
,WPA2 PSK 是myp4ssword
,请输入myp4ssword:MyHomeNetwork
。点击“确定”进行确认
如需了解详情,请参阅 How to Decrypt 802.11 中的 Wireshark 官方指南(带屏幕截图)。
如果使用 tshark
,请传递以下参数:
tshark -o wlan.enable_decryption:TRUE -o 'uat:80211_keys:"wpa-pwd","<psk>:<ssid>"'
着色 Wireshark 802.11 数据
meageek.com 上提供了一个方便的 802.11 颜色配置文件:Wireshark 配置文件。