I want to write a scanner that shows nearby bluetooth devices with their RSSI values. I don't want to pair or even connect to the devices, it must be fully silent. From what I've seen unix bluetooth frameworks such as bluez require at least a connection. Is it something that is determined by the kernel / bluetooth module?


Whether the RSSI information is returned with the results of an inquiry scan depends on your Bluetooth adapter - some include this feature and others do not. You can identify the features of your local Bluetooth adapter using hciconfig, searching for the string "RSSI":

# hciconfig -a hci0 features | grep RSSI
    <park state> <RSSI> <channel quality> <SCO link> <HV2 packets> 
    <interlaced iscan> <interlaced pscan> <inquiry with RSSI> 

If the hardware supports inquiry with RSSI, it is not necessary to modify the kernel drivers for your Bluetooth adapter. You will need to write some code that opens a Bluetooth socket for parsing inquiry scan results to extract RSSI information. I have a Python implementation in BTFind here https://github.com/joswr1ght/btfind/blob/master/btfind.py in the BTPoller class.

Note that Inquiry mode scanning is not silent - the "seeker" is sending inquiry request packets and could therefore be detected by a sniffer. A silent alternative would be to use the Ubertooth One hardware and operate in packet sniffer mode, but you would not be able to participate in the Bluetooth network without a second Bluetooth adapter as well.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.