I use following code to print all interface and it's mac address
- ( 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;
}
I run the code on iPhone 5 and the output is
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
I wanna know what's the pdp_ip? and what's the ap1,en1?
I find out en0 is wifi hardware mac address
Does ap1 and en1 is virtual interface?
Thank you!
pdp_ip interfaces are those that are used for 3G and cellular data, while ap1 is used to represent currently active data connection, Wi-Fi, cellular data or bluetooth. Follow this answer to receive notifications.
Network interface names are based on whether the interface is a physical or virtual network interface. Physical interfaces are assigned names based on the slot number of the adapter. Interface group names are user specified. VLANs are named by combining the interface name and VLAN ID.
Autonomic Network Programming Interface (ANPI) allowing the discovery of network services, to manage their life cycle and enabling a suitable deployment of software components onto virtual resources.
ap1, en0, en1 are names of the interfaces on iOS as well as on Mac. If you type in Terminal on Mac ifconfig
you would get the same, en0, en1, etc.
pdp_ip interfaces are those that are used for 3G and cellular data, while ap1 is used to represent currently active data connection, Wi-Fi, cellular data or bluetooth.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With