このガイドでは、Wireshark を構成して Pyspinel を実行し、Thread ネットワークからパケットをスニフィングする方法について説明します。
Wireshark extcap プラグインを使用してパケット スニッフィングを行うには、extcap を使用したパケット スニッフィングをご覧ください。
スニファ環境を設定する
始める前に、次の手順を行います。
スニファを作成する
ot-rcp
バイナリ出力を使用して、スニファとして機能する NCP デバイスをビルドしてフラッシュします。
Nordic 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
バイナリ出力を 16 進数に変換します。
arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
nRF52840 をフラッシュするで説明されているように、ot-rcp.hex
ファイルを 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 スニファの実行に必要です。
メッシュ ローカル プレフィックス
ターゲット Thread ネットワーク内のデバイスからメッシュ ローカル プレフィックスを取得するには:
OpenThread CLI を使用する場合:
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64NCP で
wpanctl
を使用する:wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"OTBR ウェブ GUI で [ステータス] を選択します。メッシュ ローカル プレフィックスは、
wpanctl
と同様に IPv6:MeshLocalPrefix として表示されます。
チャンネル
ターゲット Thread ネットワーク内のデバイスからチャネルを取得するには:
OpenThread CLI を使用する場合:
channel
15NCP で
wpanctl
を使用する:wpanctl getprop NCP:Channel
NCP:Channel = 15OTBR ウェブ GUI で [ステータス] を選択します。チャンネルは、
wpanctl
と同様に NCP:Channel として表示されます。
ネットワーク キー
Thread ネットワーク キーは、Wireshark がキャプチャ後にパケットを復号するために使用します。ターゲットの Thread ネットワーク内のデバイスからネットワーク キーを取得するには:
OpenThread CLI を使用する場合:
networkkey
33334444333344443333444433334444NCP で
wpanctl
を使用する:wpanctl getprop Network:Key
Network:Key = [33334444333344443333444433334444]
OTBR ウェブ GUI では Thread ネットワーク キーを使用できません。
スニファのオプション
オプション | |||||
---|---|---|---|---|---|
-u or --uart |
|
||||
-c or --channel |
|
||||
--no-reset |
|
||||
--crc |
|
||||
-b or --baudrate |
|
||||
--rssi |
|
||||
--tap |
|
スニファを実行する
NCP の特定のデバイスパスと、スニファリングしようとしている Thread ネットワークのチャネルを使用していることを確認してください。
このガイドに沿って作業する場合は、nRF52840 のフラッシュで説明されているように、nRF52840 DK をデバッグポートでホストマシンに接続する必要があります。Pyspinel スニファを実行するには、-b
フラグを使用してボーレートを指定します(デフォルトから変更した場合)。--no-reset
フラグは省略します。
RSSI を表示するように Wireshark を構成する場合は、スニファツールを実行するときに --rssi
フラグも含める必要があります。たとえば、/dev/ttyACM0
にマウントされたデバイスを使用してチャネル 15 をスニフし、Wireshark の出力に RSSI を含めるには、次のコマンドを使用します。
cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -
Wireshark で、この構成のパケットと関連プロトコルを確認できるようになりました。
Pyspinel スニファの実行の詳細については、Spinel スニファのリファレンスをご覧ください。
ネイティブ 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 -
リソース
その他の Nordic ツールについては、Nordic Semiconductor - Wireshark を使用した nRF52840 ベースの Thread Sniffer をご覧ください。