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 :

code C, pas la bonne ip


Sujet :

Réseau C

  1. #1
    vohu57
    Invité(e)
    Par défaut code C, pas la bonne ip
    Bonjour,

    J'ai un petit problème
    J'ai un code pour récupérer l'ip du pc, et elle me donne uniquement l'ip 127.0.0.1...
    C'est assez génant, je ne comprends pas pourquoi dans le tableau, il n'y a pas les autres adresses.

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <unistd.h>
     
    void hostname_f(char *host);
    void ip_f(const char *HostName, char *ipret);
    void proxyAd_f(const char *ip, char *proxy);
     
    int main()
    {
        char *hostname_v = NULL;
        hostname_v = malloc(256);
        hostname_f(hostname_v); //
        printf("%s", hostname_v);
     
        char *ip_v = NULL;
        ip_v = malloc(256);
        ip_f(hostname_v, ip_v); //
        printf("%s", ip_v);
     
     
        free(hostname_v);
        free(ip_v);
     
        return 0;
    }
     
     
    void hostname_f(char *host)
    {
        char hostname[256];
     
        if (gethostname(hostname, sizeof(hostname)-1) == 0){
            printf("\n(hostname_f : %s)\n", hostname);
        }
        else {
            fprintf(stderr, "La fonction gethostname a echoue.\n");
        }
        strcpy(host ,  hostname); //on change le contenu de host qui est un pointeur de hostname_v
    }
     
    void ip_f(const char *HostName, char *ipret)
    {
        struct hostent * host;
        struct in_addr addr;
     
        if ((host = gethostbyname(HostName)) != NULL) {
            int i;
            for(i = 0; host->h_addr_list[i] != NULL; i++) {
                memcpy(&addr.s_addr, host->h_addr_list[i], sizeof(addr.s_addr));
                printf("\n(PrintIp : %s)\n", inet_ntoa(addr));
            }
        }
        else {
            printf("La fonction gethostbyname a echoue.\n");
        }
        strcpy(ipret, inet_ntoa(addr));
    }
    Merci d'avance :$

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Ton gethostname reçoit en paramètre une chaine vide. Donc forcément il te renverra une valeur par défaut c'est à dire localhost. Met quelque chose de cohérent dans ton hostname_v et il te renverra auter chose.

  3. #3
    vohu57
    Invité(e)
    Par défaut
    Elle ne reçoit pas une chaine vide, elle reçoit le contenu de la variable hostname_v que j'ai trouvé grace à la fonction hostname_f, qui me renvoie le nom de la machine.

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Ah attend, ta fonction hostname_f, elle renvoit rien. Or tu lui passe un tableau par copie en paramètre donc si tu retourne pas le tableau, tu peux faire tout ce que tu veux dans hostname_f, il ne se passera rien. Ton hostname_v sera toujours vide.

    grace à la fonction hostname_f, qui me renvoie le nom de la machine.
    De quelle machine tu parle? de la tienne ou de celle qui se trouve sur le réseau local?

  5. #5
    vohu57
    Invité(e)
    Par défaut
    Je comprends pas...

    tu dis que hostname_v sera toujours vide, alors que dans ma fonction main(), "printf("%s", hostname_v);"

    j'ai modifié ma fonction ip_f ainsi pour voir si HostName est vide... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void ip_f(const char *HostName, char *ipret)
    {
        struct hostent * host;
        struct in_addr addr;
     
        printf("\ntest %s\n", HostName);
    ...
    réponse :
    j'ai bien le nom de mon PC qui s'affiche...

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    juste pour clarifier un truc: c'est bien la machine sur laquelle tu code dont tu essaye de récupérer l'ip? parce que si c'est le cas, c'est normal qu'il te renvoie 127.0.0.1, vu que c'est l'adresse local.

    Sinon, dans ton main tu déclare un pointeur que tu malloc. Quand tu le passe en paramètre, c'est une copie de ta variable qui va être envoyé à ta fonction. Tu dois donc récupérer le retour de hostname_v :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    char *hostname_f(char *host)
    {
        char hostname[256];
     
        if (gethostname(hostname, sizeof(hostname)-1) == 0){
            printf("\n(hostname_f : %s)\n", hostname);
        }
        else {
            fprintf(stderr, "La fonction gethostname a echoue.\n");
        }
        host = strcpy(host ,  hostname); //on change le contenu de host qui est un pointeur de hostname_v
        return (host);
    }
    et dans ton main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     hostname_v = hostname_f(hostname_v);

  7. #7
    vohu57
    Invité(e)
    Par défaut
    Oui, c'est la machine sur laquelle je code dont je veux l'ip.. mais je veux l'ip de la carte ethernet ou wifi, pas celle là

    Pour ta modif, je l'ai faite, et à la place j'ai un :



    /home/vohu/Bureau/localhost.c||In function ‘main’
    /home/vohu/Bureau/localhost.c|22|error: void value not ignored as it ought to be|
    ||=== Build finished: 1 errors, 0 warnings ===|

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    pour tes erreurs, c'est parce que tu n'as pas modifié le prototype de hostname_f correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *hostname_f(char *host)
    mais je veux l'ip de la carte ethernet ou wifi
    Je ne pense pas que tu puisse récupérer cette ip en question avec cette méthode. Cette méthode permet de récupérer l'ip d'une machine sur un réseau local afin de communiquer par la suite avec elle. Or pour communiquer en local, le système utilise automatiquement 127.0.0.1. Si tu veux communiquer avec ta machine, utilise cette adresse là.

    Voici cependant un lien qui pourrait t'interesser. C'est le code source de la commande Unix ifconfig, qui affiche un tas d'informations sur ta configuration réseau (et entre autre, l'adresse que tu cherche à récupérer).

Discussions similaires

  1. Code qui ne donne pas la bonne somme
    Par gangsterus dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 15/12/2008, 13h15
  2. Pourquoi ce code ne m'affiche pas la bonne valeur ?
    Par Mr. X dans le forum Débuter
    Réponses: 20
    Dernier message: 19/09/2008, 09h48
  3. la police qui s'affiche n'est pas la bonne
    Par tiboleo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 13/07/2005, 13h22
  4. [C#] Pb de DLL : ne trouve pas la bonne version
    Par sokette dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/04/2005, 14h59
  5. je ne trouve pas la bonne syntaxe
    Par poelvo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2003, 01h30

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