Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Pyspinelによるパケットスニッフィング

Pyspinel無差別パケットスニファにスレッドNCP又はRCPデバイスと変換それにスニファツールコネクトは、保存またはWiresharkの中に直接パイプされるPCAP(パケットキャプチャ)ストリームを生成します。

Wiresharkは、IEEE 802.15.4、6LoWPAN、IPv6、MLE(メッシュリンク確立)、UDP、CoAPなどのスレッドスタック内のネットワークプロトコルをデコードできるオープンソースツールです。

このガイドでは、Wiresharkを構成し、Pyspinelを実行してスレッドネットワークからのパケットをスニッフィングする方法について説明します。

スニッフィングパケットのWiresharkのEXTCAPプラグインを使用するには、参照EXTCAPを使用してパケットスニッフィングを

要件

ハードウェア:

  • NCPとして機能し、PyspinelとWiresharkを実行するホストマシン:
    • macOS —64ビットOSX10.6以降
    • Ubuntu
  • 1つのOpenThread装置はでフラッシュot-ncp-ftdまたはot-rcpビルド。

ソフトウェア:

  • Pythonの3 Pyspinelを実行するための
  • Wiresharkの 2.4.1以降スレッドのプロトコルのサポートのために

インストール

スニファー環境をセットアップする

Pyspinelと依存関係のクローンを作成してインストールします。

  1. 依存関係をインストールします。
    sudo apt install python3-pip
    pip3 install --user pyserial ipaddress
  2. クローンPyspinelリポジトリ:
    git clone https://github.com/openthread/pyspinel
  3. Pyspinelのインストール:
    cd pyspinel
    python3 setup.py install

また、インストールすることで、環境を設定pyspinelパッケージを。このパッケージが使用することに注意してくださいPyspinelのv1.0.0a3リリースではなく、最新のPyspinelメインに。

pip3 install --user pyspinel

Wiresharkをインストールします

Linux

ターミナルを開き、次のコマンドを実行してWiresharkをダウンロードしてインストールします。

sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt-get update
sudo apt-get install wireshark

非rootユーザーとしてWiresharkを実行することをお勧めします。これを行うには、パッケージを再構成します。

sudo dpkg-reconfigure wireshark-common

あなたが得るとき、ダイアログは、「万一の非スーパーユーザがパケットをキャプチャすることができる?」尋ね、[はい]を選択し、その後、追加wiresharkユーザーと更新ファイルのパーミッションを:

sudo adduser $USER wireshark
sudo chmod +x /usr/bin/dumpcap

マックOS

WiresharkのをダウンロードしてインストールMacOSのために。

スニファーを構築する

使用して、スニファとして機能するNCP装置ビルドおよびフラッシュot-rcpバイナリ出力。

北欧のnRF52840

スニファとして使用するためにNordicnRF52840の例を設定するには:

  1. ビルド環境までクローンopenthread / OT-nrf528xxとセット:
    git clone https://github.com/openthread/ot-nrf528xx --recursive
    ./script/bootstrap
    
  2. 460800.として設定ボーレートは、ライン検索#define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200src/nrf52840/transport-config.h 、とに置き換える#define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800
  3. :バイナリのビルド
    ./script/build nrf52840 UART_trans
    
  4. 変換ot-rcp :六角へのバイナリ出力を
    arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
    
  5. フラッシュot-rcp.hexで詳述するようにnRF52840ボードにファイルをフラッシュnRF52840
  6. 無効にマスストレージデータ破損の問題を回避するために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スニファーの実行に必要になります。

メッシュローカルプレフィックス

ターゲットスレッドネットワーク内のデバイスからメッシュローカルプレフィックスを取得するには、次の手順に従います。

  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を使用して、ステータスを選択します。メッシュローカルプレフィックスは、IPv6と表示されている:に似MeshLocalPrefix wpanctl

チャネル

ターゲットスレッドネットワーク内のデバイスからチャネルを取得するには、次の手順に従います。

  1. OpenThread CLIを使用した:
    channel
    15
    
  2. 使用wpanctl NCPで:
    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    
  3. OTBRのWeb GUIを使用して、ステータスを選択します。チャンネルはNCPとしてリストされていますとチャンネルが同様のwpanctl

ネットワークキー

スレッドネットワークキーは、キャプチャ後にパケットを復号化するためにWiresharkによって使用されます。ターゲットスレッドネットワーク内のデバイスからネットワークキーを取得するには、次の手順に従います。

  1. OpenThread CLIを使用した:
    networkkey
    33334444333344443333444433334444
    
  2. 使用wpanctl NCPで:
    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

スレッドネットワークキーは、OTBR WebGUIでは使用できません。

Wiresharkの構成-プロトコル

Wiresharkは、スレッドパケットを正しく表示するように構成する必要があります。

環境設定... Wiresharkの中を選択し、[プロトコル]セクションを展開します。

6LoWPAN

プロトコルのリストから、6LoWPANを選択し、以下の設定を確認または変更します。

  1. RFC 4944によるチェックを外し派生ID。
  2. ターゲット・スレッドのネットワークのためのメッシュローカルプレフィックスと更新コンテキスト0。
OTスニファーWireshark6LoWPAN

Wiresharkは、コンテキスト構成を使用して、圧縮されたIPv6アドレスを解析し、IPv6の送信元アドレスと宛先アドレスを正しく表示します。

ゲートウェイに設定されている他のオンメッシュプレフィックスのアドレスを表示するには、他のコンテキストIDをそれらのプレフィックスで更新します。

特定のオンメッシュプレフィックスのコンテキストIDを取得するには、MLEデータ応答メッセージでスレッドネットワークデータTLVを表示します。例えば:

Context 1: fd00:7d03:7d03:7d03::/64

CoAP

プロトコルとセットCoAP UDPポートのリストから61631.に選択CoAP(アドレス送信請求など)この性を保証TMFメッセージが表示されます。

IEEE 802.15.4

プロトコルのリストから、IEEE 802.15.4を選択し、以下の設定を確認または変更します。

  1. 「0x809a」に(16進数)802.15.4イーサタイプを設定します。
  2. 「AES-128暗号化、32ビットの整合性の保護」にセキュリティ・スイートを設定します。
  3. あなたの隣のパケット復号化にスレッドネットワークマスターキーを追加された復号鍵編集...]ボタンをクリックしてください。
    1. 復号鍵を追加するには+をクリックします。
    2. 復号キー列にスレッドネットワークマスターキーを入力します。
    3. 復号鍵インデックスとして「1」を入力します。
    4. キーハッシュ列リストボックスからスレッドのハッシュを選択します。
    5. OT Sniffer Wireshark IEEE 802.15.4
    6. 復号鍵を保存するには、[OK]をクリックします。

スレッド

プロトコルのリストからスレッドを選択し、以下の設定を確認または変更します。

  1. スレッドのシーケンスカウンタは、「00000000」と入力します。
  2. チェックを外して使用PAN IDとして最初にマスターキーの2つのオクテット
  3. スレッドのシーケンスカウンタを取得し、自動的に確認してください。

任意のプロトコルの変更を保存するには、[OK]ボタンをクリックします。

一部のスレッドトラフィックは、ZigBeeプロトコルとして分析される場合があります。これらの2つのプロトコルを正しく表示するには、Wiresharkで有効なプロトコルを編集します。

  1. Wiresharkのでは、>有効なプロトコルを分析するために行きます。
  2. 次のプロトコルのチェックを外します。
    1. LwMesh
    2. ZigBee
    3. ZigBeeグリーンパワー

Wiresharkの構成-RSSI

WiresharkでRSSIを表示するには:

  1. 環境設定>プロトコル> IEEE 802.15.4に移動します。
  2. FCSの書式を設定します。
    • TI CC24xxメタデータ:IEEE 802.15.4 TAP無効になった場合。
    • もしIEEE 802.15.4 TAPは有効:ITU-T CRC-16を。 参照--tapフラグを詳細については。
  3. 保存し、設定メニューに戻るには、[OK]をクリックします。
  4. 環境設定から、外観>列を選択します。
  5. 新しいエントリを追加します。
    • タイトル:RSSI
    • タイプ:カスタム
    • フィールド:wpan.rssi
OT Sniffer Wireshark RSSI

スニファオプション

オプション
-u or --uart
デフォルト値
なし-ソケット接続ではなくシリアル接続のデバイスを使用している場合は、指定する必要があります。
説明
-uまたは--uartフラグのようなデバイスパスが続く/dev/ttyUSB0
-c or --channel
デフォルト値
11
説明
-cまたは--channelフラグがスニフパケットに、その上に、あなたのスレッドネットワーク上の構成されたチャネルが続きます。
--no-reset
デフォルト値
このフラグは、デフォルトの動作をオーバーライドします。
説明
--no-resetごNCPデバイスがネイティブUSB接続でホストに接続されている場合フラグが必要とされています。
--crc
デフォルト値
このフラグは、デフォルトの動作をオーバーライドします。
説明
--crcフラグは、TIや北欧の半導体スレッドボードなどのプラットフォームのために必要とされています。フラグはCRCを再計算して、Wiresharkでの「BadFCS」(フレームチェックシーケンス)警告を回避します。
-b or --baudrate
デフォルト値
115200
説明
-bまたは--baudrateフラグがデフォルトのボーレートを上書きするために使用されます。あなたに使用したのと同じボーレートにこの値を設定NCPビルド(私たちは460800をお勧めします)。
--rssi
デフォルト値
このフラグは、デフォルトの動作をオーバーライドします。
説明
--rssiフラグは、RSSIがPCAP出力に含まれていることを確認するために使用されます。場合は、このフラグを使用する必要がありTI CC24xx FCSフォーマットオプションはWiresharkの中で有効になっています。
--tap
デフォルト値
このフラグは、デフォルトの動作をオーバーライドします。
説明
--tapフラグ指定DLT_IEEE802_15_4_TAP(283)例えば、FCS、RSSI、LQI、チャネルのような)メタデータとTLVを含む疑似ヘッダとフレームフォーマットのため、。指定されていない場合は、 DLT_IEEE802_15_4_WITHFCS(195) TI CC24xx FCS形式のように、直接PHYフレームを次の追加のRSSIおよびLQIにデフォルトで使用されます。場合は、このフラグを使用する必要があり、ITU-T CRC-16オプションはWiresharkの中で有効になっています。そのオプションがWiresharkで有効になっていない場合は、このフラグを使用しないでください。

スニファーを実行します

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

このガイドを、以下の場合で説明したように、nRF52840 DKは、デバッグポートにより、ホスト・マシンを接続する必要がありますフラッシュnRF52840 。 Pyspinelスニファを実行するには、使用-b (それがデフォルトから変更された場合)ボー・レートを指定するフラグを省略し、 --no-resetフラグを。

例えば、デバイスを使用してチャネル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でこの構成のパケットと関連プロトコルを確認できるようになります。

Wiresharkキャプチャ

参照してくださいスピネルスニファ参照Pyspinelスニファを実行の詳細については。

ネイティブUSB接続

OpenThread nRF52840 DKのUSBポートが必要です使い方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 -

資力

PyspinelとWiresharkの使用方法の詳細については、以下を参照してください。