Get IP Address and Sunet Mask Of Each Network Interface
#include <stdio.h>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#define MAX_NETWORK_ADAPTORS 3
#define MAX_ADAPTOR_NAME_LENGTH 20
BYTE found_network_adaptors_count;
char NetworkAdaptorName[MAX_NETWORK_ADAPTORS][MAX_ADAPTOR_NAME_LENGTH];
char NetworkAdaptorIpAddress[MAX_NETWORK_ADAPTORS][INET_ADDRSTRLEN];
char NetworkAdaptorSubnetMask[MAX_NETWORK_ADAPTORS][INET_ADDRSTRLEN];
//***************************************************
//***************************************************
//********** READ NETWORK ADAPTOR SETTINGS **********
//***************************************************
//***************************************************
void network_read_network_adaptor_settings (void)
{
struct ifaddrs * ifAddrStruct = NULL;
struct ifaddrs * ifa = NULL;
void * tmpAddrPtr = NULL;
found_network_adaptors_count = 0;
//Get each network interface on this machine
getifaddrs(&ifAddrStruct);
for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next)
{
//----- GET NEXT NETWORK INTERFACE ------
if (ifa->ifa_addr->sa_family == AF_INET)
{
//----- IPV4 ADDRESS ------
//GET IP ADDRESS
tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
char IpAddressBuffer[INET_ADDRSTRLEN];
inet_ntop(AF_INET, tmpAddrPtr, IpAddressBuffer, INET_ADDRSTRLEN);
printf("%s IPV4 Address %s\n", ifa->ifa_name, IpAddressBuffer);
//GET SUBNET MASK
tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_netmask)->sin_addr;
char SnAddressBuffer[INET_ADDRSTRLEN];
inet_ntop(AF_INET, tmpAddrPtr, SnAddressBuffer, INET_ADDRSTRLEN);
printf("%s Subnet Mask %s\n", ifa->ifa_name, SnAddressBuffer);
if (strncmp((const char*)&IpAddressBuffer[0], "127.0.0.1", 10) != 0)
{
//----- NOT THE LOOPBACK ADDRESS - ADD TO OUR SETTINGS BUFFER -----
if (found_network_adaptors_count < MAX_NETWORK_ADAPTORS)
{
strncpy(&NetworkAdaptorName[found_network_adaptors_count][0], ifa->ifa_name, MAX_ADAPTOR_NAME_LENGTH);
strncpy(&NetworkAdaptorIpAddress[found_network_adaptors_count][0], IpAddressBuffer, INET_ADDRSTRLEN);
strncpy(&NetworkAdaptorSubnetMask[found_network_adaptors_count][0], SnAddressBuffer, INET_ADDRSTRLEN);
found_network_adaptors_count++;
}
}
}
else if (ifa->ifa_addr->sa_family == AF_INET6)
{
//----- IPV6 ADDRESS -----
//GET IP ADDRESS
tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
char addressBuffer[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
printf("%s IPV6 Address %s\n", ifa->ifa_name, addressBuffer);
}
} //for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next)
//Reclaim the storage used by getifaddrs
if (ifAddrStruct != NULL)
freeifaddrs(ifAddrStruct);
return;
}
