Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* lookup.c -- print basic DNS information on an Internet host */ /* Given either a hostname or IP address on the command line, print the canonical hostname for that host and all of the IP numbers and hostnames associated with it. */ #include <netdb.h> /* for gethostby* */ #include <sys/socket.h> #include <netinet/in.h> /* for address structures */ #include <arpa/inet.h> /* for inet_ntoa() */ #include <stdio.h> int main(int argc, char ** argv) { struct hostent * answer; struct in_addr address, ** addrptr; char ** next; if (argc != 2) { fprintf(stderr, "only a single argument is supported\n"); return 1; } /* If the argument looks like an IP, assume it was one */ if (inet_aton(argv[1], &address)) answer = gethostbyaddr((char *) &address, sizeof(address), AF_INET); else answer = gethostbyname(argv[1]); /* the hostname lookup failed :-( */ if (!answer) { herror("error looking up host"); return 1; } printf("Canonical hostname: %s\n", answer->h_name); /* if there are any aliases, print them all out */ if (answer->h_aliases[0]) { printf("Aliases:"); for (next = answer->h_aliases; *next; next++) printf(" %s", *next); printf("\n"); } /* display all of the IP addresses for this machine */ printf("Addresses:"); for (addrptr = (struct in_addr **) answer->h_addr_list; *addrptr; addrptr++) printf(" %s", inet_ntoa(**addrptr)); printf("\n"); return 0; }