使用 Pyspinel 进行数据包嗅探

<ph type="x-smartling-placeholder"></ph> 在 GitHub 上查看源代码

本指南介绍如何配置 Wireshark 并运行 Pyspinel 以嗅探数据包 来自 Thread 网络。

要使用 Wireshark extcap 插件进行数据包嗅探,请参阅数据包嗅探 使用 extcap

设置嗅探器环境

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

构建嗅探器

使用 ot-rcp 二进制文件输出构建并刷写 NCP 设备,以充当嗅探器。

北欧 nRF52840

如需设置 Nordic nRF52840 示例以用作嗅探器,请克隆 openthread/ot-nrf528xx 并设置构建环境:

git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap

将波特率设置为 460800。找到 #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 行 在 src/nrf52840/transport-config.h 中,并将其替换为 #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800

构建二进制文件:

./script/build nrf52840 UART_trans

ot-rcp 二进制输出转换为十六进制:

arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex

ot-rcp.hex 文件刷写到 nRF52840 开发板上,详见 刷写 nRF52840

停用 nRF52840 上的大容量存储设备 (MSD),以避免数据问题 损坏或丢失:

expect <<EOF
spawn JLinkExe
expect "J-Link>"
send "msddisable\n"
expect "Probe configured successfully."
exit
EOF
spawn JLinkExe
SEGGER J-Link Commander V6.42b (Compiled Feb  5 2019 17:35:31)
DLL version V6.42b, compiled Feb  5 2019 17:35:20
 
Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jan  7 2019 14:07:15
Hardware version: V1.00
S/N: 683411111
VTref=3.300V
 
Type "connect" to establish a target connection, '?' for help
J-Link>msddisable
Probe configured successfully.

Thread 网络属性

在继续之前,请先获取所需的 Thread 网络的以下属性 您需要它们来进行 Wireshark 配置和运行 Pyspinel Sniffer。

网状网本地前缀

如需从目标 Thread 网络中的设备获取 Mesh Local Prefix,请运行以下命令:

  1. 使用 OpenThread CLI:

    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    

  2. wpanctl 与 NCP 搭配使用:

    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    

  3. 使用 OTBR Web GUI,选择状态。系统会列出网状网本地前缀 为 IPv6:MeshLocalPrefix,类似于 wpanctl

频道

如需从目标 Thread 网络中的设备获取通道,请执行以下操作:

  1. 使用 OpenThread CLI:

    channel
    15
    

  2. wpanctl 与 NCP 搭配使用:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. 使用 OTBR Web GUI,选择状态。渠道被列为 NCP:Channel,其作用类似于 wpanctl

网络密钥

Wireshark 使用 Thread 网络密钥解密 捕获。如需从目标 Thread 网络中的设备获取网络密钥,请执行以下操作:

  1. 使用 OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

  2. wpanctl 与 NCP 搭配使用:

    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

OTBR Web GUI 中不提供 Thread 网络密钥。

Sniffer 选项

选项
-u or --uart
默认值
无 - 如果您使用的设备配有 而不是套接字连接。
说明
-u--uart 标志,后跟 设备路径,例如 /dev/ttyUSB0
-c or --channel
默认值
11
说明
后跟 -c--channel 标志 完成 Thread Network 之后, 来嗅探数据包
--no-reset
默认值
此标志会替换默认行为。
说明
如果您的 NCP 了,则需要 --no-reset 标志 设备已通过原生 USB 连接到主机 连接。
--crc
默认值
此标志会替换默认行为。
说明
如下平台需要使用 --crc 标志: TI 和 Nordicor Thread 板。旗帜 重新计算 CRC 以避免“错误的 FCS”(帧检查 序列)警告。
-b or --baudrate
默认值
115200
说明
使用 -b--baudrate 标志 以覆盖默认波特率。将此值设置为 波特率,NCP build(建议使用 460800)。
--rssi
默认值
此标志会替换默认行为。
说明
--rssi 标志用于确保 RSSI 是 pcap 输出中包含的详细信息。如果将 TI CC24xx FCS format 选项处于启用状态。
--tap
默认值
此标志会替换默认行为。
说明
--tap 标志指定 DLT_IEEE802_15_4_TAP(283) 表示帧格式, 包含具有元数据(如 FCS、RSSI、LQI、Channel)。如果未指定, “DLT_IEEE802_15_4_WITHFCS(195)”的用途 默认使用 PHY 之后的额外 RSSI 和 LQI 如 TI CC24xx FCS 格式所示。如果将 ITU-T CRC-16 选项是否处于启用状态。如果未启用此选项 在 Wireshark 中,请勿使用此标记。

运行嗅探器

请确保针对 NCP 使用特定的设备路径,为 您正在尝试嗅探的线程网络。

如果按照本指南操作,nRF52840 DK 应通过 调试端口,如将 nRF52840。要运行 Pyspinel 嗅探器, 使用 -b 标志指定波特率(如果更改了默认值) 并省略 --no-reset 标志。

如果您配置 Wireshark 来显示 RSSI,则还必须包含 --rssi 标记。例如,要使用 在 /dev/ttyACM0 装载且 Wireshark 输出中包含 RSSI 的设备:

cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -

您现在应该能够 Wireshark 中的配置:

Wireshark 捕获

请参阅尖刺嗅探器 参考 有关运行 Pyspinel 嗅探器的更多信息。

原生 USB 连接

使用 nRF52840 DK USB 端口需要 OpenThread ot-rcp 二进制文件 使用 USB_trans 构建:

./script/build nrf52840 USB_trans
刷写 nRF52840 DK,通过 USB 将其连接到宿主机 端口,然后使用 --no-reset 标志 但在运行嗅探器时省略 -b 标记:

python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -

资源

如需了解其他北欧工具,请参阅北欧半导体 — Thread 基于 nRF52840 的嗅探器(含 Wireshark)