我想编写一个扫描仪来显示附近的蓝牙设备及其 RSSI 值。我不想配对甚至连接到设备,它必须完全静音。据我所知,unix 蓝牙框架(例如 bluez)至少需要一个连接。这是由内核/蓝牙模块决定的吗?
答案1
RSSI 信息是否随查询扫描结果一起返回取决于您的蓝牙适配器 - 有些包含此功能,有些则不包含。您可以使用 hciconfig 来识别本地蓝牙适配器的功能,搜索字符串“RSSI”:
# hciconfig -a hci0 features | grep RSSI
<park state> <RSSI> <channel quality> <SCO link> <HV2 packets>
<interlaced iscan> <interlaced pscan> <inquiry with RSSI>
如果硬件支持 RSSI 查询,则无需修改蓝牙适配器的内核驱动程序。您需要编写一些代码来打开蓝牙套接字来解析查询扫描结果以提取 RSSI 信息。我在 BTFfind 中有一个 Python 实现https://github.com/joswr1ght/btfind/blob/master/btfind.py在 BTPoller 类中。
请注意,查询模式扫描并不是静默的 - “搜索者”正在发送查询请求数据包,因此可以被嗅探器检测到。一种静默的替代方案是使用 Ubertooth One 硬件并在数据包嗅探器模式下运行,但如果没有第二个蓝牙适配器,您将无法参与蓝牙网络。