参考链接:
http://en.wikipedia.org/wiki/Getaddrinfo
代码:
01 | /* ip_to_hostname ip */ |
03 | #include <sys/socket.h> |
10 | int main( int argc, char *argv[]) |
14 | fprintf (stderr, "Usage: %s hostname\n" , argv[0]); |
17 | struct addrinfo hints; |
18 | struct addrinfo *result, *result_pointer; |
20 | /* obtaining address matching host */ |
21 | memset (&hints, 0, sizeof ( struct addrinfo)); |
22 | hints.ai_family = AF_UNSPEC; |
23 | hints.ai_socktype = SOCK_STREAM; |
24 | hints.ai_flags = AI_CANONNAME | AI_NUMERICHOST; |
25 | hints.ai_protocol = 0; /* any protocol */ |
27 | // ret = getaddrinfo(argv[1], NULL, &hints, &result); |
28 | ret = getaddrinfo(argv[1], NULL, &hints, &result); |
31 | fprintf (stderr, "getaddrinfo: %s\n" , gai_strerror(ret)); |
34 | /* traverse the returned list and output the ip addresses */ |
35 | for (result_pointer = result; result_pointer != NULL; result_pointer = result_pointer->ai_next) |
37 | char hostname[1025] = "" ; |
38 | ret = getnameinfo(result_pointer->ai_addr, result_pointer->ai_addrlen, hostname, sizeof (hostname), NULL, 0, NI_NAMEREQD); |
41 | fprintf (stderr, "error in getnameinfo: %s \n" , gai_strerror(ret)); |
45 | printf ( "hostname: %s \n" , hostname); |
47 | // printf("hostname: %s \n", result_pointer->ai_canonname); |
01 | /* hostname_to_ip hostname */ |
03 | #include <sys/socket.h> |
10 | int main( int argc, char *argv[]) |
14 | fprintf (stderr, "Usage: %s hostname\n" , argv[0]); |
17 | struct addrinfo hints; |
18 | struct addrinfo *result, *result_pointer; |
20 | /* obtaining address matching host */ |
21 | memset (&hints, 0, sizeof ( struct addrinfo)); |
22 | hints.ai_family = AF_UNSPEC; |
23 | hints.ai_socktype = SOCK_STREAM; |
24 | hints.ai_flags = AI_CANONNAME; |
25 | hints.ai_protocol = 0; /* any protocol */ |
27 | // ret = getaddrinfo(argv[1], NULL, &hints, &result); |
28 | ret = getaddrinfo(argv[1], NULL, &hints, &result); |
31 | fprintf (stderr, "getaddrinfo: %s\n" , gai_strerror(ret)); |
34 | /* traverse the returned list and output the ip addresses */ |
35 | for (result_pointer = result; result_pointer != NULL; result_pointer = result_pointer->ai_next) |
37 | char hostname[1025] = "" ; |
38 | ret = getnameinfo(result_pointer->ai_addr, result_pointer->ai_addrlen, hostname, sizeof (hostname), NULL, 0, NI_NUMERICHOST); |
41 | fprintf (stderr, "error in getnameinfo: %s \n" , gai_strerror(ret)); |
46 | printf ( "IP: %s \n" , hostname); |
结果:
root@localhost :/home/James/mypro/Linux-Pro/Network# ./hostname_to_ip baidu.com
IP: 123.125.114.144
IP: 220.181.111.85
IP: 220.181.111.86
root@localhost :/home/James/mypro/Linux-Pro/Network# ./ip_to_hostname 220.181.111.86
error in getnameinfo: Name or service not known
root@localhost :/home/James/mypro/Linux-Pro/Network# ./ip_to_hostname 10.0.0.78
hostname: localhost
root@localhost:/home/James/mypro/Linux-Pro/Network# ./ip_to_hostname 59.66.137.62
hostname: th137062.ip.tsinghua.edu.cn
root@localhost:/home/James/mypro/Linux-Pro/Network# ./ip_to_hostname 202.106.182.229
hostname: mail182-229.sinamail.sina.com.cn
root@localhost:/home/James/mypro/Linux-Pro/Network# ./ip_to_hostname 211.147.4.7
hostname: mail3.douban.com