本指南介绍如何为 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 嗅探器的硬件接口。
从一个界面捕获
如果这是您第一次使用接口,请点击接口左侧的选项按钮:
- 将 Channel 设置为所需的值。
- 检查 IEEE 802.15.4 TAP,确保频道信息包含在 pcap 输出中并且可以显示在 Wireshark GUI 中。
- 选中在捕获开始时保存参数,确保在捕获开始后保存这些参数,以避免在下次使用界面时重新设置这些参数(除非您需要更改渠道)。
- 点击启动。
如果您的参数已保存,请选择硬件接口并点击左上角的 Wireshark 图标,开始嗅探。
从多个接口捕获
选择拍摄屏幕中列出的所有硬件接口,然后点击左上角的 Wireshark 图标。
从多个接口捕获数据时,可使用这些字段来识别各个嗅探器:
- Interface ID (frame.interface_id) - Wireshark 用来标识拍摄接口的接口标识符
- Interface name (frame.interface_name) - Wireshark 用来标识拍摄接口的接口名称
- 频道 (wpan-tap.ch_num) - IEEE 802.15.4 捕获频道(范围:11-26)
问题排查
OpenThread Sniffer 未列为 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 只允许根用户捕获数据包
在 Ubuntu 上安装 Wireshark 时,系统会提示用户选择以下选项之一:
- 创建
wireshark
用户群组,并允许该群组的所有成员捕获数据包。 - 仅允许
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 或更高版本。