今までBLEパケットをキャプチャするために、hcidumpを使っていました(hcidump / gatttoolによるBluetooth packetおよびSensorTagの解析 )。今回は、Wiresharkに付属するコマンドライン版のパケットキャプチャソフト「tshark」をRaspberry Pi 3にインストールし、Raspbery Pi 3に標準でインストールされているBluethoothのBluetooth Low Energy(BLE)パケットをキャプチャします。
Raspberry Pi 3へのtsharkのインストール
次のコマンドでtsharkをインストールします。
$ sudo apt-get install tshark
次のコマンドで、正常にtsharkがインストールされたかを確認します。
$ tshark -v TShark 1.12.1 (Git Rev Unknown from unknown) Copyright 1998-2014 Gerald Combsand contributors. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled (32-bit) with GLib 2.42.1, with libpcap, with libz 1.2.8, with POSIX capabilities (Linux), with libnl 3, with SMI 0.4.8, with c-ares 1.10.0, with Lua 5.2, without Python, with GnuTLS 3.3.8, with Gcrypt 1.6.3, with MIT Kerberos, with GeoIP. Running on Linux 4.1.19-v7+, with locale en_GB.UTF-8, with libpcap version 1.6.2, with libz 1.2.8. Built using gcc 4.9.2.
tsharkの使用方法
Raspberry Pi 3に標準でインストールされているBluethoothのBLEパケットをtsharkでキャプチャします。キャプチャするBLEパケットは、Raspberry Pi 3によるBLEのスキャンとし、SensorTagの側面のスイッチを押してアドバタイズします。次のhcitool コマンドを使用します。
$ sudo hcitool lescan LE Scan … B4:99:4C:64:CD:DF (unknown) B4:99:4C:64:CD:DF SensorTag B4:99:4C:64:CD:DF (unknown) B4:99:4C:64:CD:DF SensorTag B4:99:4C:64:CD:DF (unknown)
Raspbery Pi 3のBluethoothのインタフェース番号
次のコマンドで、Bluethoothのインタフェース番号を調べます。Bluethoothは、「5. bluetooth0」になっています。
$ sudo tshark -D tshark: Lua: Error during loading: [string “/usr/share/wireshark/init.lua”]:46: dofile has been disabled due to running Wireshark as superuser. See http://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user. 1. wlan0 2. any 3. lo (Loopback) 4. eth0 5. bluetooth0 6. nflog 7. nfqueue 8. usbmon1
tsharkによるBLEスキャンパケットのキャプチャ
次のコマンドでtsharkを起動します。次のようにBLEパケットのログが表示されるます。
$ tshark: Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:46: dofile has been disabled due to running Wireshark as superuser. See http://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user. Running as user "root" and group "root". This could be dangerous. Capturing on 'bluetooth0' sudo hcitool lescan LE Scan ... 1 0.000000 host -> controller HCI_CMD 11 Sent LE Set Scan Parameters 2 0.000683 controller -> host HCI_EVT 7 Rcvd Command Complete (LE Set Scan Parameters) 3 0.000824 host -> controller HCI_CMD 6 Sent LE Set Scan Enable 4 0.001285 controller -> host HCI_EVT 7 Rcvd Command Complete (LE Set Scan Enable) B4:99:4C:64:CD:DF (unknown) 5 5.800608 controller -> host HCI_EVT 18 Rcvd LE Meta (LE Advertising Report) B4:99:4C:64:CD:DF SensorTag 6 6.632575 controller -> host HCI_EVT 35 Rcvd LE Meta (LE Advertising Report)
tsharkによるBLEパケットの詳細情報の表示
上記の場合だと、詳細の情報が表示されていないので、パケットの解析が難しくなる。このため次のように「V」オプションを指定する。
$ sudo tshark -i 5 -V & [3] 1132 pi@raspberrypi:~ $ tshark: Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:46: dofile has been disabled due to running Wireshark as superuser. See http://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user. Running as user "root" and group "root". This could be dangerous. Capturing on 'bluetooth0' pi@raspberrypi:~ $ sudo hcitool lescan LE Scan ... B4:99:4C:64:CD:DF (unknown) B4:99:4C:64:CD:DF SensorTag Frame 1: 11 bytes on wire (88 bits), 11 bytes captured (88 bits) on interface 0 Interface id: 0 (bluetooth0) Encapsulation type: Bluetooth H4 with linux header (99) Arrival Time: Jun 25, 2016 09:36:19.475052000 UTC [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1466847379.475052000 seconds [Time delta from previous captured frame: 0.000000000 seconds] [Time delta from previous displayed frame: 0.000000000 seconds] [Time since reference or first frame: 0.000000000 seconds] Frame Number: 1 Frame Length: 11 bytes (88 bits) Capture Length: 11 bytes (88 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: hci_h4:bthci_cmd] Point-to-Point Direction: Sent (0) Bluetooth HCI H4 [Direction: Sent (0x00)] HCI Packet Type: HCI Command (0x01) Bluetooth HCI Command - LE Set Scan Parameters 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) Frame 2: 7 bytes on wire (56 bits), 7 bytes captured (56 bits) on interface 0 Interface id: 0 (bluetooth0) Encapsulation type: Bluetooth H4 with linux header (99) Arrival Time: Jun 25, 2016 09:36:19.475591000 UTC [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1466847379.475591000 seconds [Time delta from previous captured frame: 0.000539000 seconds] [Time delta from previous displayed frame: 0.000539000 seconds] [Time since reference or first frame: 0.000539000 seconds] Frame Number: 2 Frame Length: 7 bytes (56 bits) Capture Length: 7 bytes (56 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: hci_h4:bthci_evt] Point-to-Point Direction: Received (1) Bluetooth HCI H4 [Direction: Rcvd (0x01)] HCI Packet Type: HCI Event (0x04) Bluetooth HCI Event - Command Complete Event Code: Command Complete (0x0e) Parameter Total Length: 4 Number of Allowed Command Packets: 1 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) Status: Success (0x00) Frame 3: 6 bytes on wire (48 bits), 6 bytes captured (48 bits) on interface 0 Interface id: 0 (bluetooth0) Encapsulation type: Bluetooth H4 with linux header (99) Arrival Time: Jun 25, 2016 09:36:19.475682000 UTC [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1466847379.475682000 seconds [Time delta from previous captured frame: 0.000091000 seconds] [Time delta from previous displayed frame: 0.000091000 seconds] [Time since reference or first frame: 0.000630000 seconds] Frame Number: 3 Frame Length: 6 bytes (48 bits) Capture Length: 6 bytes (48 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: hci_h4:bthci_cmd] Point-to-Point Direction: Sent (0) Bluetooth HCI H4 [Direction: Sent (0x00)] HCI Packet Type: HCI Command (0x01) Bluetooth HCI Command - LE Set Scan Enable Command Opcode: LE Set Scan Enable (0x200c) 0010 00.. .... .... = Opcode Group Field: LE Controller Commands (0x0008) .... ..00 0000 1100 = Opcode Command Field: LE Set Scan Enable (0x000c) Parameter Total Length: 2 Scan Enable: true (0x01) Filter Dublicates: true (0x01) Frame 4: 7 bytes on wire (56 bits), 7 bytes captured (56 bits) on interface 0 Interface id: 0 (bluetooth0) Encapsulation type: Bluetooth H4 with linux header (99) Arrival Time: Jun 25, 2016 09:36:19.476162000 UTC [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1466847379.476162000 seconds [Time delta from previous captured frame: 0.000480000 seconds] [Time delta from previous displayed frame: 0.000480000 seconds] [Time since reference or first frame: 0.001110000 seconds] Frame Number: 4 Frame Length: 7 bytes (56 bits) Capture Length: 7 bytes (56 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: hci_h4:bthci_evt] Point-to-Point Direction: Received (1) Bluetooth HCI H4 [Direction: Rcvd (0x01)] HCI Packet Type: HCI Event (0x04) Bluetooth HCI Event - Command Complete Event Code: Command Complete (0x0e) Parameter Total Length: 4 Number of Allowed Command Packets: 1 Command Opcode: LE Set Scan Enable (0x200c) 0010 00.. .... .... = Opcode Group Field: LE Controller Commands (0x0008) .... ..00 0000 1100 = Opcode Command Field: LE Set Scan Enable (0x000c) Status: Success (0x00) Frame 5: 18 bytes on wire (144 bits), 18 bytes captured (144 bits) on interface 0 Interface id: 0 (bluetooth0) Encapsulation type: Bluetooth H4 with linux header (99) Arrival Time: Jun 25, 2016 09:36:19.516716000 UTC [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1466847379.516716000 seconds [Time delta from previous captured frame: 0.040554000 seconds] [Time delta from previous displayed frame: 0.040554000 seconds] [Time since reference or first frame: 0.041664000 seconds] Frame Number: 5 Frame Length: 18 bytes (144 bits) Capture Length: 18 bytes (144 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: hci_h4:bthci_evt:btcommon] Point-to-Point Direction: Received (1) Bluetooth HCI H4 [Direction: Rcvd (0x01)] HCI Packet Type: HCI Event (0x04) Bluetooth HCI Event - LE Meta Event Code: LE Meta (0x3e) Parameter Total Length: 15 Sub Event: LE Advertising Report (0x02) Num Reports: 1 Event Type: Connectable Unidirected Advertising (0x00) Peer Address Type: Public Device Address (0x00) BD_ADDR: TexasIns_64:cd:df (b4:99:4c:64:cd:df) Data Length: 3 Advertising Data Flags Length: 2 Type: Flags (0x01) 000. .... = Reserved: 0x00 ...0 .... = Simultaneous LE and BR/EDR to Same Device Capable (Host): false (0x00) .... 0... = Simultaneous LE and BR/EDR to Same Device Capable (Controller): false (0x00) .... .1.. = BR/EDR Not Supported: true (0x01) .... ..0. = LE General Discoverable Mode: false (0x00) .... ...1 = LE Limited Discoverable Mode: true (0x01) RSSI (dB): -56 Frame 6: 35 bytes on wire (280 bits), 35 bytes captured (280 bits) on interface 0 Interface id: 0 (bluetooth0) Encapsulation type: Bluetooth H4 with linux header (99) Arrival Time: Jun 25, 2016 09:36:19.623836000 UTC [Time shift for this packet: 0.000000000 seconds] Epoch Time: 1466847379.623836000 seconds [Time delta from previous captured frame: 0.107120000 seconds] [Time delta from previous displayed frame: 0.107120000 seconds] [Time since reference or first frame: 0.148784000 seconds] Frame Number: 6 Frame Length: 35 bytes (280 bits) Capture Length: 35 bytes (280 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: hci_h4:bthci_evt:btcommon] Point-to-Point Direction: Received (1) Bluetooth HCI H4 [Direction: Rcvd (0x01)] HCI Packet Type: HCI Event (0x04) Bluetooth HCI Event - LE Meta 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 Length: 10 Type: Device Name (0x09) 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 Length: 2 Type: Tx Power Level (0x0a) Power Level (dBm): 0 RSSI (dB): -74
tsharkによるBLEパケットのhex+ACSIIダンプ表示
ログを表示するときに、BLEパケットのhex+ACSIIダンプで表示する場合、オブション「-x」をコマンドに追加します。取得したBLEパケットの表示が次に示します。通常の機能的な名称のログ表示の後にhex+ACSIIダンプ表示が行われます
tsharkで収集したBLEパケットの保存
tsharkで収集したBLEパケットは、次のコマンドで、ログデータとして保存できます。
-w <ログファイル名>
保存したログデータは、Windows版Wiresharkで読み込ませると、次のようにWindows上で解析結果を閲覧できます。
上記のログデータは次のコマンドで収集しています。
# sudo tshark -i 5 -x -V -w log
tsharkによるキャプチャの注意:
基本的にtsharkによるキャプチャはroot権限で行ってください。ユーザの権限で行うと次のメッセージが表示され、tsharkは実行できません
$ sudo tshark -i 5 -x -V -w log tshark: Lua: Error during loading: [string “/usr/share/wireshark/init.lua”]:46: dofile has been disabled due to running Wireshark as superuser. See http://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user. Running as user “root” and group “root”. This could be dangerous. Capturing on ‘nflog’ tshark: The file to which the capture would be saved (“log”) could not be opened: Is a directory. 0 packets captured $
root権限に切り替えてtsharkを実行すると、次のように表示され、正常にパケットがキャプチャできます。
$ su – Password: SSH is enabled and the default password for the ‘pi’ user has not been changed. This is a security risk – please login as the ‘pi’ user and type ‘passwd’ to set a new password. root@raspberrypi:~# sudo tshark -i 5 -x -V -w log tshark: Lua: Error during loading: [string “/usr/share/wireshark/init.lua”]:46: dofile has been disabled due to running Wireshark as superuser. See http://wiki.wireshark.org/CaptureSetup/CapturePrivileges for help in running Wireshark as an unprivileged user. Running as user “root” and group “root”. This could be dangerous. Capturing on ‘nflog’ ^C0 packets captured #