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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 162 fois - Téléchargée 34 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
1
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
1
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

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
105
Date d'inscription
samedi 7 décembre 2002
Statut
Membre
Dernière intervention
17 août 2009

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

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.