IoT何をいまさら(56) BLE SniffingツールでWireshark

JosephHalfmoon
JosephHalfmoon

前回は、Bluetoothインタフェースを搭載しているラズパイ(Raspberry Pi3 model B)上で動かしたWiresharkを使って、M5Stackが垂れ流すBLEのアドバタイジング・パケットをキャプチャできることを確かめました。同じことをPC上でもやりたい。そこで購入させてもらったのが、USBドングル型のBLEパケットの検出用ツール、Adafruit社のBluefruit LE Snifferというものです。これを使ったらPCでもキャプチャはバッチリ?

購入は、この前もUSBドングル型の電流メータを購入させてもらったSWITCHSCIENCE社から。現物写真は冒頭のアイキャッチ画像を御覧ください。同社のHPからリンクをたどれば、インストールに必要なドキュメント等はたどれます。今回、頼りにしたのは

introducing-the-adafruit-bluefruit-le-sniffer.pdf

というドキュメントなのですが、そこの手順を若干「勝手にアップデート」してインストールを行いました。まず最初のステップは、このUSBドングルがCOMポートに見えるようにUSBシリアルドライバのインストールです。どうもボードに2つのバージョンがあるようで、「黒色」ボードなら、SILICON LABS社のCP2104ドライバ、「青色」ボードならFTDI社のFT231xドライバを導入しておくように書いてあります。購入したのは「黒色」なのですが、どちらのドライバもインストール済(マイコンツールではどちらも定番)なので、ここはパス。BLE-snifferドングルを差し込めば、COMポートとして認識されました。

ドングル上に書き込むファームウエアのアップデートは、こちらもパス。購入状態のままとしました。

そして次は、肝心のBLEを制御するNORDIC社 nRF51822、BLE無線マイコンと呼んでよいでしょう、とWiresharkの間をつないでくれるNORDIC社提供のソフトウエアをインストールです。肝心なことは、PC上にインストールしたWiresharkは外部提供のキャプチャのためのAPIを所定のフォルダ内で探すので、そこに必要なファイルを置いておかないといけない、ということです。実際のロケーションはWiresharkのメニューから

ヘルプ>Wiresharkについて>フォルダ(タブ)

を選択すれば、Global Extcap pathとしてextcapフォルダへのパスを知ることができます。そこに書き込むべきなのはPythonでかかれたAPI群です。しかし、上記のPDFファイルには、Python2でないとそいつらは動かないので、Python27入れろ、みたいなことが書いてあったのです。流石に今年は2020年、Python27はないでしょう、と思いました。(実は、まだPC上にはPython27も残してはいるのですが、普段使いは昨秋よりPython38にスイッチ済です。)

NORDIC社のダウンロードサイトを見れば、3つのバージョンが見つかりました。一番古い1.0を除き、2.0.0というバージョンのものが上記のPDF相当のもののようです。3.0.0というバージョンのものがPython3対応のものでした。(なお、3.0.0はPython3のみでしか動作しないようです)

  • nrf_sniffer_for_bluetooth_le_2.0.0_c87e17d.zip
  • nrf_sniffer_for_bluetooth_le_3.0.0_129d2b3.zip

ここでは迷わず、Python3対応の3.0.0の方を解凍しその中のextcapフォルダ内のファイルをWiresharkの対応フォルダにコピーしました。なお、忘れずに

pyserial 3.4以上

がインストールしてあることを確認。私の環境ではPython27にはpyserial入っていたのに、python3側には無かったのでpip3しました。複数バージョンを並置していると、ときどきありますかね、そういうことが。

さて、設定を済ませてWiresharkを起動すれば、こんな感じ。ちゃんと、一番下に nRF Sinffer for Bluetooth LE が見えています。Wireshark, BLE Sniffer

M5Stackには、テスト用に2投稿前と同じアドバタイジング・パケットを垂れ流しておいてもらい、キャプチャをかけてみます。

キャプチャを止めて、ソースアドレスでソートすれば、M5Stack(チップはEspressif製なのでアドレスの上位がEspressiとなっている)のアドバタイジング・パケットが列挙されてきます。Capture the advertising packet

Length4オクテッド(まあ、実際この環境ではオクテッド=8ビット=バイトな関係)、そしてテスト用のManufacture Specificを示す0xff、テスト用のCompanyID 0xfffffという具合で読めとります。前々回手動でやり、前回ラズパイでやったのと同じことがPCでもできました。

さて、蛇足ですが、今回使用したUSBドングルタイプのBLE Snifferと、BBC micro:bit、MCUは同じNordic製 nRF51822です。兄弟?の近影はこちら。

nRF51822_boards

IoT何をいまさら(55) ラズパイWiresharkでBLEパケット解析 へ戻る

IoT何をいまさら(57) M5Stack、ENV UNITへ進む