通过捕获 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 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 之间的每个连接都是唯一的。
因此,您必须捕获 4 次握手才能解密 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 上捕获
关闭 WLAN。这可以通过以下任一方式来实现:
- 使用 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 管理帧中收集),则无需捕获 4 次握手。无论哪种情况,捕获它都没有坏处。
打开 Wireshark,然后打开“Preferences”页面(Wireshark 菜单 > Preferences 或 **Cmd + , **)。
在“Protocols”(协议)类别中找到“IEEE 802.11”部分,并确保选中“Enable decryption”(启用解密):
点击解密密钥标签旁边的修改按钮。
点击左下角的“+”按钮,然后选择“wpa-pwd”选项。
点击新创建行的键列(紧邻 wpa-pwd 字符串),然后以
<password>:<ssid>格式输入 WPA2 PSK 和 SSID。例如,如果您的网络名称为MyHomeNetwork,WPA2 PSK 为myp4ssword,请输入myp4ssword:MyHomeNetwork。
点击“确定”进行确认
如需了解详情,请参阅 Wireshark 的官方指南(附带屏幕截图):如何解密 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 配置文件。