2013-01-15 15 views
9

Io uso seguente codice per stampare tutta l'interfaccia e il suo indirizzo MACChe cosa significa esattamente il nome dell'interfaccia di rete iOS? cos'è pdp_ip? cos'è un p?

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

ho eseguito il codice su iPhone 5 e l'uscita è

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 

Voglio sapere qual è il pdp_ip? e qual è l'ap1, en1?

scopro en0 è l'hardware WiFi indirizzo MAC

Does AP1 e EN1 è interfaccia virtuale?

Grazie!

risposta

4

ap1, en0, en1 sono nomi delle interfacce su iOS e su Mac. Se si digita Terminal su Mac ifconfig si otterrebbe lo stesso, en0, en1, ecc.

interfacce pdp_ip sono quelle utilizzate per dati 3G e cellulari, mentre ap1 viene utilizzato per rappresentare la connessione dati attualmente attiva, Wi- Fi, dati cellulari o bluetooth.

+1

it sta per ethernet, cosa significa ap? E provo ifconfig sul mio mac, non c'è un nome di interfaccia ap. Perché così tante interfacce familiari pdp? Significa che ci sono più di un hardware di dati cellulari, vero? Grazie ! – Aladdin

6

Lo = localhost
en = ethernet
ap = Probabilmente per punto di accesso (se si agisce come un host WiFi)

pdp_ip = forse PDS pacchetto di dati? PDS è il servizio dati telefonici, la porzione di dati del GSM. Dato che ce ne sono quattro, potrei postulare che PDS abbia la capacità di offrire quattro canali discreti.

2

Dalla mia ricerca appare (cioè non ho trovato alcuna documentazione di conferma) che se il codice sopra restituisce più di una voce "awdl0" allora il Wi-Fi è abilitato. Allo stesso modo, più di una voce "pdp_ip0" indica che i dati cellulari sono abilitati. Altre librerie (in particolare Reachability) possono essere utilizzate per indicare che è stata effettuata una connessione dati utilizzando uno dei due precedenti.

Problemi correlati