Esta é mais uma questão de programação do que um problema de sistema operacional. Você seria melhor servido repostando essa pergunta no stackoverflow junto com o código-fonte associado.
Tendo dito isso. É assim que você faz uma iteração em todas as interfaces de rede física em qualquer Linux.
#include <stdio.h>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
int main (int argc, const char * argv[]) {
struct ifaddrs * ifAddrStruct=NULL;
struct ifaddrs * ifa=NULL;
void * tmpAddrPtr=NULL;
getifaddrs(&ifAddrStruct);
for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
if (!ifa->ifa_addr) {
continue;
}
if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
// is a valid IP4 Address
tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
char addressBuffer[INET_ADDRSTRLEN];
inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer);
} else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6
// is a valid IP6 Address
tmpAddrPtr=&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
char addressBuffer[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer);
}
}
if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct);
return 0;
}
Saída no meu sistema:
ppetraki@:tmp$ make net
cc net.c -o net
ppetraki@:tmp$ ./net
lo IP Address 127.0.0.1
br0 IP Address 10.1.0.12
virbr0 IP Address 192.168.122.1
lo IP Address ::1
eth7 IP Address fe80::56ee:75ff:fe6d:d29e
br0 IP Address fe80::56ee:75ff:fe6d:d29e
Provavelmente, é melhor usar o nome do host e a resolução de nomes para um aplicativo cliente / servidor mais portátil. Boa sorte!