Utilisation et fonctionnement de gethostbyname()

Résolu
lolo38550 Messages postés 30 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 12 janvier 2010 - 16 avril 2009 à 13:00
lolo38550 Messages postés 30 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 12 janvier 2010 - 16 avril 2009 à 16:19
Bonjour à tous,

Je développe en C une application client serveur sous windows. Côté client, j'utilise la fonction gethostbyname de la librairie winsock afin de récupérer l'adresse IP du serveur hebergé sur une machine connecté au réseau locale et cela fonctionne.

Pour mes tests, je connecte directement les deux machines ensemble en utilisant un câble croisé. Ce sera d'ailleurs la configuration d'utilisation. Cela fonctionne également mais dans cette configuration ci, la fonction gethostbyname met un certain temps avant de retourner la structure hostent(quelques secondes). Je crois savoir qu'elle doit utiliser plusieurs méthodes pour résoudre le nom. Elle doit déjà étudier le fichier host se trouvant dans le répertoire %System\system32\etc\ puis contacter le serveur DNS en cas d'échec. Dans le cas d'une connexion par câble croisé, la requête au DNS ne fonctionne évidement pas non plus, le serveur étant inaccessible.Du coup, je pense que l'attente que je constate est dû aux timeout des différentes recherches.

Mes questions sont les suivantes:
1/ Comme se fait-ce que la fonction gethostbyname fonctionne (c'est à dire me retourne la bonne adresse IP) alors que mon fichier host est vide (en fait, il ne contient seulement l'adresse de localhost) et que dans ce cas, on ne peut pas communiquer avec le serveur DNS ? J'immagine qu'il doit y avoir une autre méthode de résolution mais je ne la connais pas.
2/ Comment faire pour changer l'ordre d'utilisation des différentes méthodes utilisées par gethostbyname ?

Merci d'avance
A voir également:

2 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
16 avril 2009 à 14:13
Salut,

1/ Aucune idée. Une requête de broadcast peut être. -> Wireshark.
3
lolo38550 Messages postés 30 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 12 janvier 2010
16 avril 2009 à 16:19
Salut et merci de ta réponse!

En effet, je n'avais pas pensé à utiliser Wireshark... ce qui m'a permis de répondre à ma première question:

Lorsque je suis sur le réseau local, mon client envoie une requête à l'adresse du serveur DNS en utilisant le protocole DNS afin de récupérer l'adresse IP de la machine hébergeant mon serveur.

Dans la configuration où les deux machines sont reliées par un cable croisé, une requête est envoyé à l'adresse de diffusion en utilisant le protocole NBNS et c'est la machine hôte du serveur qui répond en envoyant son adresse IP.

Je pense donc que dans ce cas, mon client se met en attente des réponses, d'où la lenteur que je constate!

Merci de ton aide !
0
Rejoignez-nous