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 :

Cherche fonction qui renvoie l'adresse IP de ma machine (sous windows)


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
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut Cherche fonction qui renvoie l'adresse IP de ma machine (sous windows)
    Bonjour,

    Je suis sous windows et j'ai besoin que mon programme affiche l'adresse IP de la machine sur lequel il tourne. Pourriez vous m'aidez svp?

    Msdn référence des fonctions qui font cela mais j'ai l'impression qu'elles n'existent pas en C car mon compilateur ne les reconnait pas et que je ne les ai pas vu dans winsock2.h

    La seule fonction que j'ai trouvé est gethostbyname, qui devrait renvoyé l'adresse IP quand je lui donne le nom de la machine (que j'obtiens avec gethostname), mais quand je fais un printf du résultat en tant que string, il m'affiche êp6 .

    Merci de vos réponses

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Le gagnant est GetIpAddrTable() ici : http://msdn.microsoft.com/en-us/libr...49(VS.85).aspx

    Un petit bout de ma librairie de fonctions :
    retourne l'adresse IP sous forme de nombre de la carte dont on spécifie le numéro
    NoInterface = 0 ==> localhost = 127.0.0.1 = 0x7f000001
    NoInterface = 1 ==> 1ere carte réseau = ???.???.???.???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    DWORD GetMyIpAddress(const DWORD NoInterface)
    {
    DWORD size = 0;
       DWORD ret = GetIpAddrTable(NULL,      // buffer for mapping table
                            &size,   // size of buffer
                            true);   // sort the table
       if(size == 0)
       {
          ERREUR(L"Error while reading the needed size to get interface");
          ASSERT(FALSE);
          return (DWORD)-1;
       }
     
       // perform the memory alloocation
       BYTE *p = (BYTE *)malloc(size);
       if(p == NULL)
       {
          ERREUR(L"Memory allocation error");
          ASSERT(FALSE);
          return (DWORD)-1;
       }
    MIB_IPADDRTABLE *iface = (MIB_IPADDRTABLE *)p;
     
       ret = GetIpAddrTable(   iface,   // buffer for mapping table
                         &size,   // size of buffer
                         true);   // sort the table
       if(ret != NO_ERROR)
       {
          ERREUR(L"Error while reading the interface list");
          ASSERT(FALSE);
          free(p);
          return (DWORD)-1;
       }
     
       if(NoInterface >= iface->dwNumEntries)
       {
          ERREUR2(L"Bad interface #%d", NoInterface);
          ASSERT(FALSE);
          free(p);
          return (DWORD)-1;
       }
     
    DWORD ip = ntohl(iface->table[NoInterface].dwAddr);
       free(p);
       return ip;
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nonozor Voir le message
    La seule fonction que j'ai trouvé est gethostbyname, qui devrait renvoyé l'adresse IP quand je lui donne le nom de la machine (que j'obtiens avec gethostname), mais quand je fais un printf du résultat en tant que string, il m'affiche êp6 .
    gethostbyname() avec "localhost"... Evidement, il faut apprendre à l'utiliser correctement...

    http://emmanuel-delahaye.developpez....aux.htm#get_ip

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    gethostbyname() avec "localhost"...
    Heu... je pense que cela va retourner 127.0.0.1 (enfin plutôt l'entrée de 127.0.0.1) et pas l'adresse IP "réelle"
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Heu... je pense que cela va retourner 127.0.0.1 (enfin plutôt l'entrée de 127.0.0.1) et pas l'adresse IP "réelle"
    C'est probable, en effet. Il faut alors utiliser le nom de la machine.

    Merci de ta remarque.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut
    Merci!

    Je voudrais afficher l'adresse sous sa forme habituelle (xxx.xxx.xxx.xxx en base 10).
    Je pourrais coder une fonction, mais si il y en a une qui existe déjà, autant l'utiliser.
    En connaissez vous une?

    J'ai trouver inet_ntoa, qui donne une string comme je veux à partir d'un in_addr, mais je n'ai pas trouver de quoi construire un in_addr avec le DWORD que le code fournit

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par nonozor Voir le message
    J'ai trouver inet_ntoa, qui donne une string comme je veux à partir d'un in_addr, mais je n'ai pas trouver de quoi construire un in_addr avec le DWORD que le code fournit
    Avec un tout petit effort, tu aurais pu un truc dans ce genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Input: DWORD in host byte order
    // Output:IP address in dotted decimal format
    CString IpAddress(const DWORD IpAddr)
    {
    CString r;
       r.Format(L"%d.%d.%d.%d",
                                   (IpAddr & 0xff000000) >> 24,
                                   (IpAddr & 0xff0000) >> 16,
                                   (IpAddr & 0xff00) >> 8,
                                   (IpAddr & 0xff) );
    	return r;
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/04/2015, 11h01
  2. Fonction qui renvoie une adresse
    Par markfish55 dans le forum C
    Réponses: 4
    Dernier message: 10/10/2010, 15h36
  3. Fonction qui renvoie erreur dans mon état
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2005, 12h40
  4. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 15h06
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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