1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>
int (int argc, char **argv) {
int status; struct addrinfo hints, *p; struct addrinfo *servinfo; char ipstr[INET_ADDRSTRLEN];
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE;
if ( argc < 2 ){ printf("Usage: %s domain_name", argv[0]); exit(0); }
if ((status = getaddrinfo(argv[1], NULL, &hints, &servinfo)) == -1) { fprintf(stderr, "getaddrinfo error: %sn", gai_strerror(status)); exit(1); }
for (p=servinfo; p!=NULL; p=p->ai_next) { struct in_addr *addr; if (p->ai_family == AF_INET) { struct sockaddr_in *ipv = (struct sockaddr_in *)p->ai_addr; addr = &(ipv->sin_addr); } else { struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr; addr = (struct in_addr *) &(ipv6->sin6_addr); } inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr); }
printf("Address: %sn", ipstr); freeaddrinfo(servinfo);
return 0; }
|
近期评论