使用 Pyspinel 進行封包取樣

前往 GitHub 查看原始碼

本指南說明如何設定 Wireshark 和執行 Pyspinel 以清理封包 來自 Thread 網路

如要使用 Wireshark extcap 外掛程式進行封包側錄,請參閱 Packet Sniffing 使用 extcap

設定 Sniffer 環境

在開始之前,請先完成下列步驟:

打造蛇

使用 ot-rcp 二進位檔輸出內容,建構並刷新 NCP 裝置做為 Sniffer。

北歐 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 行 並替換為 #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800src/nrf52840/transport-config.h

建構二進位檔:

./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 本機前置字串:

  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 並選取「Status」(狀態)。這裡列出了網格本機前置字串 類似於 wpanctlIPv6:MeshLocalPrefix

頻道

如要從目標 Thread 網路的裝置取得頻道:

  1. 使用 OpenThread CLI:

    channel
    15
    

  2. wpanctl 與 NCP 搭配使用:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. 使用 OTBR Web GUI 並選取「Status」(狀態)。頻道顯示方式為 NCP:Channelwpanctl 類似。

網路金鑰

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 網路中 以便擷取封包
--no-reset
預設值
此標記會覆寫預設行為。
說明
如果您的 NCP,就必須使用 --no-reset 旗標 裝置是透過原生 USB 連線至主機 以獲得最佳效能和最安全的連線
--crc
預設值
此標記會覆寫預設行為。
說明
以下平台需要 --crc 旗標: TI 及北歐半導體討論串板。旗幟 重新計算 CRC,以免發生「FCS 錯誤」(頁框檢查 序列) 警告。
-b or --baudrate
預設值
115200
說明
使用了 -b--baudrate 旗標 以覆寫預設傳輸速率將這個值設為相同的值 NCP 採用的垃圾郵件比率 build (建議使用 460800)。
--rssi
預設值
此標記會覆寫預設行為。
說明
--rssi 旗標可用來確保 RSSI 為 已包含在 pcap 輸出中如果 TI CC24xx FCS Wireshark 已啟用格式選項。
--tap
預設值
此標記會覆寫預設行為。
說明
--tap 旗標會指定 DLT_IEEE802_15_4_TAP(283) 代表影格格式。 虛擬標頭,內含包含中繼資料的 TLV (例如 FCS、RSSI、LQI、頻道)。如未指定 「DLT_IEEE802_15_4_WITHFCS(195)」將會用於 含有額外的 RSSI 和 LQI,且隨後會預設使用 跟 TI CC24xx FCS 格式一樣。如果 ITU-T CRC-16 系統會在 Wireshark 中啟用選項。如果未啟用該選項 ,請勿在 Wireshark 中使用這個標記。

執行 Sniffer

請務必使用 NCP 的特定裝置路徑和 你要監控的 Thread 網路。

如果按照本指南操作,nRF52840 DK 應透過 偵錯通訊埠,如 Flash nRF52840。如要執行 Pyspinel Sniffer 使用 -b 標記指定資產的傳輸率 (如果原先變更的率) 並省略 --no-reset 旗標

如果「設定 Wireshark」顯示 RSSI,則必須一併包含 --rssi 旗標。例如,如要在頻道 15 上使用 裝置是掛接在 /dev/ttyACM0,且 RSSI 包含在 Wireshark 輸出內容中:

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

現在,您應該已經能夠檢視這個應用程式的封包和相關通訊協定了。 設定:

Wireshark 拍攝

請參閱 Spinel Sniffer 參考資料 進一步瞭解如何執行 Pyspinel Sniffer。

原生 USB 連線

使用 nRF52840 DK USB 連接埠時,OpenThread ot-rcp 二進位檔必須 使用 USB_trans 建構:

./script/build nrf52840 USB_trans
敬上 刷新 nRF52840 DK,並使用 USB 將其連接至主機電腦 通訊埠,然後使用 --no-reset 旗標 但在執行 sniffer 時省略 -b 旗標:

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

資源

如需其他北歐工具,請參閱北歐半導體 — Thread 以 nRF52840 為基礎 (搭配 Wireshark) 的 Sniffer