この記事は?
地味にやり方がわからず躓いた、nRFのBLE SnifferでCentral-Peripheral間の通信をキャプチャする方法を書きます。
環境
@KentaHarada様による以下記事の手順で、XIAO-nRF52840のBLE Sniffer化、Wiresharkのセットアップが実施できます。(ありがとうございます)
私は以下環境で検証しました。
- PC:
- OS: Windows11 Home
- Wireshark: v4.4.2
- Sniffer:
- ハード: seeed XIAO-nrf52840 ※1
- ソフト: nRF Sniffer for Bluetooth LE v4.1.1 ※2
※1: おそらくnordic製のSnifferでも同様に実施できますが、持っていないため未検証です。
※2: 上記記事の手順に従い、uf2形式に変換して書き込みました。
手順
Advertisement Packetのキャプチャ
SnifferをPCに接続してWiresharkを起動し、キャプチャ対象のインタフェースとしてnRF Sniffer for Bluetooth LEを選択します。
すると、SnifferがキャプチャしたAdvertisement Packetが次々と表示されます。
補足:電波強度に応じたフィルタリング
このままでもキャプチャは実施できるのですが、たいていの場合キャプチャされるパケットが多くて見づらいので、フィルタをかけてやった方がいいです。
キャプチャしたパケットのうち、電波強度が一定以上のもののみ表示させるには、Wireshark上部のフィルタ入力欄に以下のように入れます。
nordic_ble.rssi >= [電波強度]
閾値の電波強度は環境に応じて設定してください。(感覚的には-35から-45くらいで設定するとうまくいきます。)
その他使用できるフィルタは下記サイトに例示されています。
Connection後のパケットのキャプチャ
初期設定のままですと、以下のように接続要求(CONNECT_IND
)パケットは表示されますが、それ以降のCentral-Peripheral間の通信は表示されません。
接続要求以降のパケットをキャプチャするには、Wireshark上部のDevice Listでキャプチャ対象のデバイスを選択していることと、デバイスを選択した状態で機器同士の接続が確立されることが必要です。
nordicのBLE Snifferは、Advertisementパケットのみをキャプチャするモード(デフォルト)と、特定のデバイスのCentral-Peripheral間の通信パケットをキャプチャするモードの、2つの動作モードがあります。
適切な操作をしない場合、デフォルトのモードのまま動作するため、コネクション確立後のパケットはキャプチャされません。
参考:
このため、まずキャプチャしたいCentralとPeripheralが接続されていない状態で、Device Listのボックスから対象の機器(主にはAdvertiseしているPeripheral)を選択し、(画像だとデバイス名が文字化けしてますが・・・)
そのあとにCentral-Peripheral間の接続確立操作をしてください。
Wiresharkが接続要求(CONNECT_IND
)パケットをキャプチャすると、自動的にCentral-Peripheral間の通信をキャプチャするモードに切り替わります。
CONNECT_IND
のパケットをSnifferが取り逃がしてしまった場合はモードが切り替わらないので、もし正しくキャプチャされない場合はいったん接続を切断し、再接続するところからやり直してください。
参考