本指南介绍了如何为 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 嗅探器的硬件接口。
从单个界面进行捕获
如果这是您首次使用界面,请点击界面左侧的选项按钮:
- 将渠道设置为所需的值。
- 检查 IEEE 802.15.4 TAP,确保频道信息包含在 pcap 输出中,并且可以显示在 Wireshark GUI 中。
- 选中在开始捕获时保存参数,以确保在开始捕获后保存这些参数,以免您在下次使用该界面时必须再次进行设置(除非您需要更改频道)。
- 点击开始。
如果您已保存参数,请选择硬件接口并点击左上角的 Wireshark 图标,开始嗅探。
从多个接口捕获
选择捕获屏幕中列出的所有硬件接口,然后点击左上角的 Wireshark 图标。
从多个接口捕获数据时,可以使用以下字段来识别各个嗅探器:
- 接口 ID (frame.interface_id) - Wireshark 用于标识捕获接口的接口标识符
- 接口名称 (frame.interface_name) - Wireshark 用于识别捕获接口的接口名称
- 频道 (wpan-tap.ch_num) - IEEE 802.15.4 捕获频道(范围:11-26)
问题排查
OpenThread 嗅探器未列为 Wireshark 接口
- 如果您安装了多个 Python 解释器,请确保 extcap 脚本使用的是 Python 3 解释器。Pyspinel 不支持 Python 2。
- 检查硬件是否已在 USB 上枚举,以及驱动程序是否已加载。
- 检查是否已将正确的固件(NCP 或 RCP)刷写到硬件。
- 验证位于 extcap 路径中的 Python 脚本是否可执行。
- 对于 OS X 和 Linux:
- 验证
extcap_ot.py
文件是否具有执行权限:ls -l extcap_ot.py
- 如果缺少执行 (x) 权限,请修改权限:
chmod +x extcap_ot.py
- 验证接口是否已列出:
extcap_ot.py --extcap-interfaces
- 验证
- 对于 Windows:
- 验证接口是否已列出:
extcap_ot.bat --extcap-interfaces
- 如果此命令退出并显示 Python 错误,请验证 Python 版本是否为 3.x:
py -3 --version
- 验证接口是否已列出:
- 对于 OS X 和 Linux:
Wireshark 仅允许 root 用户捕获数据包
在 Ubuntu 上安装 Wireshark 期间,系统会提示用户选择以下选项之一:
- 创建
wireshark
用户组,并允许该组的所有成员捕获数据包。 - 仅允许
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 或更高版本。