/* exemple de programme équivalent à nslookup */ #include #include #include #include #include int main(int argc, char *argv[]) { struct hostent *infos; struct in_addr addr; unsigned long int *tempo; /* on teste si argv[1] est une adresse ip ou non */ /* grace au resultat renvoyé par inet_aton */ /* qui prend comme premier paramètre une adresse de la forme */ /* x.y.z.t et la transforme en un entier (base 256) */ if (inet_aton(argv[1], &addr) != 0) { /* on a recupéré dans addr l'adresse ip codée dans un entier */ /* on la caste en chaine de caractères pour que gethost fonctionne */ infos = gethostbyaddr((char *)(&(addr.s_addr)),sizeof(addr.s_addr),AF_INET); printf("%s\n",infos -> h_name); } else { /* argv[1] = nom, inet_aton n'a rien renvoyé dans addr */ infos = gethostbyname(argv[1]); /* on transforme le pointeur sur chaine de car infos -> h_addr */ /* en un pointeur sur un entier pour utiliser la fonction inet_toa */ tempo = (unsigned long int *)(infos -> h_addr); addr.s_addr = *tempo; /* on peut alors appeler la fonction inet_ntoa */ /* qui transforme une adresse représenté sur un int * /* en une adresse de la forme x.y.z.t */ printf("%s \n",inet_ntoa(addr)); } }