/*****************************************************************************/
/* 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;			/* Pointer for the address list	*/ 
	char	**pptr;			/* Pointer for the alias list	*/
        struct	hostent  *hptr;		/* hostentry struct		*/
 	char	str[INET_ADDRSTRLEN];	/* IP (v4) address length	*/
 
        while (--argc > 0) {
                ptr = *++argv;
                if ( (hptr = gethostbyname(ptr)) == NULL) {
                          printf("gethostbyname error for host: %s: %s\n",ptr, hstrerror(h_errno));
                        continue;
                }
                printf("official hostname: %s\n", hptr->h_name);
 
                for (pptr = hptr->h_aliases; *pptr != NULL; pptr++)
                        printf("\talias: %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)));
                        break;
 
                default:
                        perror("unknown address type");
                        break;
                }
        }
        exit(0);
}