捕获 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. 开始捕获
重要提示:捕获四次握手
如果 Wi-Fi 启用了安全性,您需要知道加密密钥才能解密捕获的数据包。加密密钥源自设备连接到网络时发生的四次握手,并且对于设备与 AP 之间的每次连接都是唯一的。
因此,您必须 捕获四次握手才能解密 Wi-Fi 有效负载。如果您在开始捕获时设备已连接到网络,请在开始嗅探后断开设备连接,然后重新连接设备(或重启设备)。
在 Mac 上捕获
按住键盘上的 Option 键,然后点击 WLAN 图标,再选择“打开无线诊断…”:
在“无线诊断”菜单栏中,依次选择 Window > Sniffer :
将频道和宽度设置为您之前检索到的值(屏幕截图示例适用于频道 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 $@执行前面的脚本,并传入要嗅探的频道和最高带宽,例如频道 153,带宽为 80MHz:
./setup-wifi-capture chan 153 80 MHz打开 Wireshark,您现在应该能够在 wlan 接口上捕获数据包。
3. 分享捕获内容
使用 WPA PSK(原始密钥)生成器 生成密码的哈希值。这样,您就可以在不知道纯文本密码的情况下解密捕获内容。
您还需要分享生成的 PSK,以便其他人可以解密捕获内容。
附录
安装 Wireshark
您可以在 Linux 上使用 apt install wireshark 安装 Wireshark,也可以从 Wireshark 网站 在线下载。
设置 Wireshark 以解密流量
分享捕获文件时不需要执行此操作,只有当您想在 Wireshark 中自行检查解密的流量时才需要执行此操作。
在 Wi-Fi 上启用 WPA2 安全性后,WPA2-PSK 不会直接用于流量的加密和解密。它用于 四次握手, 您需要捕获四次握手才能解密数据包。但是,如果您尝试捕获的只是与连接到 Wi-Fi 或连接中断有关的问题(可以从 Wi-Fi 管理帧中收集),则无需捕获四次握手。无论哪种情况,捕获四次握手都没有坏处。
打开 Wireshark,然后打开“偏好设置”页面(Wireshark 菜单 > 偏好设置 或 **Cmd + , **)。
在“协议”类别中找到“IEEE 802.11”部分,并确保选中“启用解密”:
点击 Decryption Keys (解密密钥)标签旁边的修改 按钮。
点击左下角的“+”按钮,然后选择“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 Configuration Profile。