Exemple simple de résolution de nom de domaine [code en c]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 101 fois - Téléchargée 37 fois

Contenu du snippet

Voila je me permet de mettre cette source meme ci d'autres sources l'utilise deja , parce que franchement j'ai un peu galerer pour y arriver "proprement" et simplement.

avec en prime un petite description super simpliste de la fonction gethostbyname et la structure hostent :

Source / Exemple :


#include <stdlib.h>
#include <winsock2.h>

/*
---------------------------------------- 
Prototype de la fonction gethostbyname :
----------------------------------------

hostent *gethostbyname(const char *name);  
	-> renvoie un pointeur sur une structure hostent. 
 
------------------------------------ 
Description de la stucture hostent (host entity ??):
------------------------------------

struct hostent
{
  char *h_name;		// Nom de domaine primaire
  char **h_aliases;		// Alias ??
  int h_addrtype;		// ???
  int h_length;		// Longueur des ips
  char **h_addr_list;		// Liste d'ips pour le nom de domaine
};

#define h_addr h_addr_list[0]  	// Definit directement l'ip exploitable

  • /
int main() { WSADATA WSAData; struct hostent *host; struct in_addr **a; char req_host[255]; printf("Entrer l'Adresse (DNS) de l'hote : "); scanf("%s",req_host); if (WSAStartup(MAKEWORD(2,0), &WSAData) == SOCKET_ERROR) { printf("\nProbleme de Winsock ...\n\n"); return 0; }// Etape obligatoire pour la programmation socket if(host = gethostbyname(req_host)) { // Test pour savoir si l'host a été resolu printf("\nDNS resolu ... \n\n"); printf("Nom\t\t\t: %s\n", host->h_name); printf("Type d'adresse\t\t: %u\n", host->h_addrtype); printf("Taille d'adresse\t: %u\n", host->h_length); for (a=(struct in_addr **)host->h_addr_list; *a; a++) { printf("Adresse(s) Ip\t\t: %s\n", inet_ntoa(**a)); } // Boucle sur toute les ips du nom de domaine printf("\n"); } else printf("\nResolution DNS impossible ...\n\n"); WSACleanup(); // On Cleanup koâ :) system("pause"); return 1; }

Conclusion :


Pour compiler correctement , il faut rajouter -lwsock32 dans les options du compilateur (pour ceux qui saurait pas encore :-) )

C'est une etape importante pour un programme qui gera autre chose que des ip ;-) (client quelconque)

En esperant en aider quelques uns

A voir également

Ajouter un commentaire Commentaires
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 3
8 janv. 2005 à 14:30
sinon j'aurais aimé que tu fasses quelque chose de mieux expliqué parce que là, j'essay de mettre ta source dans mon code, et je ne comprend pas comment faire (au niveau de l'IP) parce que c'est plein de pointeur.
Voilà donc si tu pouvais soit mieux expliquer soit refaire un truc qui récupère la première IP par exemple. Merci
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 3
7 janv. 2005 à 18:07
le code marche chez moi, juste qu'il manque stdio.h !!!!!
mais sinon c'est pas mal, je voulais faire un code comme cela, mais finalement je n'ai plus besoin !!!!
Viper31 Messages postés 96 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 7 août 2005
9 déc. 2004 à 23:46
ouais je sais , ce code est assez patétique ^^
je vais le mettre a jour rapido car j'en ai honte en le relisant
RaphAstronome Messages postés 104 Date d'inscription samedi 7 décembre 2002 Statut Membre Dernière intervention 17 août 2009
9 déc. 2004 à 14:35
Je l'ai testé et ca ne marche pas : "Resolution DNS impossible ...".

Je suis conecté a Internet derriere un routeur

J'ai testé des adresses comme "www.google.fr", "google.fr", le réseau local, "localhost" : rien ...
cs_Draven Messages postés 62 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 8 octobre 2006
16 mars 2003 à 14:38
a ce que je vois on a trouvé la meme solution. c a d le gethostbyname.
++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.