2011年1月4日 星期二

取得目前網路interface與IP address

#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(){
struct ifaddrs *ifaddr, *ifa;
int family, s;
char host[NI_MAXHOST];

if (getifaddrs(&ifaddr) == -1){
perror("getifaddrs");
exit(EXIT_FAILURE);
}

for(ifa = ifaddr; ifa!=NULL; ifa = ifa->ifa_next){
family = ifa->ifa_addr->sa_family;
if(family == AF_INET){
s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
if(s != 0){
printf("getnameinfo() failed: %s\n", gai_strerror(s));
exit(EXIT_FAILURE);
}
printf("Interface=%s\t Address=%s\n", ifa->ifa_name, host);
}
}
return 0;
}


沒有留言:

張貼留言