捕获 WLAN 流量

通过捕获 Wi-Fi 数据包,您可以查看在到达设备上运行的软件之前被屏蔽的详细信息和互动,这使得这些捕获内容成为排查某些类型 bug 的重要工具。

主要步骤如下:

  1. 找到要嗅探的正确渠道。
  2. 捕获流量。
  3. 分享截图和 WLAN 密码的哈希值。

1. 确定合适的频道和宽度

WLAN 网络在以下平台上运行:

  • 频道,通常用数字表示。1-13 用于 2.4 GHz 信道,36-200 用于 5 GHz 信道
  • 具有特定宽度(20MHz、40MHz、80MHz、160MHz)

网络中的每个接入点(例如路由器、网状节点)通常都有一个唯一的 2.4 GHz 频道和一个 5 GHz 频道,您需要找出设备连接的是哪个频道。有以下几个选项:

使用路由器的控制台

如果您使用 Nest WiFi,请跳过此选项,因为系统不会公开此信息。

大多数路由器都会列出已连接的设备以及它们使用的频道和宽度。

  1. 请使用此指南查找路由器的 IP 地址。
  2. 在网络浏览器中访问路由器的地址,例如 http://192.168.1.1
  3. 登录。忘记密码了?在路由器上查找标签,或使用路由器密码
  4. 找到名为“客户端”或“已连接的设备”的页面。例如,Netgear 路由器页面可能如下所示,Eero 设备也是如此。

    Netgear 客户端视图

  5. 您可能需要在设置的其他位置查找,才能将第 4 步中的信息映射到特定频道和带宽。例如,Netgear 路由器:

    Netgear 渠道视图

使用已连接到同一频道的 Mac

按住键盘上的 Option 键,然后点击 Mac 状态栏右上角的 WLAN 图标。您应该会看到常规 WLAN 菜单,其中包含一些其他选项和信息。查看不可用的菜单项,找到提及“渠道”的菜单项:

`Channel 60 (DFS, 5GHz, 40MHz)`

Mac WLAN

找不到频道和宽度

如果其他方法不起作用,您可以尝试以下操作:

  1. 列出 AP 使用的所有频道(每个 AP 或网状网关通常为 2 个)。

    a. 推荐:使用 Android 手机时,您可以使用 WifimanAruba Utilities 等应用。

    a. 在 Mac 上,您可以使用 /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport-s 列出选项。

  2. 使用以下说明对每个频道执行短时间(15 秒就足够了)的截取

  3. 安装 Wireshark(如需帮助,请参阅安装 Wireshark)。

  4. 使用 Wireshark 打开每个捕获内容,应用 wlan.addr == YOUR_DEVICE'S_MAC 显示过滤条件,然后查看是否显示了任何数据包。

2. 开始捕获

重要提示:捕获四方握手

如果 Wi-Fi 已启用安全功能,您需要知道加密密钥才能解密捕获的数据包。加密密钥派生自设备连接到网络时发生的四次握手,并且是设备与 AP 之间的每种连接所特有的。

因此,您必须捕获 4 次握手才能解密 Wi-Fi 载荷。如果设备在您开始捕获时已连接到网络,请在嗅探开始后断开并重新连接设备(或重启设备)。

在 Mac 上截取屏幕截图

按住键盘上的“Option”键,然后点击 WLAN 图标,接着选择“打开无线诊断…”:

Mac WLAN 截取

在 Wireless Diagnostics 菜单栏中,依次选择 Window > Sniffer

Mac WLAN 嗅探器

将信道和宽度设置为您之前检索到的值(屏幕截图示例适用于信道 60 和宽度 40 MHz):

Mac WLAN 信道和宽度

Start 并输入密码。现在,尝试重现问题。 确保您从连接中捕获了 4 次握手,如捕获 4 次握手中所述。

完成后,按 Stop。您可以在 /var/tmp 中找到一个新的 *.pcap 文件,其中包含所有流量。文件名示例:(null)_ch100_2018-11-06_10.52.01.pcap

在 Linux 上进行捕获

  1. 关闭 WLAN。这可以通过以下任一方式来实现:

    • 使用 GUI(推荐)
    • 使用 Network Manager CLI 指示其停止管理 WLAN 接口:sudo nmcli dev set <wlan-ifname> managed on
    • 如果使用其他网络管理器,请相应地进行调整。
  2. 保存此脚本。将 <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 $@
  3. 执行上述脚本,并传入要嗅探的信道和最高带宽,例如带宽为 80MHz 的信道 153:

    ./setup-wifi-capture chan 153 80 MHz
  4. 打开 Wireshark,现在您应该能够在 wlan 接口上捕获数据包。

3. 分享截图

  1. 使用 WPA PSK(原始密钥)生成器生成密码的哈希值。这样,您无需知道明文密码即可解密截取内容。

  2. 您还需要共享生成的 PSK,以便其他人能够解密捕获内容。

附录

安装 Wireshark

您可以在 Linux 上使用 apt install wireshark 安装 Wireshark,也可以从 Wireshark 网站在线下载。

设置 Wireshark 以解密流量

您无需执行此操作即可共享捕获文件,只有在您想在 Wireshark 中自行检查已解密流量时,才需要执行此操作。

在 Wi-Fi 上使用 WPA2 安全性时,WPA2-PSK 不会直接用于加密和解密流量。它用于四次握手,您需要捕获该握手才能解密数据包。不过,如果您尝试捕获的仅是与连接到 Wi-Fi 或连接中断相关的问题(这些问题可以从 Wi-Fi 管理帧中获取),则无需捕获四次握手。无论是哪种情况,捕获它都没有坏处。

打开 Wireshark 并打开“偏好设置”页面(依次点击 Wireshark 菜单 > 偏好设置或按 **Cmd + , **)。

  1. 在“协议”类别中找到“IEEE 802.11”部分,并确保选中“启用解密”:

    Mac Wireshark 偏好设置

  2. 点击解密密钥标签旁边的修改按钮。

  3. 点击左下角的“+”按钮,然后选择“wpa-pwd”选项。

    Mac Wireshark WPA 和密码

  4. 点击新创建的行对应的密钥列(位于 wpa-pwd 字符串旁边),然后输入 WPA2 PSK 和 SSID(格式为 <password>:<ssid>)。例如,如果您的网络名称为 MyHomeNetwork,WPA2 PSK 为 myp4ssword,请输入 myp4ssword:MyHomeNetwork

    Mac Wireshark SSID

  5. 点击“确定”进行确认

如需了解详情,请参阅 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 配置文件