На линуксах. С помощью getifaddrs. Не забыть освобождать память под ifaddrs.
Эта функция просто выводит айпи адреса сетевых интерфейсов.
Если необходимо получить стастику – надо работать с адресами семейства AF_PACKET.
int check_net_interfaces()
{
struct ifaddrs *ifaddr;
int family, s;
if (getifaddrs(&ifaddr) == -1)
{
perror("getifaddrs");
return -1;
}
struct ifaddrs *ifa = ifaddr;
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
{
if (ifa->ifa_addr != NULL)
{
int family = ifa->ifa_addr->sa_family;
if (family == AF_INET || family == AF_INET6)
{
char ip_addr[NI_MAXHOST];
int s = getnameinfo(ifa->ifa_addr,
((family == AF_INET) ? sizeof(struct sockaddr_in) :
sizeof(struct sockaddr_in6)),
ip_addr, sizeof(ip_addr), NULL, 0, NI_NUMERICHOST);
if (s != 0)
{
printf("getnameinfo failed - can't determine our ip_interfaces");
return -1;
}
else
{
/* add some processing here */
printf("IP - %s",ip_addr);
}
}
}
}
freeifaddrs(ifaddr);
return 0;
}