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 :

convertir une adresse IP (string) en int


Sujet :

Réseau C

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut convertir une adresse IP (string) en int
    Bonjour,

    Je dois convertir une adresse (chaine de caractère) IPV4 en entier (int). il y a tellement de méthodes "fait maison" que je trouve sur le net en google-ant, mais j'aimerais avoir votre avis.

    J'ai deux questions à vous poser.

    Tout d'abord, j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <netinet/in.h>
    int inet_aton(const char *cp, struct in_addr *inp);
    Q1: J'aimerais savoir si c'est la bonne manière / fonction à utiliser.

    Je suppose que la fonction inverse (inet_ntoa) est utilisé pour convertir une adresse IPV4 de 32 bits qu'on lit dans un datagramme IP en chaine de caractère...
    Q2: corrigez moi si ce n'est pas le cas

    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 861
    Points : 2 207
    Points
    2 207
    Par défaut
    Utiliser inet_addr ne te convient pas ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut
    Salut ikuzar,

    Je ne fait que citer les pages de man:

    BSD 4.3. inet_addr() et inet_ntoa() sont spécifiées dans POSIX.1-2001. inet_aton() n'est pas spécifiée dans POSIX.1-2001 mais est disponible sur la plupart des systèmes.

    Mais il est aussi spécifié:

    La fonction inet_addr() convertit l'adresse Internet de l'hôte cp depuis la notation numérique pointée IPV4 en une donnée binaire dans l'ordre des octets du réseau. Si l'adresse est invalide, INADDR_NONE (généralement -1) est renvoyé. L'utilisation de cette fonction pose problème car -1 est une adresse valide (255.255.255.255). Évitez-la au profit de inet_aton(), inet_pton(3) ou getaddrinfo(3) qui fournissent un renvoi d'erreur plus propre.

    Utilise donc inet_aton() si tu le peut (ton système le supporte) car effectivement, une fonction( inet_addr() ) qui retourne une valeur ET un code de retour c'est pas très classe...
    Petite précision : inet_aton ne convertis pas une chaine de caractères en int! (le retour c'est le code d'erreur), inet_aton stocke ton adresse dans la structure pointée. Et donc pour la convertir en int il faut aller chercher dans la structure le champ s_addr qui est un unsigned int.

    Toujours la page de man:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef uint32_t in_addr_t;
     
    struct in_addr {
        in_addr_t s_addr;
    };
    Si tu veux un truc portable, utilise inet_addr() vérifie simplement que ta chaine ne correspond pas a 255.255.255.255 avec strncmp.

    Pour la conversion inverse, char *inet_ntoa(struct in_addr in) par contre, il te faut fournir la structure contenant l'adresse ( et au besoin la convertir depuis l'int retourné par inet_aton() en in_addr_t ce qui est assez chiant)

    Bref, si tu ne veux pas te prendre la tête, utilise inet_aton et inet_ntoa, mais attention à la portabilité!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir une adresse serveur en ip.
    Par LeMiMon dans le forum Réseau
    Réponses: 4
    Dernier message: 10/06/2007, 20h33
  2. [VB6] convertire une date en string
    Par acrenn dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 03/05/2006, 18h30
  3. Convertir une date en string
    Par hugo69 dans le forum Access
    Réponses: 6
    Dernier message: 28/04/2006, 18h40
  4. Réponses: 14
    Dernier message: 29/06/2005, 11h22

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