2016-04-11 17 views
2

にMACアドレスを取得するにはどのように私はこのCコードでMACアドレスを取得することができます:私はAndroidのMACアドレスを取得したいAndroidのネイティブコード

struct ifreq s; 
char buffer[12 + 1]; 
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); 
int i, j; 
memset(buffer, 0 , sizeof(buffer)); 
strcpy(s.ifr_name, "wlan0"); 

if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) { 
    memcpy(mac, s.ifr_addr.sa_data, 6); 
    return 1; 
} 

。このコードはMACアドレスを与えません。 if (0 == ioctl(fd, SIOCGIFHWADDR, &s)は常にfalseです。

私はhttps://groups.google.com/d/msg/android-ndk/6Y-0Eid3mGw/6bFvtap8xJIJ

のコードを発見した。しかし、このコードは、エラーを与える:

ioctl(SIOCGIFHWADDR) error 

、それは間違ったMACアドレスを与える00:00:00:7C::00:01

のようにどのように私はAndroidのネイティブコードにMACアドレスを取得できますか?

+1

、これはJavaでそれを取得し、それを渡すことを検討し、AndroidのMの前に働いていました。 http://stackoverflow.com/questions/33159224/getting-mac-address-in-android-6-0(5回目のアンサーを参照) – Michael

答えて

0

WiFiネットワークに接続してから、MACアドレスを取得する必要があります。

0

このコードは、Nexus 5の上で良い作品:FYI

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/socket.h> 
#include <linux/sockios.h> 
#include <linux/if.h> 
#include <linux/in.h> 


int get_mac_addr(char *mac_addr) 
{ 
    int sockfd; 
    struct ifreq ifr; 

    if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP)) >= 0) { 
    //strncpy(ifr.ifr_name, "eth0", IFNAMESIZE); 
    strncpy(ifr.ifr_name, "wlan0", IFNAMSIZ); 

    ifr.ifr_addr.sa_family = AF_INET; 

    if (ioctl(sockfd, SIOCGIFHWADDR, (char*) &ifr) == 0) { 
     sprintf(mac_addr, "%02X:%02X:%02X:%02X:%02X:%02X", 
       (unsigned char) ifr.ifr_ifru.ifru_hwaddr.sa_data[0], (unsigned char) ifr.ifr_ifru.ifru_hwaddr.sa_data[1], 
       (unsigned char) ifr.ifr_ifru.ifru_hwaddr.sa_data[2], (unsigned char) ifr.ifr_ifru.ifru_hwaddr.sa_data[3], 
       (unsigned char) ifr.ifr_ifru.ifru_hwaddr.sa_data[4], (unsigned char) ifr.ifr_ifru.ifru_hwaddr.sa_data[5]); 
     return 0; 
    } 
    } 
    /* error */ 
    return -1; 
} 



int main(int argc, char *argv[], char *envp[]) 
{ 
    char mac_addr[80] = {0}; 
    printf("MAC = %d, %s\n", get_mac_addr(mac_addr), mac_addr); 

    return 0; 
}