Pyspinel でのパケット スニッフィング

<ph type="x-smartling-placeholder"></ph> GitHub のソースを表示

このガイドでは、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 に設定します。#define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 という行を探します。 これを src/nrf52840/transport-config.h に追加し、#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

次の手順に従って、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 ネットワークの次のプロパティを取得します。 盗み見ます。Wireshark の構成と Pyspinel の実行に必要です。 検出します。

メッシュ ローカル接頭辞

ターゲット Thread ネットワーク内のデバイスからメッシュ ローカル接頭辞を取得するには:

  1. OpenThread CLI を使用する場合:

    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    

  2. NCP で wpanctl を使用する場合:

    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    

  3. OTBR Web GUI を使用して、[Status] を選択します。[Mesh Local Prefix] に IPv6:MeshLocalPrefix の形式です(例: wpanctl)。

チャンネル

ターゲット Thread ネットワーク内のデバイスからチャンネルを取得するには:

  1. OpenThread CLI を使用する場合:

    channel
    15
    

  2. NCP で wpanctl を使用する場合:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. OTBR Web GUI を使用して、[Status] を選択します。チャンネルは NCP:Channelwpanctl に類似)。

ネットワークキー

スレッド ネットワーク キーは、Wireshark がパケットを復号してから 作成します。ターゲット Thread ネットワーク内のデバイスからネットワーク キーを取得するには:

  1. OpenThread CLI を使用する場合:

    networkkey
    33334444333344443333444433334444
    

  2. NCP で wpanctl を使用する場合:

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

Thread ネットワーク キーは、OTBR Web GUI では使用できません。

スニファー オプション

オプション
-u or --uart
デフォルト値
なし - 以下を搭載したデバイスを使用する場合は指定する必要があります。 ソケット接続ではなく、シリアル接続を使用します。
説明
-u または --uart フラグに続いて、 /dev/ttyUSB0 などのデバイスパス。
-c or --channel
デフォルト値
11
説明
-c または --channel フラグが後に続く チャンネルによって設定されるしきい値です。 パケットをスニッフィングできます
--no-reset
デフォルト値
このフラグはデフォルトの動作をオーバーライドします。
説明
NCP が構成されている場合、--no-reset フラグは必要です。 デバイスがネイティブ USB でホストに接続されているか 接続します
--crc
デフォルト値
このフラグはデフォルトの動作をオーバーライドします。
説明
--crc フラグは、次のようなプラットフォームに必要です。 TI および Nordic Semiconductor スレッドボード。フラグ CRC を再計算して「Bad FCS」を回避(フレーム チェック) Wireshark で警告が表示されます。
-b or --baudrate
デフォルト値
115200
説明
-b または --baudrate フラグが使用されている デフォルトのボーレートをオーバーライドできます。この値を同じ値に設定すると、 NCP で使用されるボーレート build(460800 を推奨します)。
--rssi
デフォルト値
このフラグはデフォルトの動作をオーバーライドします。
説明
--rssi フラグを使用して RSSI を 含まれるようになります。このフラグは、 TI CC24xx FCS format オプションが有効になっていることを確認します。
--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 形式で転送されます。このフラグは、 ITU-T CRC-16 オプションが有効になっていることを確認します。このオプションが有効になっていない場合は Wireshark では、このフラグを使用しないでください。

スニファーを実行する

NCP には特定のデバイスパスを、NCP にはチャネルを使用してください。 スニッフィングしようとしている Thread ネットワーク。

このガイドに従う場合、nRF52840 DK は次の方法でホストマシンに接続する必要があります。 行います(プログラムをフラッシュする nRF52840。Pyspinel スニファーを実行するには -b フラグを使用してボーレートを指定する(デフォルトから変更されている場合) --no-reset フラグを省略します。

RSSI を表示するように Wireshark を設定する場合は、--rssi も含める必要があります。 フラグを指定します。たとえば、チャンネル 15 をスニッフィングするには、 Wireshark 出力に含まれる RSSI を使用して /dev/ttyACM0 にマウントされているデバイス:

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

目的のパケットと関連するプロトコルを表示できるようになります。 Wireshark での構成:

Wireshark キャプチャ

詳しくは、Spinel スニファー ツール 参照: Pyspinel スニファーの実行に関する リンク先をご覧ください

ネイティブ 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 — Thread をご覧ください。 nRF52840 と Wireshark をベースにしたスニッファー