从特定设备捕获蓝牙信标

Capture bluetooth beacons from a specific device

我需要捕获 BLE 个信标并检查其内容。没能说服 wireshark 这样做,我发现包 bluez 中的普通 bluetoothctl 做到了:

[bluetooth]# scan on
Discovery started
[CHG] Controller CC:15:31:5F:73:4A Discovering: yes
[NEW] Device 49:DA:89:B3:9B:19 49-DA-89-B3-9B-19
[NEW] Device 20:C9:D0:47:DB:AA 20-C9-D0-47-DB-AA
[NEW] Device 60:72:21:DF:F9:A4 60-72-21-DF-F9-A4
[NEW] Device 52:CF:9F:A6:85:C9 52-CF-9F-A6-85-C9
[NEW] Device 66:A6:75:A7:2E:69 66-A6-75-A7-2E-69
[NEW] Device 6C:D9:CF:B3:9F:34 6C-D9-CF-B3-9F-34
[NEW] Device 68:B3:E4:9B:27:36 68-B3-E4-9B-27-36
[NEW] Device 7E:F6:07:0E:CC:9F 7E-F6-07-0E-CC-9F
[NEW] Device 56:AA:85:3D:4B:EB 56-AA-85-3D-4B-EB
[NEW] Device 4C:C9:5E:33:42:09 4C-C9-5E-33-42-09
[NEW] Device 7A:FC:C2:18:ED:9C 7A-FC-C2-18-ED-9C
[CHG] Device 4C:C9:5E:33:42:09 Class: 0x000c043c
[CHG] Device 4C:C9:5E:33:42:09 Icon: audio-card

我的问题是我的环境相当嘈杂,因此很难跟踪来自单个设备的信标(我想实时监控)。如何通过 UUID 过滤输出,就好像 greping?

奖金问题:什么是 [CNG]

当发现新设备时,BlueZ 用 [NEW] 表示。当已发现设备的 property 发生变化时,它会使用 [CHG].

BlueZ 允许使用 SetDiscoveryFilter 过滤发现报告。更多信息请访问:https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt

bluetoothctl 中,这是从 menu scan 下的命令访问的。

如果您想使用代码执行此操作,我通常建议使用 BlueZ 提供的 API 并记录在: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc

我之前在以下位置发布了一个 Python 示例: bluetootctl scan on parsing

BlueZ D-Bus API 可以从任何具有 D-Bus 绑定的编程语言访问。