[Android][Kotlin]AndroidスマホでBluetoothパケットログを取得する方法

今日は、以前に研究した
logcatやコードを書かずに
Bluetooth通信のパケットを取得する方法を記録します。

これらの方法はネット上で多くの人が紹介していますが、
多くはコピー&ペーストや古い情報が多いので、
実際にどうやって行うかを研究しました。
今日はその解説をします。

もし、gattサーバーの接続方法を見たい場合は、こちらをご覧ください。
Cover [Android][Kotlin][2021]Android低功耗藍芽Gatt連線實作教學!

本文開始:

方法1

Step 1 - 開発者モードを有効にする

まず、開発者モードを有効にする必要があります。

Cover

通常はソフトウェア情報内でバージョン番号を数回タップして開発者モードに入りますが、
各メーカーのスマホによって異なる場合があります。
一部のメーカーでは、電話ダイヤル画面で特定のコマンドを入力するか、
他の隠しキーを押す方法があります。
もしうまくいかない場合は、手持ちのスマホの開発者モードの入り方をネットで調べてください。

成功すると、設定内に開発者オプションが表示されます。

Cover

Step 2 - Bluetooth HCIログを有効にする

次に、開発者オプションに入り、
Bluetooth HCIログオプションを有効にします。

Cover

このオプションを有効にすると、
システムがBluetoothのHCIスヌープログを記録します。

ここで問題に直面しました。
古いバージョンのAndroidスマホでは、HCIログが/sdcardや/storageに保存されますが、
新しいバージョンでは異なるパスに保存される可能性があります。
さらに、読み取り権限のないディレクトリに保存されることがあります。

そのため、このファイルがあっても読むことができません。
スマホのroot権限やadb shell su権限がない限り、
簡単に読むことは難しいです。

もし、あなたのスマホが私と同じように読み取り権限のあるディレクトリに保存されていない場合、
以下の手順を参考にしてダンプしてください。

Step 3 - CLIツールADBをインストールする

ADBはAndroid開発でよく使用されるデバッグツールです。
Android Studioをインストールしている場合、
インストールディレクトリのplatform tool内に内蔵されています。

全域で使用したい場合は、環境変数に設定できます。

Android開発の習慣がなく、
単にBluetoothログをテストしたい場合は、以下のURLからダウンロードできます。

Android Platform Toolを見る

Step 4 - スマホを接続し、USBデバッグモードを確認する

開発者モードのUSBデバッグモードが有効になっていることを確認し、
PCに接続されていることを確認します。
以下のコマンドで確認できます。

adb devices

以下のようなメッセージが表示されれば、
接続されています。

List of devices attached
LXXXXXGYPXXCXXXXXX7	device

Step 5 - Bluetooth HCIログファイルをダンプする

ファイルが読み取り権限のない場所に保存されているため、
コマンドを使用してダンプする必要があります。
まず、上記の手順を実行し、
Bluetooth HCIキャプチャを有効にし、
Bluetooth関連の操作を開始して、
システムにログを生成させます。

ここに一小段のシェルスクリプトがあります

直接コピーしてシェルで実行できます
または一行ずつターミナルにコピーして実行することもできます 主に使用するのは

adb bugreport <FileName>

元々ログが保存されているディレクトリを読み取れないため bugreportコマンドを使用します
これにより、現在のAndroidスマートフォン内のシステムログをダンプし
zipファイルに圧縮して現在のディレクトリに保存します そのため、スクリプトではまず/tmpディレクトリにpushdします
ただし、これは個人の使用習慣によるので
自由に変更できます

その後、解凍するだけです

unzip fetchBugReport.zip

bugreportで出力されたデータ
スマートフォン内のログデータが表示されます
その後、関連するログファイルをcatするか
特定のソフトウェアを使用して読み取りにくいファイルを読むことができます

通常、解凍するとフォルダ構造が連結されます 例: FS/data/log/…/btsnoop_hci.log

探しているファイルはBluetoothのログファイルです
ただし、異なるスマートフォンで試したところ
出力されるディレクトリ構造が異なる場合があります
シェルスクリプトをワンクリックで実行できるようにしたい場合
ここを変数にしておくと
ログを簡単に取得できます
例: ここは個人のニーズに応じて書き換え可能です

最後に共有しますが
研究過程で
すべてのスマートフォンがBluetoothのログを生成するわけではないことがわかりました
そのため、これらの不確実性により
パケットを簡単にキャプチャするという元々の考えが
あまり信頼できないものになりました
ただし、この方法を知っておくと
後で使用する場合に損はありません

方法2 - nRF Sniffer + WiresharkでBluetoothパケットをキャプチャ

Step 1 - Pythonとpyserialのインストール

入力

python --version

バージョンが表示されれば
グローバル環境に既にインストールされています

Cover
表示されない場合は

方法1: Python公式サイト からインストール
方法2:brewを使用してインストール
Cover

ターミナルに以下のコマンドを入力して
pyserialをインストールします

pip install pyserial

Successfullyと表示されればインストール成功です

Step 2 - WireSharkのインストール

WireShark公式サイト にアクセスしてインストーラをダウンロードします

Cover

自分のOSに合ったバージョンを選択し
通常のソフトウェアインストールのようにインストールします

Cover

Step 3 - nRF-Sniffer-for-Bluetooth-LEプラグインのインストール

リンクからダウンロードします nRF-Sniffer-for-Bluetooth-LE

必要なバージョンを選択します
バージョンのChangelogはドロップダウンで確認できます

Cover

私は4.1.0をダウンロードしました
ここは自分の必要に応じて選択してください

ダウンロードしたzipを解凍し、extcapフォルダを見つけます

Cover

並打開WireShark のAbout WireShark
mac版的是在應用程式名稱內

Cover

Golbal Extcap Path を見つける

Cover

extcapは wiresharkがプラグインを置くフォルダです
上記でダウンロードしたnRF-Sniffer-for-Bluetooth-LE extcapフォルダ内のファイルをすべてこのフォルダにコピーします

Step 4 - 公式提供のハードウェアを使用してパケットキャプチャを開始する {/examples/}

公式サイトでは、パケットキャプチャを行うために以下のハードウェアが必要とされています

Cover

オンラインで購入するか
既に持っている場合は、コンピュータに挿入してwiresharkを開きます

接続されたソースを見つけて選択します
nRF Sniffer for Bluetooth LE COMXX
これでキャプチャを開始できます

結論
この方法でBluetoothパケットをキャプチャするには、追加のハードウェアが必要なため、少しコストがかかります
したがって、手元に適切なハードウェアがある場合は、この方法を試してみる価値があります

You might also enjoy