/*****************************************************************************/ /* Simple Resolving Program */ /* */ /* The client get the following input: */ /* * Name of the entity we want to get details about */ /* */ /* */ /* */ /* */ /* Process: */ /* The program issues resolving procedure (gethostbyname) and the */ /* addresses returned are printed on the screen. */ /* */ /* */ /* */ /* */ /* */ /* The source is taken from Beej's Guide to Network Programming */ /* */ /* */ /* */ /*****************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/utsname.h> int main(int argc, char **argv) { char *ptr, **pptr; char str[INET_ADDRSTRLEN]; struct hostent *hptr; while (--argc > 0) { ptr = *++argv; if ( (hptr = gethostbyname(ptr)) == NULL) { printf("gethostbyname error for host: %s: %s", ptr, hstrerror(h_errno)); continue; } printf("official hostname: %s\n", hptr->h_name); for (pptr = hptr->h_aliases; *pptr != NULL; pptr++) printf(" alias: %s\n", *pptr); switch (hptr->h_addrtype) { case AF_INET: pptr = hptr->h_addr_list; for ( ; *pptr != NULL; pptr++) { printf("\taddress: %s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str))); if ( (hptr = gethostbyaddr(*pptr, hptr->h_length, hptr->h_addrtype)) == NULL) printf("\t(gethostbyaddr failed)\n"); else if (hptr->h_name != NULL) printf("\tname = %s\n", hptr->h_name); else printf("\t(no hostname returned by gethostbyaddr)\n"); } break; default: perror("unknown address type"); break; } } exit(0); }