このガイドでは、Thread ネットワークからパケットを盗聴するように Wireshark を構成し、Pyspinel を実行する方法について説明します。
パケット スニッフィングに Wireshark の extcap プラグインを使用するには、extcap を使用したパケット スニッフィングをご覧ください。
スニッファ環境を設定する
開始する前に、次の手順を行います。
スニッファをビルドする
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
バイナリ出力を 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.
スレッド ネットワーク プロパティ
続行する前に、スニッフィングするスレッド ネットワークの次のプロパティを取得します。これは、Wireshark の構成と Pyspinel スニッファの実行に必要です。
メッシュ ローカル プレフィックス
ターゲット Thread ネットワーク内のデバイスからメッシュ ローカル プレフィックスを取得するには:
OpenThread CLI の使用:
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64wpanctl
を NCP に使用する:wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"OTBR ウェブ GUI を使用して、[ステータス] を選択します。メッシュのローカル プレフィックスは、
wpanctl
と同様に IPv6:MeshLocalPrefix として一覧表示されます。
チャンネル
対象スレッド ネットワークのデバイスからチャンネルを取得するには:
OpenThread CLI の使用:
channel
15wpanctl
を NCP に使用する:wpanctl getprop NCP:Channel
NCP:Channel = 15OTBR ウェブ GUI を使用して、[ステータス] を選択します。このチャネルは、
wpanctl
のように NCP:Channel として表示されます。
ネットワーク キー
Thread ネットワークキーは、キャプチャ後にパケットを復号するために Wireshark によって使用されます。ターゲット Thread ネットワーク内のデバイスからネットワーク キーを取得するには:
OpenThread CLI の使用:
networkkey
33334444333344443333444433334444wpanctl
を NCP に使用する:wpanctl getprop Network:Key
Network:Key = [33334444333344443333444433334444]
スレッド ネットワーク キーは、OTBR ウェブ GUI では使用できません。
スニッファ オプション
オプション | |||||
---|---|---|---|---|---|
-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
フラグも指定する必要があります。たとえば、Wireshark の出力に含まれる RSSI とともに /dev/ttyACM0
にマウントされたデバイスを使用して、チャンネル 15 でスニッフィングを行うには:
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 Semiconductor - nRF52840 と Wireshark に基づく Thread スニッファを参照してください。