捕获 Wi-Fi 数据包可让您在数据包到达设备上运行的软件之前,查看原本会被屏蔽的详细信息和互动,因此对于某些类型的 bug,这些捕获的数据包是非常重要的工具。
主要步骤包括:
- 找到要嗅探的正确频道。
- 吸引流量。
- 分享捕获的数据和 WLAN 密码的哈希值。
1. 确定合适的渠道和宽度
WLAN 网络在以下频段上运行:
网络中的每个接入点(例如路由器、网状节点)通常都有一个唯一的 2.4GHz 频道和一个 5GHz 频道,您需要找到设备连接到哪个频道。有以下几个选项:
使用路由器的控制面板
如果您使用的是 Nest WiFi,请跳过此选项,因为相关信息不会公开。
大多数路由器都会列出已连接的设备以及它们使用的信道和带宽。
- 按照此指南查找路由器的 IP 地址。
- 在网络浏览器中前往路由器的地址,例如 http://192.168.1.1。
- 登录。忘记了密码?在路由器上查找标签,或使用路由器密码。
查找名为“客户端”或“连接的设备”之类的页面。例如,Netgear 路由器页面可能如下所示,或者对于 Eero 设备。
您可能需要在设置中的其他位置查找,才能将第 4 步中的信息映射到特定频道和带宽。例如,Netgear 路由器:
如果 Mac 已连接到同一频道,请使用 Mac
按住键盘上的 Option 键,然后点击 Mac 状态栏右上角的 WLAN 图标。您应该会看到常规 WLAN 菜单,其中包含更多选项和信息。查看不可用的菜单项,找到提及“频道”的菜单项:
`Channel 60 (DFS, 5GHz, 40MHz)`
找不到渠道和宽度
如果其他方法不起作用,您可以尝试:
列出 AP 使用的所有信道(通常每个 AP 或网状网络点使用 2 个信道)。
a. 推荐:使用 Android 手机时,您可以使用 Wifiman 或 Aruba Utilities 等应用。
a. 在 Mac 上,您可以使用
/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport-s
列出选项。按照以下说明,在每个频道上进行短时间(即使只有 15 秒也足够)的捕获
安装 Wireshark(如需帮助,请参阅安装 Wireshark)。
使用 Wireshark 打开每个捕获文件,应用
wlan.addr == YOUR_DEVICE'S_MAC
的显示过滤条件,然后查看是否显示任何数据包。
2. 开始拍摄
重要提示:捕获 4 次握手
如果 Wi-Fi 启用了安全性,您需要知道加密密钥才能解密捕获的数据包。加密密钥源自设备连接到网络时发生的 4 次握手,并且对于设备与 AP 之间的每次连接都是唯一的。
因此,您必须捕获四次握手才能解密 Wi-Fi 载荷。如果您在开始捕获时设备已连接到网络,请在开始嗅探后断开并重新连接设备(或重新启动设备)。
在 Mac 上拍摄
按住键盘上的 Option 键,点击 WLAN 图标,然后选择“打开无线诊断…”:
在“无线诊断”菜单栏中,依次选择窗口 > 嗅探器:
将频道和带宽设置为您之前检索到的值(屏幕截图示例适用于频道 60 和带宽 40 MHz):
按 Start
,然后输入密码。现在,尝试重现问题。
确保您捕获了连接的四次握手,如捕获四次握手中所述。
完成后,按 Stop
。您可以在 /var/tmp
中找到新的 *.pcap
文件,其中包含所有流量。文件名示例:(null)_ch100_2018-11-06_10.52.01.pcap
。
在 Linux 上捕获
关闭 Wi-Fi。您可以通过以下任一方式来完成此操作:
- 使用 GUI(推荐)
- 使用 Network Manager 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 $@
执行上述脚本,并传入要嗅探的信道和最高带宽,例如带宽为 80MHz 的信道 153:
./setup-wifi-capture chan 153 80 MHz
打开 Wireshark,您现在应该能够捕获 wlan 接口上的数据包。
3. 分享捕获的内容
使用 WPA PSK (Raw Key) Generator 生成密码的哈希值。这样一来,您就可以在不知道纯文本密码的情况下解密捕获的数据。
您还需要分享生成的 PSK,以便其他人可以解密捕获的数据。
附录
安装 Wireshark
您可以在 Linux 上使用 apt install wireshark 安装 Wireshark,也可以从 Wireshark 网站在线下载。
设置 Wireshark 以解密流量
如果您只想在 Wireshark 中自行检查解密后的流量,则无需执行此操作。
在 WLAN 上使用 WPA2 安全协议时,WPA2-PSK 不会直接用于加密和解密流量。它用于四次握手,您需要捕获该握手才能解密数据包。不过,如果您只想捕获与连接到 Wi-Fi 或连接中断相关的问题,而这些问题可以从 Wi-Fi 管理帧中获知,那么您无需捕获四次握手。无论哪种情况,捕获它都不会有任何坏处。
打开 Wireshark,然后打开“偏好设置”页面(依次点击 Wireshark 菜单 > 偏好设置或按 **Cmd + , **)。
在“协议”类别中找到“IEEE 802.11”部分,并确保“启用解密”处于选中状态:
点击解密密钥标签旁边的修改按钮。
点击左下角的“+”按钮,然后选择“wpa-pwd”选项。
点击新创建行的键列(紧邻 wpa-pwd 字符串),然后输入您的 WPA2 PSK 和 SSID,格式为
<password>:<ssid>
。例如,如果您的网络名称为MyHomeNetwork
,而 WPA2 PSK 为myp4ssword
,则输入myp4ssword:MyHomeNetwork
。点击“确定”进行确认
如需了解详情,请参阅 Wireshark 的官方指南(附屏幕截图),网址为 How to Decrypt 802.11。
如果使用 tshark
,请传递以下实参:
tshark -o wlan.enable_decryption:TRUE -o 'uat:80211_keys:"wpa-pwd","<psk>:<ssid>"'
为 Wireshark 802.11 数据着色
metageek.com 上有一个方便的 802.11 色彩配置文件:Wireshark 配置文件。