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 :

Comment afficher les noms de la liste h_addr_list


Sujet :

Réseau C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Comment afficher les noms de la liste h_addr_list
    Bonjour,

    j'aimerais afficher les noms contenus dans h_addr_list (dans une boucle), mais j'obtiens des erreurs d'affichage : certains caractères n'ont pas été bien convertis.
    Par exemple, je veux lister les adresses IP et les noms des machines qui se trouvent à l'adresse www.hotmail.com.
    J'obtiens ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    www.hotmail.com :
    	 Nom : @�disp@�.kahuna.glbdns.microsoft.com  // problème d'affichage ?
    	 Adresse IP : 64.4.20.186
    	 Nom : @�.kahuna.glbdns.microsoft.com // problème d'affichage ?
    	 Adresse IP : 64.4.20.174
    	Nb d'adresses IP = 2
    Voici les sources :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void afficher_ip(struct hostent *host_entry){
      int i, k;
      for(i=0; host_entry->h_addr_list[i]; i++){
        printf("\t Nom : %s\n", host_entry->h_addr_list[i]);
        printf("\t Adresse IP : %s\n", inet_ntoa(*(IN_ADDR *) host_entry->h_addr_list[i]));
        k = i+1;
      }
      printf("\tNb d'adresses IP = %d\n\n", k);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void affiche(char *name){
      struct hostent *hostinfo = NULL;
      const char *hostname = name;
      hostinfo = gethostbyname(hostname);
      if (hostinfo == NULL){ /* l'hôte n'existe pas */
        fprintf (stderr, "Unknown host %s.\n", hostname);
        exit(EXIT_FAILURE);
      }
      printf("\n%s :\n", hostname);
      afficher_ip(hostinfo);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int main(int argc, char *argv){
      affiche("www.hotmail.com");
      return EXIT_SUCCESS;
    }
    Si vous avez une idée pour que l'affichage soit correct.
    Merci.

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Le nom est pécifié par le champ h_name et non h_addr_list[i].

    Autres remarques qui n'ont rien à voir avec ton problème mais histoire d'améliorer ton code :
    - Caster host_entry->h_addr_list[i] en IN_ADDR n'est pas portable car la structure IN_ADDR peut varier d'un système à un autre. Utilise memcpy.
    - La variable k ne sert à rien. A la fin de la boucle, i et k ont la même valeur.
    - void affiche(const char *name) est un meilleur prototype et la variable hostname dans cette fonction ne sert non plus à rien. Utilise directement name.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette réponse rapide et ces remarques.

    Je voulais afficher la représentation DNS de chaque adresse IP de la liste, est-ce tout de même possible ?
    J'ai corrigé en affichant le champ h_name.

    Je n'avais pas mentionné que j'ai fait typedef struct in_addr IN_ADDR; pour utiliser la fonction char *inet_ntoa(struct in_addr in), je ne comprends pas cet éventuel problème de portabilité que tu évoquais.

    J'ai utilisé la variable k pour afficher le nombre d'adresses IP au total dans cette liste, peut-on le savoir directement avec la taille de h_addr_list ?

    D'accord pour la fonction affiche, c'est mieux de mettre const char *name en argument.

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    - La norme dit juste que la structure in_addr doit au moins contenir un champ appelé s_addr. Tu sais ce que c'est que s_addr . La structure peut donc en théorie contenir d'autres champs et rien ne garantit non plus qu'elle doit commencer par le champ s_addr. C'est pour cela que le cast n'est pas portable. En pratique tu peux dire que je ne suis qu'un pauvre idéaliste qui veut que tout soit parfait .

    - Il n'y a pas d'équivalent de ta variable k dans la structure hostent.

Discussions similaires

  1. [Exchange 2010] Comment Afficher les noms de la liste d'adresse dans l'ordre 'Nom Prénom' ?
    Par tamyme dans le forum Exchange Server
    Réponses: 1
    Dernier message: 05/05/2011, 10h33
  2. Réponses: 10
    Dernier message: 26/12/2008, 11h17
  3. Comment afficher les noms des personnes stockés ds un tableau?
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 29
    Dernier message: 26/04/2008, 00h55
  4. comment afficher les noms de fichiers specifiques
    Par pictree dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 20/03/2008, 16h55
  5. Réponses: 3
    Dernier message: 11/07/2007, 10h10

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