Network Information
Use the getifaddrs() interface to obtain information about all network ports in the system. The following is an example of using the getifaddrs interface to obtain information about the local network port name, IP address, broadcast address, and subnet mask.
struct sockaddr_in *sin = NULL;
struct ifaddrs *ifa = NULL, *ifList;
if (getifaddrs(&ifList) < 0)
{
return -1;
}
for (ifa = ifList; ifa != NULL; ifa = ifa->ifa_next)
{
if(ifa->ifa_addr->sa_family == AF_INET)
{
// Obtains the network port name.
printf("\n>>> interfaceName: %s\n", ifa->ifa_name);
// Obtains the IP address.
sin = (struct sockaddr_in *)ifa->ifa_addr;
printf(">>> ipAddress: %s\n", inet_ntoa(sin->sin_addr));
// Obtains the broadcast address.
sin = (struct sockaddr_in *)ifa->ifa_dstaddr;
printf(">>> broadcast: %s\n", inet_ntoa(sin->sin_addr));
// Obtains the subnet mask.
sin = (struct sockaddr_in *)ifa->ifa_netmask;
printf(">>> subnetMask: %s\n", inet_ntoa(sin->sin_addr));
}
}
freeifaddrs(ifList);
The getifaddrs function does not contain the MAC address. To obtain the MAC address, call the ioctl function by using the SIOCGIFHWADDR, SIOCGIFADDR, and SIOCGIFBRDADDR macros and the SIOCGIFNETMASK parameter.
struct ifreq ifreq;
int sock;
if ((sock = socket (AF_INET, SOCK_STREAM, 0)) < 0)
{
perror ("socket");
return -1;
}
strcpy (ifreq.ifr_name, "eth0"); //Currently, only get eth0
if (ioctl (sock, SIOCGIFHWADDR, &ifreq) < 0)
{
perror ("ioctl");
return -1;
}
return snprintf (mac, len_limit, "%X:%X:%X:%X:%X:%X", (unsigned char) ifreq.ifr_hwaddr.sa_data[0], (unsigned char) ifreq.ifr_hwaddr.sa_data[1], (unsigned char) ifreq.ifr_hwaddr.sa_data[2], (unsigned char) ifreq.ifr_hwaddr.sa_data[3], (unsigned char) ifreq.ifr_hwaddr.sa_data[4], (unsigned char) ifreq.ifr_hwaddr.sa_data[5]);
Parent topic: C/C++