2016-04-11 7 views
2

bekommen kann ich MAC-Adresse mit diesem C-Code erhalten:Wie MAC-Adresse in Android nativen Code

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

I-MAC-Adresse in Android bekommen möchten. aber dieser Code gibt keine MAC-Adresse. if (0 == ioctl(fd, SIOCGIFHWADDR, &s) ist immer falsch.

fand ich einen Code in https://groups.google.com/d/msg/android-ndk/6Y-0Eid3mGw/6bFvtap8xJIJ

Aber dieser Code gibt Fehler:

ioctl(SIOCGIFHWADDR) error 

und es gibt falsche MAC-Adresse wie 00:00:00:7C::00:01

Wie kann ich MAC-Adresse in Android nativen Code zu bekommen?

+1

FYI, das vor Android M zu arbeiten, verwendet, sollten Sie es in Java bekommen und weitergeben. Siehe http://stackoverflow.com/questions/33159224/getting-mac-address-in-android-6-0 (5. Antwort funktioniert) – Michael

Antwort

0

Sie müssen eine Verbindung zu einem WiFi-Netzwerk herstellen, dann versuchen Sie, MAC-Adresse zu erhalten.

0

Dieser Code funktioniert gut auf Nexus 5:

#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; 
} 
Verwandte Themen