hcitool shows iOS13's public Mac address without pairing - bluetooth

iOS 13 follows "LE privacy" rule, it sends BLE beacon packets with random MAC address, which keep changing periodically. But "hcitool scan" command shows iOS's bluetooth public MAC address. I guess it violates "LE privacy" rule.
I checked BLE sniffer log, iOS just advertise with random MAC address and manufacture data. iOS does not send public MAC address. I cannot find any packet with public MAC address.
Do you know how hcitool get iOS's public MAC address?
Scan side:
Linux raspberrypi 4.19.93-v7l+,
Bluez 5.37
Beacon side:
iPhone8, iOS13.3, Setting app, Bluetooth setting screen.
These devices have not paired before.

"hcitool scan" use Bluetooth classic (BR/EDR).
"hcitool lescan" use Bluetooth Low Energy(BLE).
On Bluetooth classic, "LE privacy" rule is not applied. Public MAC address is exchanged.

Related

Uniquely identifying bluetooth devices

I am new to bluetooth development and recently started reading about it.
I am trying to develop ble devices scanner and I need to provide an option to mark specific devices as trusted or untrusted.
I am able to get list of discoverable ble devices using hcitool lescan. But bluetooth addresses returned here can be random addresses. I need to uniquely identify trusted neighbouring ble devices to mark them as trusted even after changing random address. Static/public bluetooth address seems to be the only option to uniquely identify ble devices.
AFAIK static bluetooth address and IRK are shared during pairing. So after pairing with trusted BLE devices, I can get static bluetooth address and IRK which can be used for uniquely identifying trusted bluetooth devices. Also post pairing device can be uniquely identified when resolvable random address is used by paired ble device.
gatttool can be used to connect to scanned BLE devices. But how can I get the static/public address after I connect to BLE device (assuming gatttool connect will perform pairing).
I am not able to find any out of the box tool like hcitool which can be used to pair to get static bluetooth address and uniquely identify when trusted ble device is scanned with resolvable random address.
Is there any tool which can be used to uniquely identify trusted bluetooth device?

NodeJS - add device to BLE whitelist

I am using #abandonware/noble for scanning and interrogating Bluetooth devices on Linux. I could not, however, find a method to add a MAC address to the LE whitelist, similar to hcitool lewladd on Linux. Is there a way to do it using noble?

How to p2p_connect to device with WiFi Direct without MAC Address? (Raspberry Pi and Android)

I have an Android tablet and A Raspberry Pi and I want to established a connection between them automatically when the tablet sends a request to the Pi.
I followed an Android application example here and start discovering any nearby devices. (https://www.youtube.com/watch?v=qnY97iBxp30)
At the same time i run sudo wpa_cli and p2p_find 20. The Android application detects the Pi, and I try to establish connection with the Pi which will display
<3>P2P-GO-NEG-REQUEST TABLET_MAC_ADDRESS dev_passwd_id=4
Normally I would just p2p_connect TABLET_MAC_ADDRESS pbc to successfully connect them together but I find it inefficient if I were to swap to another mobile device.
Are there any other ways to connect the tablet without writing the tablet mac address? For example connecting to that specific device ssid when they send a P2P-GO-NEG-REQUEST to the pi?
TL;DR Nope.
If we look at the OSI ISO 7 layer model for network communication we can see that the Media Access Control (MAC) address is vital for identifying which device is which within a wifi network.
You could try setting up a bluetooth connection or a token-ring, but I suspect that would be more effort than you are looking for.
With IPv6 your devices could use neighbour discovery to automate past the MAC entry to the Internet Protocol, and its possible to connect between devices using their link-local address (fe80::some:thing)
Wifi carries packets of data, that have addresses. By analogy, if I tell you which town I live in, but don't write my building address on the packet, you are going to have a hard time delivering it.

Detect mobile phone presence with Bluetooth usb dongle.

I am using BeagleBone Black and Bluetooth USB dongle V4.0. My dongle is detecting iBeacons with no problems but is there any way to detect mobile phones with bluetooth on. I am using NodeJs and Noble package.
So when I use hcitool lescan it's not finding mobile phone either but with hcitool there is option scan. When I call hcitool scan in terminal I get my mobile as result. Is there any NodeJs package that wraps this option. I have no need to connect to mobile device, I just need to discover it's presence, and see it's MAC address.
If you can see your device with "hcitool scan" and not with "hcitool lescan" it means your phone(or BT stack you use in phone) don't support BLE protocol. Not all BT devices are BLE capable.

USB device address on Windows

I'm using node-serialport to work with USB devices, however on Windows I can't find out how can I connect to specific device. When I use list function there is only one item with COM3 address, however that is present always, even when no other devices are connected. How can I find out what is the USB device address that can be used for setting up communication?

Resources