Bluefruit LE Snifferを使って、二つのBLEデバイス間のデータをキャプチャーし、WiresharkでBLEプロトコル解析をしました。

動作環境

Bluefruit LE Snifferとパソコンとの接続

Bluefruit LE SnifferとパソコンとをUSBケーブルで次のように接続します。

Bluefruit LE Snifferとパソコンとの接続

デバイスマネージャで確認すると次のように「Silicon Labs CP210x USB to UART Bridge」として認識します。

Bluefruit LE Snifferからのキャプチャデータを使用するためのWiresharkの設定

Bluefruit LE SnifferからUSBケーブル経由で入力されるキャプチャデータをWiresharkで受け取りBLEプロトコル解析を行います。Wiresharkの設定は次の手順で行います。なお、WiresharkとPython 3.8.0はすでにインストールされているものとします。

Bluefruit LE Snifferのダウンロードサイト「nRF Sniffer for Bluetooth LE」からPython 3用の「nrf_sniffer_for_bluetooth_le_3.0.0_129d2b3」をダウンロードします。

Wiresharkの次のフォルダにダウンロードした次のフォルダをコピーします。

  • Wiresharkのフォルダ「extcap」にダウンロードした次のフォルダ「extcap」の内容
  • Wiresharkのフォルダ「profiles」にダウンロードした次のフォルダ「Profile_nRF_Sniffer_Bluetooth_LE」

Bluefruit LE Snifferでパケットをキャプチャするためには、Pythonスクリプトが動作する環境が必要になります。そのほかにライブラリ「pyserial」を次のコマンドでインストールします。

>pip install pyserial

Pythonスクリプトが動作することを確認するために、フォルダ「extcap」に移動して以下のコマンドを実行します。

>python nrf_sniffer_ble.py  --extcap-interfaces
extcap {version=3.0.0}{display=nRF Sniffer for Bluetooth LE}{help=https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Sniffer-for-Bluetooth-LE}
interface {value=COM3}{display=nRF Sniffer for Bluetooth LE COM3}
control {number=0}{type=selector}{display=Device}{tooltip=Device list}
control {number=1}{type=string}{display=Passkey / OOB key}{tooltip=6 digit temporary key or 16 byte Out-of-band (OOB) key in hexadecimal starting with '0x', big endian format. If the entered key is shorter than 16 bytes, it will be zero-padded in front'}{validation=\b^(([0-9]{6})|(0x[0-9a-fA-F]{1,32}))$\b}
control {number=2}{type=string}{display=Adv Hop}{default=37,38,39}{tooltip=Advertising channel hop sequence. Change the order in which the siffer switches advertising channels. Valid channels are 37, 38 and 39 separated by comma.}{validation=^\s*((37|38|39)\s*,\s*){0,2}(37|38|39){1}\s*$}{required=true}
control {number=3}{type=button}{role=help}{display=Help}{tooltip=Access user guide (launches browser)}
control {number=4}{type=button}{role=restore}{display=Defaults}{tooltip=Resets the user interface and clears the log file}
control {number=5}{type=button}{role=logger}{display=Log}{tooltip=Log per interface}
value {control=0}{value= }{display=All advertising devices}{default=true}

Wiresharkを起動すると次の画面が表示されます。

Wireshark起動画面

Bluefruit LE Snifferを使用したBLEプロトコル解析

BLEプロトコル解析を行うときは、次のようのCentralとPeripheral間にBluefruit LE Snifferを配置します。

動作確認するために、Centralにパソコン、Peripheralにアルプスのセンサネットワークモジュールを使用し、「C# .NET Frameworkを使ってアルプスのセンサネットワークモジュールからモーションデータの取得」で作成したC#プログラムを実行すると、次のようにパケットが取得できました。パケットはコマンドを表示しています。

Bluefruit LE Snifferの動作確認

メニュー下側の「表示フィルタ」に次のように「btatt<Enter>」を入力すると、Bluetooth Attribute Protocolのパケットのみ取得できます。

他には、btatt.opcode == 0x12で送ったパケットのみ、btatt.opcode == 0x1bで通知されたパケットのみ取得できます。

取得したデータをパケット解析した状態で保存したいときは、「ファイル」→「エキスパートパケット解析」→「プレインテキストとして…」を選択すると次のダイアログが出るので、すべてのパケットを解析するために、右側下の「Packet Format」で「Packet details」→「all Expand」を選択する。