使用 Extcap 进行数据包嗅探

在 GitHub 上查看源代码

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

如需使用 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 嗅探器 Extcap 捕获

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

OT 嗅探器 Extcap 选项

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

从多个接口捕获

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

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

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

OT 嗅探器 Extcap 数据包

问题排查

OpenThread Sniffer 未列为 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 只允许根用户捕获数据包

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

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

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

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 或更高版本。