運用 Pyspinel 執行封包模擬

在 GitHub 中查看來源

本指南說明如何設定 Wireshark 並執行 Pyspinel 從 Thread 網路篩選封包。

如要使用 Wireshark extcap 外掛程式來處理封包,請參閱使用 extcap 的 Packet Sniffing 一文。

設定 sniffer 環境

開始操作前,請先完成下列步驟:

打造自動警報器

使用 ot-rcp 二進位檔輸出,建構並刷新 NCP 裝置來當做這位使用者。

北歐 nRF52840

如要設定 Nordic nRF52840 範例做為接收器,請複製 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

按照 Flash nRF52840 中的說明,將 ot-rcp.hex 檔案張貼到 nRF52840 電路板。

請停用 nRF52840 上的 Mass Storage Device (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 sniffer。

網格本機前置字串

如何從目標執行緒網路中的裝置取得網格本機前置字串:

  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 網頁版 GUI,選取 [狀態]。網狀本機前置字串會顯示為與 wpanctl 相似的 IPv6:MeshLocalPrefix

頻道

如何從目標執行緒網路中的裝置取得頻道:

  1. 使用 OpenThread CLI:

    channel
    15
    

  2. wpanctl 與 NCP 搭配使用:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. 使用 OTBR 網頁版 GUI,選取 [狀態]。管道會列為與 wpanctl 相似的 NCP:Channel

網路金鑰

Wireshark 會在擷取後使用封包網路解密封包。從目標執行緒網路中的裝置取得網路金鑰的方法如下:

  1. 使用 OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

  2. wpanctl 與 NCP 搭配使用:

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

OTBR Web GUI 不支援執行緒網路金鑰。

Sniffer 選項

選項
-u or --uart
預設值
無 - 如果您使用裝置有序列連線,而非通訊端連線,就必須提供此欄位。
說明
-u--uart 旗標後面接著裝置路徑 (例如 /dev/ttyUSB0)。
-c or --channel
預設值
11
說明
-c--channel 旗標後接在 Thread Network 上設定要接收封包的管道。
--no-reset
預設值
這個標記會覆寫預設行為。
說明
如果 NCP 裝置使用原生 USB 連線連線到主機,則須提供 --no-reset 旗標。
--crc
預設值
這個標記會覆寫預設行為。
說明
TI 和 Nordic Semiconductor Thread 電路板等平台需要 --crc 旗標。這個旗標會重新計算 CRC,以免 Wireshark 顯示「Bad FCS」(訊框檢查序列) 警告。
-b or --baudrate
預設值
115200
說明
-b--baudrate 旗標可用來覆寫預設波特率。將這個值設為與 NCP 版本搭配使用的位元率 (建議設為 460800)。
--rssi
預設值
這個標記會覆寫預設行為。
說明
--rssi 旗標可用來確保 RSSI 輸出內容包含 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 並未啟用這個選項,請勿使用這個標記。

執行 Sniffer

務必針對 NCP 使用特定的裝置路徑,以及要嘗試清除的執行緒網路。

如果按照這份指南操作,您應將 nRF52840 DK 透過偵錯通訊埠附加至主機機器,詳情請參閱Flash nRF52840 中的說明。如要執行 Pyspinel sniffer,請使用 -b 旗標來指定波特率 (如果是預設值) 並省略 --no-reset 旗標。

如果設定 Wireshark 顯示 RSSI,則您必須在執行 sniffer 工具時納入 --rssi 旗標。舉例來說,若要在第 15 頻道使用掛接於/dev/ttyACM0內建 RSSI 設定:

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

現在,您可以在 Wireshark 中查看這項設定的封包及相關通訊協定:

Wireshark 擷取

如要進一步瞭解如何執行 Pyspinel sniffer,請參閱 Spinel sniffer 參考資料

原生 USB 連線

使用 Opennn558840 DK USB 連接埠需要 OpenThreadot-rcp要用來建構USB_trans

./script/build nrf52840 USB_trans
Flash nRF52840 DK、透過 USB 連接埠連接至主機電腦,然後使用--no-reset旗標,但省略-b執行 sniffer 時執行旗標:

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

資源

如需其他 Nordic 工具,請參閱 Nordic Semiconductor - Thread Sniffer 以 nRF52840 和 Wireshark 搭配使用