見出し画像

twBlueScan: 素晴らしいBluetoothのGO言語パッケージを見つけて大興奮

今朝は4時半から開発開始です。
昨日TWSNMP FC側のデバッグログの整理を一段落したので新しく対応したBluetoothのレポートを詳しく見ていると気になることが沢山でてきました。 

・ランダムなアドレスのデバイスが妙に増えていく、これは何か?
・Appleのデバイスを識別できないか?
・ちゃんと全部のデバイスを見つけているのか?
・USB接続のコントローラーだと通信不能になってしまう

このあたりが気になってTWSNMP FCの機能追加をやる気になりません。
気になることはちゃんと調べようということで、まずはBluetooth通信のパケットを見られるようにする方法を調べました。

とかによると

とかを買う必要があると書いてありました。これを買うのを待って調べるのは性格上、どうにも我慢できません。なんとか持っているパソコンやRaspberry Piだけできないかと、もう少し調べました。
ありました。

LANのパケットをキャプチャーするtcpdumpと同じようなhcidumpというツールがあることがわかりました。早速Raspberry Piにインストールして試してみました。

#apt install bluez-hcidump
# hcidump
HCI sniffer - Bluetooth packet analyzer ver 5.50
device: hci0 snap_len: 1500 filter: 0xffffffff
< HCI Command: LE Set Random Address (0x08|0x0005) plen 6
   bdaddr 1D:62:91:D7:A9:8A
> HCI Event: Command Complete (0x0e) plen 4
   LE Set Random Address (0x08|0x0005) 

いい感じです。Bluetooth通信が見えるようになりました。キャプチャーする通信をWireSharkで見るために

# hcidump  -w /tmp/bt.pcap

のようにpcapファイルに出力してみました。これをWireSharkで見ると

画像1

のように分析することができました。これで調べてみると驚くべきことがわかりました。twBlueScanで発見できないデバイスがあったのです。Appleのパケットの企業固有データの部分はWireSharkでもデコードできないこともわかりました。

ここで、悩むことになります。twBlueScanの開発に、このまま

を使うべきか?
悩んだ末、このパッケージは不安定な感じなので、もう少し調べることにしました。前に調べた、

も、もう一度試してみましたが、あまりよくありません。
もう少しハードウェアに近いレベルで処理できるパッケージがあればよいと思い、

hcidump golang

でGoogleさんに聞いてみました。
天から猫がアシストしてくれたのか? 見つけました。

です。
素晴らしい、説明を読むとtwBlueScanの目的にピッタリです。
大興奮して、早速試してみました。

root@vaio:~# /tmp/bluewalker -device hci0 -active
.............
Found 13 devices:
Device ef:6e:29:f9:8c:48,random (static) (RSSI:-78 dBm; last seen Sep 11 06:46:54):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00000110](LE General Discoverable,BR/EDR not supported)
	Manufacturer Specific: OMRON Corporation (0x02d5), Data: 0x01ddbd083a24bd00a3740f00b2110300a701ff
	Shortened Local name: Name: "Rbt"
	Manufacturer Specific: OMRON Corporation (0x02d5), Data: 0x01debb084024bd00a7740f0091130200a001ff
	Manufacturer Specific: OMRON Corporation (0x02d5), Data: 0x01dfbb083f24bd00a9740f00ac130300a701ff
	Manufacturer Specific: OMRON Corporation (0x02d5), Data: 0x01e0be083524bd00a6740f0037140200a001ff
	Manufacturer Specific: OMRON Corporation (0x02d5), Data: 0x01e1bb083c24bd00a5740f001f140300a701ff
	Manufacturer Specific: OMRON Corporation (0x02d5), Data: 0x01e2bc083b24bd00a5740f00ff120300a901ff
Device 58:f7:2f:e6:d7:5a,random (resolvable private) (RSSI:-73 dBm; last seen Sep 11 06:46:54):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00011010](LE General Discoverable,LE & BR/EDR (controller),LE & BR/EDR (host))
	Tx Power: Data: 0x0c
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x1006041e25e73b70
Device 7c:69:fe:d7:67:a3,random (resolvable private) (RSSI:-59 dBm; last seen Sep 11 06:46:54):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00011010](LE General Discoverable,LE & BR/EDR (controller),LE & BR/EDR (host))
	Tx Power: Data: 0x07
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x10061f1ea441414b
Device 5a:c2:72:ec:ba:85,random (resolvable private) (RSSI:-77 dBm; last seen Sep 11 06:46:53):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00000010](LE General Discoverable)
	Complete 128 Bit Service Class UUID: Data: 0xfc9dd0b3cb84e0840642f3f7e1e0bfcb
Device 41:f7:d7:e6:7b:fc,random (resolvable private) (RSSI:-92 dBm; last seen Sep 11 06:46:53):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00011010](LE General Discoverable,LE & BR/EDR (controller),LE & BR/EDR (host))
	Tx Power: Data: 0x0c
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x10020304
Device 59:c3:33:8f:2f:68,random (resolvable private) (RSSI:-62 dBm; last seen Sep 11 06:46:54):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00011010](LE General Discoverable,LE & BR/EDR (controller),LE & BR/EDR (host))
	Tx Power: Data: 0x0c
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x10060a1d3d698118
Device 0a:c4:1e:ce:e4:d8,random (non-resolvable private) (RSSI:-71 dBm; last seen Sep 11 06:46:53):
Events:Non connectable undirected
Advertising Data Structures:
	Flags: [00011010](LE General Discoverable,LE & BR/EDR (controller),LE & BR/EDR (host))
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x090603acc0a8010f
Device 47:ee:c9:d7:44:6d,random (resolvable private) (RSSI:-68 dBm; last seen Sep 11 06:46:54):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00000110](LE General Discoverable,BR/EDR not supported)
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x10064f1d78637718
Device 6f:6c:55:e8:07:ae,random (resolvable private) (RSSI:-77 dBm; last seen Sep 11 06:46:54):
Events:Scannable undirected,Scan response
Advertising Data Structures:
	Manufacturer Specific: Sony Corporation (0x012d), Data: 0x020001109884b37351af4e6e938b2ddf2de79028cc5ca1dce86a
Device 08:66:98:8a:1b:fe (RSSI:-70 dBm; last seen Sep 11 06:46:53):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00011010](LE General Discoverable,LE & BR/EDR (controller),LE & BR/EDR (host))
	Tx Power: Data: 0x0c
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x10050314a3b620
Device 64:82:7d:37:70:48,random (resolvable private) (RSSI:-59 dBm; last seen Sep 11 06:46:54):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00000110](LE General Discoverable,BR/EDR not supported)
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x10064b1d9943e528
Device 42:d2:5e:c8:b0:de,random (resolvable private) (RSSI:-59 dBm; last seen Sep 11 06:46:54):
Events:Connectable undirected,Scan response
Advertising Data Structures:
	Flags: [00000110](LE General Discoverable,BR/EDR not supported)
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x10064b1d9943e528
Device 4c:50:ac:30:70:27,random (resolvable private) (RSSI:-69 dBm; last seen Sep 11 06:46:54):
Events:Scannable undirected,Scan response
Advertising Data Structures:
	Manufacturer Specific: Apple, Inc. (0x004c), Data: 0x021550765cb7d9ea4e2199a4fa879613a49242bc2accce

ますます、素晴らしい!!!
このパッケージを使って、twBlueScan v2.0.0を開発することにしました。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。