2010-06-03 2 views

Trả lời

4

Không có API công khai để nhận thông tin này.

Nếu đây là một ứng dụng nội bộ hay jailbreak bạn có thể nhận được giá trị của khóa kLockdownBluetoothAddressKey qua liblockdown.dylib

+0

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

+0

Tôi nghĩ rằng có thể là hoàn toàn khả thi nếu iPhone đang ở chế độ tethering qua Bluetooth. – rpetrich

+3

Hãy đăng đoạn mã để sử dụng khóa kLockdownBluetoothAddressKey qua liblockdown.dylib –

6

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); 
    } 

} 
+0

Lý thuyết cũng đúng trên iPad của tôi 3 –

+0

Lý thuyết chính xác trên iPhone 4 của tôi, nhưng không phải trên iPod 4 - có 5 chữ số hex cuối cùng khác nhau. – newenglander

+3

Trong iOS 7 trở lên, nếu bạn yêu cầu địa chỉ MAC của thiết bị iOS, hệ thống sẽ trả về giá trị 02: 00: 00: 00: 00: 00 https://developer.apple.com/news/?id= 8222013a –

0

địa chỉ MAC cho tôi iPhone4 iOS 5.0.1 là theo thứ tự sau đây so sánh chữ số cuối cùng của họ:

63 = Bluetooth 
64 = WiFi 

iPad2 v5.0.1 was: 

0D = Bluetooth 
0E = WiFi 

iPod-Touch thế hệ thứ 2 iOS 4.2.1 hoàn toàn khác.

??.FC = WiFi 
xx.04 = Bluetooth