2013-01-15 75 views
9

tôi sử dụng sau mã để in tất cả các giao diện và nó mac địa chỉTên giao diện mạng iOS chính xác là gì? pdp_ip là gì? ap là gì?

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

tôi chạy mã trên iPhone 5 và đầu ra là

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 

Tôi muốn biết pdp_ip là gì? và ap1, en1 là gì?

Tôi tìm ra en0 là địa chỉ mac phần cứng wifi

Có ap1 và en1 là giao diện ảo không?

Cảm ơn bạn!

Trả lời

4

ap1, en0, en1 là tên của các giao diện trên iOS cũng như trên Mac. Nếu bạn nhập vào Terminal trên Mac ifconfig bạn sẽ nhận được cùng, en0, en1, v.v.

giao diện pdp_ip là giao diện được sử dụng cho dữ liệu 3G và di động, trong khi ap1 được sử dụng để thể hiện kết nối dữ liệu hiện hoạt, Wi- Fi, dữ liệu di động hoặc bluetooth.

+1

vi là viết tắt của ethernet, ap là gì? Và tôi thử ifconfig trên mac của tôi, không có tên giao diện ap. Tại sao rất nhiều giao diện gia đình pdp? Nó có nghĩa là có nhiều hơn một phần cứng dữ liệu di động, phải không? Cảm ơn bạn ! – Aladdin

6

lo = localhost
en = ethernet
ap = Có lẽ đối với điểm truy cập (nếu bạn đang hoạt động như một máy chủ wifi)

pdp_ip = có lẽ PDS dữ liệu gói? PDS là dịch vụ dữ liệu điện thoại, phần dữ liệu của GSM. Vì có bốn, tôi có thể đề xuất rằng PDS có khả năng cung cấp bốn kênh riêng biệt.

2

Từ nghiên cứu của tôi, nó xuất hiện (tức là tôi chưa tìm thấy bất kỳ tài liệu xác nhận nào) rằng nếu mã ở trên trả về nhiều mục nhập "awdl0" thì Wi-Fi được bật. Tương tự, nhiều mục nhập "pdp_ip0" cho biết rằng dữ liệu di động được bật. Các thư viện khác (đáng chú ý nhất là Reachability) có thể được sử dụng để chỉ ra rằng một kết nối dữ liệu đã được thực hiện bằng cách sử dụng một trong hai bên trên.