diff options
Diffstat (limited to 'src/bin/gethostbyname.c')
-rw-r--r-- | src/bin/gethostbyname.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/bin/gethostbyname.c b/src/bin/gethostbyname.c index b670b1e..a63f540 100644 --- a/src/bin/gethostbyname.c +++ b/src/bin/gethostbyname.c @@ -2,23 +2,25 @@ #include <netdb.h> #include <arpa/inet.h> +#define SILLYLIMIT 256 + int main(int argc,char *argv[]) { - int i; - if(argc < 2) return 1; - char *addr; + char buf[SILLYLIMIT]; struct in_addr saddr; - if(inet_aton(argv[1],&saddr)) - addr=inet_ntoa(saddr); - else - addr=argv[1]; - struct hostent *he=gethostbyname(addr); - - for(i=0;he->h_addr_list[i];i++) { - printf("%u.%u.%u.%u\n", - (unsigned char)he->h_addr_list[i][0], - (unsigned char)he->h_addr_list[i][1], - (unsigned char)he->h_addr_list[i][2], - (unsigned char)he->h_addr_list[i][3]); + struct in6_addr saddr6; + struct hostent *he; + if(argc<2) return 1; + if(!(he=gethostbyname2( + argc<3 + ?inet_aton(argv[1],&saddr) + ?inet_ntoa(saddr) + :argv[1] + :inet_pton(AF_INET6,argv[1],&saddr6) + ?inet_ntop(AF_INET6,&saddr6,buf,SILLYLIMIT) //no point, but whatever + :argv[1] + ,argc<3?AF_INET:AF_INET6))) return 1; + for(;*(he->h_addr_list);he->h_addr_list++) { + printf("%s\n",inet_ntop(argc<3?AF_INET:AF_INET6,*(he->h_addr_list),buf,SILLYLIMIT)); } return 0; } |