#include #include #include #include #include #include #include #define LENGTH4 4 #define LENGTH6 16 void put_addr(char *, int); main( int argc, char *argv[]) { int i; struct hostent *host, *rev; if (argc > 1) { printf("Host: %s\n", argv[1]); printf("IPv4:\n"); printf(" Forward Lookup:\n"); if ((host = gethostbyname2(argv[1], AF_INET))) { printf(" Name: %s\n", host->h_name); printf(" Type: %-d\n", host->h_addrtype); printf(" Length: %d\n", host->h_length); printf(" Alias List:\n"); for (i=0; host->h_aliases[i] != NULL; i++) printf(" %s\n", host->h_aliases[i]); printf(" Address List (Reverse Lookup):\n"); for (i=0; host->h_addr_list[i] != NULL; i++) { put_addr(host->h_addr_list[i], AF_INET); if ((rev = gethostbyaddr(host->h_addr_list[i], LENGTH4, AF_INET)) != NULL) { printf(" (%s)\n", rev->h_name); } else printf("\n"); } } else printf(" %s\n", hstrerror(h_errno)); printf("IPv6:\n"); printf(" Forward Lookup:\n"); if ((host = gethostbyname2(argv[1], AF_INET6))) { printf(" Name: %s\n", host->h_name); printf(" Type: %-d\n", host->h_addrtype); printf(" Length: %d\n", host->h_length); printf(" Alias List:\n"); for (i=0; host->h_aliases[i] != NULL; i++) printf(" %s\n", host->h_aliases[i]); printf(" Address List (Reverse Lookup):\n"); for (i=0; host->h_addr_list[i] != NULL; i++) { put_addr(host->h_addr_list[i], AF_INET6); if ((rev = gethostbyaddr(host->h_addr_list[i], LENGTH6, AF_INET6)) != NULL) { printf(" (%s)\n", rev->h_name); } else printf("\n"); } } else printf(" %s\n", hstrerror(h_errno)); } } void put_addr( char *addr, int type) { int i; if (type == AF_INET) { printf(" "); for (i=0; i