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

Linux Discussion :

recuperer son ip sur linux ( c++ )


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Par défaut recuperer son ip sur linux ( c++ )
    Bonjour ,

    j'ai porter un module réseau windows sur linux et je l'ai réadapter, cependant lorsque j'essaye de recuperer mon IP soit avec :

    char ac [ 80 ];
    if ( gethostname ( ac, sizeof ( ac ) ) == -1 )
    {
    KIGS_ERROR ( "Can not get local host name.", 1 );
    return 1;
    }

    struct hostent *phe = gethostbyname ( ac );
    if ( phe == 0 )
    {
    KIGS_ERROR ( "Bad host lookup.", 1 );
    return 1;
    }

    int i;
    for ( int i = 0; phe->h_addr_list [ i ] != 0; ++i )
    {
    in_addr addr;
    memcpy ( &addr, phe->h_addr_list [ i ], sizeof ( struct in_addr ) );
    printf ( "Address %d : %s \n", i, inet_ntoa ( addr ) );
    myIP = addr.s_addr;
    }


    soit avec
    in_addr addr = INADDR_ANY;


    les 2 méthodes me retourne mon ip local soit 127.0.1.1 ( qui n'est dailleur pas tout a fait l'ip local ( 127.0.0.1 ) ).

    je cherche a recuperer mon adresse ethernet soit : 192.168.x.x


    comment devrais je faire sur linux plz ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Par défaut
    Tu trouveras sûrement ton bonheur ici

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Par défaut
    merci mais cela ne m'aide pas beaucoup car comme je l'ai mis ci dessus dans mon code j'ai déjà essayer le gethostname et gethostbyname cependant cela ne me retourne que mon adresse sous forme 127.0.1.1

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Par défaut
    Regarde attentivement ce qui est proposé dans la FAQ, ton code comporte quelques erreurs...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Par défaut
    je vien de repredre la FAQ trait pour trait et j'ai exactement le meme resultat.

    le gethostname () me retourne correctement le nom de mon pc cependant le gethostbyname () qui remplit la struct hostent, remplis correctement l'instance en disant qu'il y a 2 type d'adresse différentes ( host->h_addrtype = 2 ) mais dans le listing ( host->h_addr_list ) il n'y a que une seule adresse . Donc lorsque je fait le "inet_ntoa ( addr )" il ne peu me lister que celle qu'il y a dans la liste soit 127.0.1.0.

    et ceci dit apres l'analyse des 2 code ils sont identiques mais formuler au niveau des retour d'erreur d'une manière différente.

    code original :
    char ac [ 80 ] = {0};
    if ( gethostname ( ac, sizeof ( ac ) ) == -1 )
    {
    KIGS_ERROR ( "Can not get local host name.", 1 );
    return 1;
    }

    struct hostent *phe = gethostbyname ( ac );
    if ( phe == 0 )
    {
    KIGS_ERROR ( "Bad host lookup.", 1 );
    return 1;
    }


    for ( int i = 0; phe->h_addr_list [ i ] != 0; ++i )
    {
    in_addr addr;
    memcpy ( &addr, phe->h_addr_list [ i ], sizeof ( struct in_addr ) );
    printf ( "Address %d : %s \n", i, inet_ntoa ( addr ) );
    myIP = addr.s_addr;
    }
    code de la FAQ :

    char hostname[256] = {0};

    if (gethostname(hostname, sizeof(hostname)) == 0)
    {
    printf("%s\n", hostname);
    }
    else
    {
    fprintf(stderr, "La fonction gethostname a echoue.\n");
    }

    struct hostent * host;
    struct in_addr addr;

    if ( ( host = gethostbyname( hostname ) ) != NULL )
    {
    for( int i = 0; host->h_addr_list[i] != NULL; i++)
    {
    memcpy(&addr.s_addr, host->h_addr_list[i], sizeof(addr.s_addr));
    printf("IP : %s\n", inet_ntoa(addr));
    }
    }
    else
    {
    printf("La fonction gethostbyname a echoue.\n");
    }

Discussions similaires

  1. Opera publie une version expérimentale de son navigateur sur Linux
    Par Stéphane le calme dans le forum Opera
    Réponses: 3
    Dernier message: 27/06/2014, 16h03
  2. débuter sur linux et installer son serveur web
    Par thor76160 dans le forum Linux
    Réponses: 41
    Dernier message: 27/02/2011, 12h10
  3. Réponses: 1
    Dernier message: 18/12/2010, 23h30
  4. Boot sur son propre KERNEL linux(pb de config)
    Par didine_napster dans le forum Administration système
    Réponses: 0
    Dernier message: 07/10/2007, 23h04
  5. recuperer les id sur plusieurs champs
    Par matN59 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2004, 10h23

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