На линуксах. С помощью 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; }