2013-01-15 11 views
9

ich folgenden Code verwenden, um alle Schnittstelle zu drucken und die MAC-AdresseWas genau bedeutet iOS-Netzwerkschnittstellenname? Was ist pdp_ip? was ist ap?

- (void)interfaceInfo{ 

int     mib[6]; 
size_t    len; 
char    *buf; 
unsigned char  *ptr; 
struct if_msghdr *ifm; 
struct sockaddr_dl *sdl; 

mib[0] = CTL_NET; 
mib[1] = AF_ROUTE; 
mib[2] = 0; 
mib[3] = AF_LINK; 
mib[4] = NET_RT_IFLIST; 

char name[128]; 
memset(name, 0, sizeof(name)); 
for (int i=1; i<20; i ++) { 
    if (if_indextoname(i, name)) { 
     printf("%s ",name);    
    }else{ 
     continue; 
    } 

    if ((mib[5] = if_nametoindex(name)) == 0) { 
     printf("Error: if_nametoindex error\n"); 
     return NULL; 
    } 

    if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { 
     printf("Error: sysctl, take 1\n"); 
     return NULL; 
    } 

    if ((buf = malloc(len)) == NULL) { 
     printf("Could not allocate memory. error!\n"); 
     return NULL; 
    } 

    if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { 
     printf("Error: sysctl, take 2"); 
     free(buf); 
     return NULL; 
    } 

     ifm = (struct if_msghdr *)buf; 
     sdl = (struct sockaddr_dl *)(ifm + 1); 
     ptr = (unsigned char *)LLADDR(sdl); 
     NSString *macString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", 
         *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; 
     printf(" %s\n",[macString cStringUsingEncoding:NSUTF8StringEncoding]); 
     free(buf); 
    } 
    return nil; 
} 

ich den Code auf dem iPhone 5 und der Ausgang laufen

lo0 00:00:00:00:00:00 
pdp_ip0 00:00:00:00:00:00 
pdp_ip1 00:00:00:00:00:00 
pdp_ip2 00:00:00:00:00:00 
pdp_ip3 00:00:00:00:00:00 
ap1 EA:8D:28:44:32:2F 
en0 E8:8D:28:44:32:2F 
en1 EA:8D:28:44:32:31 
awdl0 4A:79:85:44:5B:4D 
//I faked parts data 

Ich möchte wissen, was die pdp_ip ist? und was ist das ap1, en1?

ich herausfinden, en0 ist wifi Hardware-MAC-Adresse

Hat AP1 und en1 ist virtuelle Schnittstelle?

Vielen Dank!

Antwort

4

ap1, en0, en1 sind Namen der Schnittstellen sowohl auf iOS als auch auf Mac. Wenn Sie Terminal auf Mac ifconfig eingeben, erhalten Sie das gleiche, en0, en1, etc.

pdp_ip Schnittstellen sind diejenigen, die für 3G-und Mobilfunkdaten verwendet werden, während Ap1 wird zur Darstellung der derzeit aktiven Datenverbindung, Wi-Fi Fi, Mobilfunkdaten oder Bluetooth.

+1

en steht für ethernet, wofür steht ap? Und ich versuche ifconfig auf meinem Mac, gibt es keinen API-Schnittstellennamen. Warum so viele Schnittstellen der PDP-Familie? Es bedeutet, dass es mehr als eine mobile Datenhardware gibt, oder? Vielen Dank ! – Aladdin

6

lo = localhost
en = Ethernet
ap = Wahrscheinlich für Zugangspunkt (wenn Sie als Wi-Fi-Host fungieren)

pdp_ip = vielleicht PDS Datenpaket? PDS ist der Phone Data Service, der Datenteil von GSM. Da es vier gibt, könnte ich postulieren, dass PDS vier diskrete Kanäle anbieten kann.

2

Aus meinen Nachforschungen geht hervor (d. H. Ich habe keine bestätigende Dokumentation gefunden), dass, wenn der obige Code mehr als einen "awdl0" -Eintrag zurückgibt, Wi-Fi aktiviert ist. In ähnlicher Weise gibt mehr als ein Eintrag "pdp_ip0" an, dass Mobilfunkdaten aktiviert sind. Andere Bibliotheken (insbesondere die Erreichbarkeit) können dann verwendet werden, um anzuzeigen, dass eine Datenverbindung unter Verwendung der beiden obigen hergestellt wurde.