I'm trying to do some proximity detection of iPhones but I need to get their Bluetooth MAC address programmatically. Does anyone knows how ?
I assume Bluetooth is activated but no device is paired with the iPhone.
In the Properties window, go to the Bluetooth tab. You will see a MAC address field and the address should be there. If it isn't, look a little further down and you will see a Unique Identifier field which will give you the MAC address.
Apple iOS (iPhone/iPad)Open Settings. Select General, then About. The wireless MAC address is listed under Wi-Fi Address.
On all devices I could get my hands on, the following rule seems to apply - iPhone wifi MAC address is one larger than iPhone bluetooth MAC address - iPad wifi MAC address is one less than iPad bluetooth MAC address.
It would be helpful if people check this on their iPhone or iPad, such that we can increase the confidence in the theory. I've checked on a few iPhone4, iPhone3 and iPad1 devices.
You can check it by opening Settings - General - About and looking at "Wi-Fi Address" and "Bluetooth"
If the theory is correct, the following legal code will retrieve your bluetooth mac address:
#include <sys/types.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <netdb.h>
#include <net/if_dl.h>
#include <string.h>
#if ! defined(IFT_ETHER)
#define IFT_ETHER 0x6/* Ethernet CSMACD */
#endif
void doMacTest() {
BOOL success;
struct ifaddrs * addrs;
const struct ifaddrs * cursor;
const struct sockaddr_dl * dlAddr;
const uint8_t * base;
// We look for interface "en0" on iPhone
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != NULL) {
if ( (cursor->ifa_addr->sa_family == AF_LINK)
&& (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type == IFT_ETHER)
&& (strcmp(cursor->ifa_name, "en0") == 0)) {
dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
base = (const uint8_t *) &dlAddr->sdl_data[dlAddr->sdl_nlen];
if (dlAddr->sdl_alen == 6) {
fprintf(stderr, ">>> WIFI MAC ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", base[0], base[1], base[2], base[3], base[4], base[5]);
fprintf(stderr, ">>> IPHONE BLUETOOTH MAC ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", base[0], base[1], base[2], base[3], base[4], base[5]-1);
fprintf(stderr, ">>> IPAD BLUETOOTH MAC ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", base[0], base[1], base[2], base[3], base[4], base[5]+1);
} else {
fprintf(stderr, "ERROR - len is not 6");
}
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With