Google 致力于为黑人社区推动种族平等。查看具体行动

使用 Pyspinel Pack 探数据包

在 GitHub 上查看源代码

本指南介绍了如何配置 Wireshark 和运行 Pyspinel 以 探来自线程网络的数据包。

如需使用 Wireshark extcap 插件 for 探数据包,请参阅使用 extcap 进行数据包 P 探

设置 the 探器环境

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

制作 the 探器

使用 ot-rcp 二进制输出构建并刷写 NCP 设备,以作为 the 探器。

北欧 nRF52840

如需设置北欧 nRF52840 示例作为 a 探器,请克隆 openthread/ot-nrf528xx 并设置构建环境:

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

请将波特率设置为 460800。在 src/nrf52840/transport-config.h 中找到 #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 行,并将其替换为 #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.

线程网络属性

在继续操作之前,请先获取要 探的线程网络的以下属性。进行 Wireshark 配置和运行 Pyspinel s 探器时,您需要使用它们。

网格本地前缀

如需从目标线程网络中获取设备网格网格前缀,请按以下步骤操作:

  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 类似)。

频道

如需从目标线程网络中某个设备获取通道,请执行以下操作:

  1. 使用 OpenThread CLI:

    channel
    15
    

  2. wpanctl 与 NCP 配合使用:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

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

网络密钥

捕获后,Wireshark 会使用线程网络密钥来解密数据包。如需从目标线程网络中获取设备的网络密钥,请执行以下操作:

  1. 使用 OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

  2. wpanctl 与 NCP 配合使用:

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

线程网络密钥在 OTBR 网络 GUI 中不可用。

探器选项

选项
-u or --uart
默认值
无 - 如果您使用的是具有串行连接的设备,而不是套接字连接,则必须提供。
说明
-u--uart 标志,后跟设备路径,例如 /dev/ttyUSB0
-c or --channel
默认值
11
说明
-c--channel 标志,后跟线程网络上配置的通道,用于 upon 探数据包。
--no-reset
默认值
此标志会替换默认行为。
说明
如果您的 NCP 设备已通过原生 USB 连接连接到主机,则需要 --no-reset 标记。
--crc
默认值
此标志会替换默认行为。
说明
TI 和 Nordic Semiconductor Thread 板等平台需要使用 --crc 标记。该标记会重新计算 CRC,以避免 Wireshark 中收到“Bad FCS”(帧检查序列)警告。
-b or --baudrate
默认值
115200
说明
-b--baudrate 标志用于替换默认比特率。将此值设置为与 NCP build 相同的波特率(我们建议 460800)。
--rssi
默认值
此标志会替换默认行为。
说明
--rssi 标志用于确保 pcap 输出中包含 RSSI。如果您在 Wireshark 中启用了 TI CC24xx FCS 格式选项,则必须使用此标志。
--tap
默认值
此标志会替换默认行为。
说明
--tap 标记指定帧格式的 DLT_IEEE802_15_4_TAP(283),其中伪标头包含带元数据的 TLV(例如 FCS、RSSI、LQI、Channel)。如果未指定,则默认情况下,DLT_IEEE802_15_4_WITHFCS(195) 会直接与 PHY 帧后面的其他 RSSI 和 LQI 一起使用,例如 TI CC24xx FCS 格式。如果在 Wireshark 中启用了 ITU-T CRC-16 选项,则必须使用此标志。如果未在 Wireshark 中启用该选项,请勿使用此标志。

运行 the 探器

确保对 NCP 使用特定设备路径,并针对您要 探的线程网络使用通道。

如果按照本指南操作,则应使用调试端口将 nRF52840 DK 连接到主机,如 Flash nRF52840 中所述。如需运行 Pyspinel n 探器,请使用 -b 标志指定波特率(如果默认不再更改),并省略 --no-reset 标志。

如果您配置 Wireshark 以显示 RSSI,那么在运行 the 探器工具时,还必须添加 --rssi 标志。例如,如需使用装载在 /dev/ttyACM0 且包含 Wireshark 输出中的 RSSI 的设备 探通道 15,请执行以下操作:

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

现在,您应该可以在 Wireshark 中查看此配置的数据包和相关协议:

Wireshark 捕获

如需详细了解如何运行 Pyspinel 探器,请参阅 Spinel 探器参考

原生 USB 连接

使用 nRF52840 DK USB 端口需要 OpenThreadot-rcp要构建的二进制文件USB_trans

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

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

资源

如需其他北欧工具,请参阅 Nordic Semiconductor - 基于 nRF52840 且使用 Wireshark 的线程 探器