使用 Extcap 进行数据包嗅探

在 GitHub 上查看源代码

本指南介绍了如何为 Wireshark 配置 extcap,以便从 Thread 网络中嗅探数据包。

如需在不使用 extcap 的情况下使用 Pyspinel 进行数据包嗅探,请参阅使用 Pyspinel 进行数据包嗅探

设置嗅探器环境

在开始之前,请完成以下步骤:

验证

本指南已在以下主机系统上通过 Zolertia Firefly (Texas Instruments CC2538 SoC) 进行验证:

  • Debian 4.19.37 - Wireshark 3.0.4
  • macOS Mojave 10.14.6 - Wireshark 3.0.5
  • 64 位 Windows 10 版本 17134 - Wireshark 3.0.6

构建并刷写嗅探器

构建和刷写说明因平台而异。

如需了解如何构建和刷写 CC2538,请参阅 GitHub 上的 CC2538 示例 README

如需了解常规构建说明,请参阅如何构建 OpenThread

使用嗅探器

首次启动 Wireshark 时,系统会显示 Wireshark 捕获屏幕。它应列出连接到 OpenThread 嗅探器的硬件接口。

从单个界面进行捕获

如果这是您首次使用界面,请点击界面左侧的选项按钮:

OT Sniffer Wireshark Extcap 捕获

  1. 渠道设置为所需的值。
  2. 检查 IEEE 802.15.4 TAP,确保频道信息包含在 pcap 输出中,并且可以显示在 Wireshark GUI 中。
  3. 选中在开始捕获时保存参数,以确保在开始捕获后保存这些参数,以免您在下次使用该界面时必须再次进行设置(除非您需要更改频道)。
  4. 点击开始

OT Sniffer Wireshark Extcap 选项

如果您已保存参数,请选择硬件接口并点击左上角的 Wireshark 图标,开始嗅探。

从多个接口捕获

选择捕获屏幕中列出的所有硬件接口,然后点击左上角的 Wireshark 图标。

从多个接口捕获数据时,可以使用以下字段来识别各个嗅探器:

  • 接口 ID (frame.interface_id) - Wireshark 用于标识捕获接口的接口标识符
  • 接口名称 (frame.interface_name) - Wireshark 用于识别捕获接口的接口名称
  • 频道 (wpan-tap.ch_num) - IEEE 802.15.4 捕获频道(范围:11-26)

OT Sniffer Wireshark Extcap 数据包

问题排查

OpenThread 嗅探器未列为 Wireshark 接口

  1. 如果您安装了多个 Python 解释器,请确保 extcap 脚本使用的是 Python 3 解释器。Pyspinel 不支持 Python 2。
  2. 检查硬件是否已在 USB 上枚举,以及驱动程序是否已加载。
  3. 检查是否已将正确的固件(NCP 或 RCP)刷写到硬件。
  4. 验证位于 extcap 路径中的 Python 脚本是否可执行。
    • 对于 OS X 和 Linux:
      1. 验证 extcap_ot.py 文件是否具有执行权限:
        ls -l extcap_ot.py
        
      2. 如果缺少执行 (x) 权限,请修改权限:
        chmod +x extcap_ot.py
        
      3. 验证接口是否已列出:
        extcap_ot.py --extcap-interfaces
        
    • 对于 Windows:
      1. 验证接口是否已列出:
        extcap_ot.bat --extcap-interfaces
        
      2. 如果此命令退出并显示 Python 错误,请验证 Python 版本是否为 3.x:
        py -3 --version
        

Wireshark 仅允许 root 用户捕获数据包

在 Ubuntu 上安装 Wireshark 期间,系统会提示用户选择以下选项之一:

  1. 创建 wireshark 用户组,并允许该组的所有成员捕获数据包。
  2. 仅允许 root 用户捕获数据包。

强烈建议不要以 root 用户身份使用 Wireshark。如果您选择了该选项,请更改设置:

sudo dpkg-reconfigure wireshark-common

如果 Wireshark 配置为仅允许 wireshark 群组成员进行捕获,您可能需要将正确的用户添加到该群组:

sudo usermod -a -G wireshark user

此外,请将正确的用户添加到 dialout 组:

sudo usermod -a -G dialout user

关闭并重启 Wireshark,以应用新的用户组设置。

在 Windows 上通过多个 USB 接口进行捕获时,Wireshark 格式错误

这是某些旧版 Wireshark 的已知问题。确保您使用的是 Wireshark 3.0.6 或更高版本。