IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

récupérer IP à l'aide de getaddrinfo


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut récupérer IP à l'aide de getaddrinfo
    Bonjour à tous,

    Je galère depuis hier soir à récupérer une adresse ip depuis un nom d'hôte.

    J'ai vu que getaddrinfo remplace la fonction gethostbyname, j'ai réussi à récupérer mon ip à l'aide de gethostbyname mais je souhaiterai faire la même chose avec getaddrinfo (étant donné que le man de gethostbyname indique que cette fonction est obsolète et doit être remplacée par getaddrinfo).

    Dans le même genre d'idée, j'ai reussi à récupérer un nom d'hôte depuis une ip à l'aide de getnameinfo()

    merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Bonjour,

    Où bloques-tu ?

    La man page de getaddrinfo() nous apprend que cette fonction attend quatre paramètres : « node », « service », « hints » et « res » et que, dans l'absolu, l'un des deux paramètres « node » et « service » peut être éventuellement NULL. On lit également que les « hints », censés préciser le type d'adresse que l'on cherche, peut être NULL lui aussi, indiquant ainsi que tout type d'adresse est acceptable. On lit enfin que « node » est une chaîne de caractères qui spécifie l'adresse soit de manière numérique, soit sous forme de nom d'hôte.

    « res » est l'adresse d'un pointeur que tu auras déclaré. Ceci car la fonction alloue sa propre mémoire et a besoin de déposer son adresse quelque part. C'est pour cela qu'il faut penser à la libérer à la fin avec freeaddrinfo().

    Dès lors, la forme la plus simple que tu puisses écrire ressemble à ça :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct addr info * res = NULL; /* Pointeur */
     
    getaddrinfo ("developpez.net",NULL,NULL,&res);

    Par contre, il faut toujours vérifier le code de retour de la fonction car les causes d'echec sont nombreuses. Ensuite, il faut aller chercher l'adresse elle-même et ça, ce n'est pas forcément très difficile, mais c'est assez fouillis : elle est cachée au fond de quatre ou cinq imbrications de structures successives.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    Bonjour,

    mon problème est en effet d'aller chercher cette fameuse adresse, la structure addrinfo n'étant pas très claire étant donné qu'elle pointe elle même vers d'autres structures addrinfo.

    En fait je souhaite juste faire une fonction du type

    char* getIP(char * hote) {

    }

    Le tout est de savoir comment utiliser la fonction getaddrinfo.

    A l'inverse pour retrouver un nom d'hôte depuis un ip j'ai déjà programmé la fonction suivante qui marche très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char* getName(const char* ip) {
    	struct sockaddr_in sa;
    	sa.sin_family = AF_INET;
    	sa.sin_addr.s_addr = inet_addr(ip); 
    	char hbuf[NI_MAXHOST];
     
    	if (getnameinfo((struct sockaddr*) &sa, 16, hbuf, sizeof(hbuf), NULL,0,   NI_NAMEREQD)!=0) {
    		printf("Erreur  GETNAMEINFO : %s\n",gai_strerror(errno));	// affichage si erreur
    		return NULL;
    	}
    	return strdup(hbuf);	
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    Bonjour à tous,

    ma semaine recommence et je ne m'en sort toujours pas avec ce problème de récupération d'adresse IP, voici le code que je vien de tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    char* getIpInfos(char * name) {
      struct addrinfo * res = NULL;
      int retour;
      retour = getaddrinfo("localhost",NULL,NULL,&res);
      while (res->ai_next != NULL) {
        printf("retour : %d name : %s \n",retour,res->ai_addr->sa_data);
        res = res->ai_next;
      }
      freeaddrinfo(res);
      return strdup("test");
    }
    Quand je fais appel à cette fonction, voici ce que j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    retour 0 name :
    retour 0 name :
    retour 0 name :
    retour 0 name :
    retour 0 name :
    A noter que ma fonction permettant de retrouver le nom d'hôte depui un ip fonctionn bien vu que getName("127.0.0.1"); me renvoie localhost.

    merci d'avance pour votre aide :s:s

Discussions similaires

  1. RÉcupérer no à l'aide des regex
    Par punisher999 dans le forum Général Java
    Réponses: 5
    Dernier message: 12/05/2010, 12h27
  2. Réponses: 2
    Dernier message: 14/01/2007, 23h17
  3. [JSTL] Récupérer une valeur dans ma map à l'aide d'une clé
    Par Sim dans le forum Taglibs
    Réponses: 1
    Dernier message: 29/08/2006, 10h03
  4. Aide : Décoder, récupérer le contenu d'un fichier .pst
    Par ATTIA dans le forum API, COM et SDKs
    Réponses: 10
    Dernier message: 23/03/2006, 16h11
  5. Outil de reverse pour récupérer le texte d'un fichier d'aide
    Par Laurent Dardenne dans le forum Outils
    Réponses: 3
    Dernier message: 06/02/2006, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo