コマンドライン版のパケットキャプチャソフト「tshark」をRaspberry Pi 3で起動し、Raspbery Pi 3に標準でインストールされているBluethoothと、SensorTag間のBluetooth Low Energy(BLE)パケットをキャプチャし、
「Specification of the Bluetooth system Core_v4.2」に基づきパケット構造を解析します。なお斜体文字はSpecification of the Bluetooth systemの項番を示し、各パケット構造図については、対応する仕様書の項番からキャプチャしています。
tshark使用してスキャンのBLEパケットのキャプチャ
「tsharkでキャプチャしたBLEパケット」に従って、最初に、tsharkを次のコマンドで起動ます。
$ sudo tshark -i 5 -x -V -w log
次のhcitool コマンドでスキャンを行い、SensorTagの側面のスイッチを押してアドバタイズします。
$ sudo hcitool lescan
tsharkを停止して、収集したログをWindows版Wiresharkで読み込ませます。次の6フレームがキャプチャされます。
BLEのスキャンからアドバタイズまでのパケットシーケンスを次に示します。
HCI UARTトランスポートレイヤー
UARTの場合、フレームの種類を表わすオクテットがあり、続いて実際のデータがあります。
- HCI packet indicator (8ビット)
- HCI packet (任意長)
indicatorは、フレームの種類(4種類)に応じて、次のように定義されています。
tsharkでキャプチャしたBLEパケットには、HCI Packet typeが
「HCI Command Packet」と「HCI Event Packet」のパケットがキャプチャされていました。
BLUETOOTH SPECIFICATION Version 4.2 [Vol 4, Part A] 2 PROTOCOL
HCI Command Packet
HCI Command Packetは、コマンドをホストからコントローラに、次のパケット構造で送信する。
BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 5.4.1 HCI Command Packet
HCI Event Packet
HCI Event Packetは、イベントが発生したときに、次のパケット構造でホストに通知するために、コントローラにより使用される。
BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 5.4.4 HCI Event Packet
HCI Command Packet
次のセンサーをスキャンするために、次の2種類のHCI Command Packetを使用する。
- LE Set Scan Parameters Command
- LE Set Scan Enable
LE Set Scan Parameters Command
LE Set Scan Parameters Commandは、スキャンパラメータを設定するために使用する。
【Wiresharkでの解析】
Command Opcode: LE Set Scan Parameters (0x200b) 0010 00.. .... .... = Opcode Group Field: LE Controller Commands (0x0008) .... ..00 0000 1011 = Opcode Command Field: LE Set Scan Parameters (0x000b) Parameter Total Length: 7 Scan Type: Active (0x01) Scan Interval: 16 (10 msec) Scan Window: 16 (10 msec) Own Address Type: Public Device Address (0x00) Scan Filter Policy: Accept all advertisments. Ignore directed advertisements not addresed to this device (0x00) [Response in frame: 2] [Command-Response Delta: 0.55 ms]
【パケットの16進・ASCII表示】
01 0b 20 07 01 10 00 10 00 00 00 .. ........
BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 7.8.10 LE Set Scan Parameters Command
HCI Event Packet
ホストからのコマンドの実行完了通知とセンサーのアドバタイズを通知するために、次の2種類のHCI Event Packetを使用する。
- Command Complete Event
- LE Meta Event
LE Meta Event
LE Meta Eventは、LEコントローラのイベントをカプセル化する。
【Wiresharkでの解析】
Event Code: LE Meta (0x3e) Parameter Total Length: 32 Sub Event: LE Advertising Report (0x02) Num Reports: 1 Event Type: Scan Response (0x04) Peer Address Type: Public Device Address (0x00) BD_ADDR: TexasIns_64:cd:df (b4:99:4c:64:cd:df) Data Length: 20 Advertising Data Device Name: SensorTag Slave Connection Interval Range: 100 - 1000 msec Length: 5 Type: Slave Connection Interval Range (0x12) Connection Interval Min: 80 (100 msec) Connection Interval Max: 800 (1000 msec) Tx Power Level RSSI (dB): -70
【パケットの16進・ASCII表示】
04 3e 20 02 01 04 00 df cd 64 4c 99 b4 14 0a 09 .> ......dL..... 53 65 6e 73 6f 72 54 61 67 05 12 50 00 20 03 02 SensorTag..P. .. 0a 00 ba ...
BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 7.7.65 LE Meta Event