drk*_*brd 6 iphone mac-address objective-c
我正在尝试对iPhone进行一些接近检测,但我需要以编程方式获取蓝牙 MAC地址.有谁知道怎么样?
我假设蓝牙已激活,但没有设备与iPhone配对.
在我可以得到的所有设备上,以下规则似乎适用 - iPhone wifi MAC地址比iPhone蓝牙MAC地址大一个 - iPad wifi MAC地址比iPad蓝牙MAC地址少一个.
如果人们在他们的iPhone或iPad上检查这一点会很有帮助,这样我们就可以增加对理论的信心.我查了一些iPhone4,iPhone3和iPad1设备.
您可以通过打开设置 - 常规 - 关于并查看"Wi-Fi地址"和"蓝牙"来查看它
如果理论是正确的,以下合法代码将检索您的蓝牙mac地址:
#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);
}
}
Run Code Online (Sandbox Code Playgroud)
没有公共 API 可以获取此信息。
kLockdownBluetoothAddressKey如果这是内部或越狱应用程序,您可以通过liblockdown.dylib获取密钥的值
| 归档时间: |
|
| 查看次数: |
15095 次 |
| 最近记录: |