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

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

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.