/* findip.c find official name, aliases and ip addresses for a given host name or ip address. Compiles on linux & solaris (-lnsl -lresolv) */ #include #include #include #include //#include extern int h_errno; //for reporting errors on dns lookups main(int argc,char *argv[]) { struct hostent *host; struct in_addr dir_inet; int i; if(argc<2) { fprintf(stderr,"No host specified\n"); exit(1); } if(inet_aton(argv[1],&dir_inet)) /*test if argv[1] is an ip address or a * DNS name */ { if((host=gethostbyaddr((char *)&dir_inet.s_addr,4,AF_INET))==NULL) { herror(argv[1]); /* we use gethostbyname to get DNS name too */ exit(2); } } else /* argv[1] is a dns name */ { if((host=gethostbyname(argv[1]))==NULL) { herror(argv[1]); exit(3); } } /* Official name */ printf("Official name:\n -%s\n",host->h_name); /* Aliases */ i=0; printf("Aliases:\n"); if(host->h_aliases[0]==NULL) printf(" NONE\n"); else while(host->h_aliases[i]!=NULL) printf(" -%s\n",host->h_aliases[i++]); /* ip addresses */ i=0; printf("Addresses:\n"); if(host->h_addr_list[0]==0) printf(" NONE\n"); else while(host->h_addr_list[i]!=0) { memcpy(&dir_inet.s_addr,host->h_addr_list[i++],sizeof(dir_inet.s_addr)); printf(" -%s\n",inet_ntoa(dir_inet)); } }