Trên tất cả các thiết bị tôi có thể có được bàn tay của tôi trên, các nguyên tắc sau dường như áp dụng - địa chỉ iPhone wifi MAC là một địa chỉ MAC lớn hơn iPhone bluetooth - iPad wifi Địa chỉ MAC là một địa chỉ MAC nhỏ hơn một chút so với địa chỉ MAC của iPad.
Sẽ rất hữu ích nếu mọi người kiểm tra điều này trên iPhone hoặc iPad của họ, sao cho chúng tôi có thể tăng sự tự tin trong lý thuyết. Tôi đã kiểm tra trên một số thiết bị iPhone4, iPhone3 và iPad1.
Bạn có thể kiểm tra bằng cách mở Settings - General - About và nhìn vào "Wi-Fi Address" và "Bluetooth"
Nếu lý thuyết này là đúng, sau đây pháp mã sẽ lấy mac bluetooth của bạn địa chỉ:
#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);
}
}
Nguồn
2011-09-27 09:15:54
Cảm ơn. Tôi đã hy vọng tôi có thể nhận được nó nhiều hơn hoặc ít hơn giống như cách chúng tôi có thể lấy địa chỉ MAC WiFi ... – drkbrd
Tôi nghĩ rằng có thể là hoàn toàn khả thi nếu iPhone đang ở chế độ tethering qua Bluetooth. – rpetrich
Hãy đăng đoạn mã để sử dụng khóa kLockdownBluetoothAddressKey qua liblockdown.dylib –