Infinito Nirone 7

白羽の矢を刺すスタイル

iOS: PacketLogger を使わずに Bluetooth のパケットを CLI でキャプチャする

パケットキャプチャのためだけに PacketLogger アプリを立ち上げるのが面倒、あるいは Wireshark のほうが便利だ、とにかく CLI で完結したい、など。 実際には準備段階でどうしても避けられない手順があるが、それを除けば CLI でいい具合に Bluetooth のパケットキャプチャが可能。

準備

Bluetooth プロファイルを iOS にインストールする

面倒だが仕方がない。次のページから iOS 用の Bluetooth プロファイルをダウンロードし、設定画面でインストール手順を実行する。

developer.apple.com

このプロファイルは24時間で有効期限が切れてしまうので、前回のインストールから24時間経過している場合は再度インストールが必要。 面倒だが仕方がない。

libimobiledevice をインストールする

brew でサクッと。 このうち idevicebtlogger コマンドを使って Bluetooth パケットをキャプチャする。 stdout に吐き出すとバイナリが出てくるので、次の Wireshark のコマンドをかませて human readable にする。 Wireshark 上で見たいときは stdout ではなくファイルに保存すれば良い。

Wireshark をインストールする

brew でサクッと。 これで tshark コマンドがインストールされ、idevicebtlogger が出力する内容をテキストで読めるようになる。

CLI で Bluetooth のパケットを見る

1つのパケットを1行におさまるようなサマリーを見る場合。

$ idevicebtlogger -u <device_udid> -f pcap - | tshark -t ad -i -

すべてのパケットの詳細を全部出す場合。

$ idevicebtlogger -u <device_udid> -f pcap - | tshark -V -t ad -i -

Bluetooth のパケットをファイルに保存する場合

tshark はかませず、output 先のファイルを指定すればよい。

$ idevicebtlogger -u <device_udid> -f pcap foo.pcap

どうしても PacketLogger で読みたい場合はフォーマットの指定をせず、拡張子を .pklg にして保存すれば PacketLogger で読める。

$ idevicebtlogger -u <device_udid> foo.pklg