捕获 WLAN 流量

捕获 Wi-Fi 数据包后,您就可以在内容到达设备上运行的软件之前查看以其他方式被遮盖的详细信息和互动,因此捕获这些数据包是解决某些类型的 bug 的重要工具。

涉及的主要步骤如下:

  1. 找到合适的频道进行嗅探。
  2. 捕获流量。
  3. 分享捕获的 WLAN 密码和哈希。

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

WLAN 网络运行:

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

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

使用路由器的控制面板

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

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

  1. 使用此指南查找路由器的 IP 地址。
  2. 在网络浏览器中转到路由器的地址,例如 http://192.168.1.1
  3. 登录。忘记密码了?查找路由器上的标记,或使用路由器密码
  4. 查找名称类似于“clients”或“attached devices”的页面。例如,Netgear 路由器页面可能如下所示(或适用于 Eero 设备)。

    Netgear 客户端视图

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

    Netgear 频道视图

使用 Mac(如果它已连接到同一频道)

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

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

Mac WLAN

找不到频道和宽度

如果其他方法都行不通,您可以尝试:

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

    a. 建议:在 Android 手机上,您可以使用 WifimanAruba 实用程序等应用。

    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 之间的每个连接都是唯一的。

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

在 Mac 上截取

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

Mac WLAN 捕获

在“无线诊断”菜单栏中,依次选择 Window > Sniffer

Mac WLAN 嗅探器

将信道和宽度设置为您之前检索的值(屏幕截图示例针对的是信道 60,宽度为 40 MHz):

Mac WLAN 通道和宽度

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

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

在 Linux 上捕获

  1. 关闭 WLAN。这可以通过以下方法完成:

    • 使用 GUI(推荐)
    • 使用网络管理器 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. 执行上述脚本,并传入通道和最高带宽进行嗅探,例如通道 153 和 80MHz 的带宽:

    ./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 解密流量

这对于共享捕获文件而言并不是必需的,只有当您想要在 Wireshark 中自行检查解密的流量时,才需要执行此操作。

借助 Wi-Fi 上的 WPA2 安全机制,WPA2-PSK 不会直接用于流量加密和解密,它用于四次握手,您需要捕获该握手才能解密数据包。但是,如果您尝试捕获的只是与 Wi-Fi 连接问题或连接中断(可从 Wi-Fi 管理帧收集),则不需要捕获 4 向握手。不管是哪种情况,拍下来也没什么坏处。

打开 Wireshark 并打开“Preferences”页面(Wireshark 菜单 > Preferences 或 **Cmd + , **)。

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

    Mac Wireshark 偏好设置

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

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

    Mac Wireshark WPA 和密码

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

    Mac Wireshark SSID

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

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