Ip ...
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Ip ...



  1. #1
    invitee17aeca5

    Ip ...


    ------

    salut

    voila, j'ai fait un tout petit programme qui n'affiche que l'IP.

    pour cela, il fait un IPconfig, scanne la console, et isole l'IP.

    maintenant, j'aimerai abandonner ce bricolage pour quelquechose de plus intéressant.

    existe il un genre d'intéruption, ou une adresse mémoire ou serai stoquée l'IP ?

    merci, ++ Tix.

    -----

  2. #2
    inviteb9f49292

    Re : Ip ...

    Salut,
    Cela dépends de ton système d'exploitation.... Sous linux Fedora Core 5 (et je pense toutes les distributions basées sur la red-hat) tu trouveras ton bonheur "/etc/sysconfig/networking/devices/ifcfg-eth0"... Chez windows j'imagine que tu trouveras ça dans la base de registre, le mieux est que tu fasses une recherche avec ton adresse IP pour trouver la clef concernée.

  3. #3
    invitee17aeca5

    Re : Ip ...

    hm, okok
    merci

    et, pour lire la clef en question, a partir d'un programme c/c++, c'est possible ?

  4. #4
    inviteb9f49292

    Re : Ip ...

    Je pense que microsoft à prévu cela. Googlelise "registry API" tu devrais trouver ton bonheur.

  5. A voir en vidéo sur Futura
  6. #5
    invite597d4991

    Re : Ip ...

    http://tangentsoft.net/wskfaq/examples/ipaddr.html
    Ceci devrait t'intéresser... (pour windows)
    Pour linux, ça doit pouvoir se faire avec les IOCTL, jette un coup d'oeil sur man ioclt_list.

  7. #6
    invite3a702c9c

    Re : Ip ...

    Sous Unix, j'ai souvenir de fonctions C++ qui s'appelaient..
    GetHostname() et GetHostByName()

  8. #7
    invitee17aeca5

    Re : Ip ...

    merci tous, j'ai cependant qielques problemes pour comprendre la source fournie par overmind s:/ pouriez vous m'éclairer ? (je suis sous codeblocks, et ca plante ,soyez patient )

    merci, ++ Tix.

  9. #8
    invite597d4991

    Re : Ip ...

    Code:
    char ac[80]; 
        if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR)
     {
            cerr << "Error " << WSAGetLastError() <<
                    " when getting local host name." << endl;
            return 1;
        }
        cout << "Host name is " << ac << "." << endl;
    Rien de mirobolant jusqu'ici, on utilise gethostname pour avoir le nom de la machine... qu'on met dans *ac avec un contrôle d'erreur.

    Code:
        struct hostent *phe = gethostbyname(ac);
        if (phe == 0) {
            cerr << "Yow! Bad host lookup." << endl;
            return 1;
        }
    On convertit, comme le disait BioTop, la chaine ac en la structure hostent correspondante, via gethostbyname.
    Code:
        for (int i = 0; phe->h_addr_list[i] != 0; ++i)
    {
            struct in_addr addr;
            memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
            cout << "Address " << i << ": " << inet_ntoa(addr) << endl;
        }
    Ici le point délicat j'imagine?
    (Rappel (enfin sous unix, mais ça doit être pareil ailleurs)
    Code:
    struct hostent {
       char    *h_name;       /* Nom officiel de l'hôte.   */
       char   **h_aliases;    /* Liste d'alias.            */
       int      h_addrtype;   /* Type d'adresse de l'hôte. */
       int      h_length;     /* Longueur de l'adresse.    */
       char   **h_addr_list;  /* Liste d'adresses.        */
    }
    )
    On boucle sur la liste de pointeurs d'adresses terminée par un pointeur nul, on copie chaque in_addr sur l'emplacement qui lui est destiné (memcpy), puis on la convertit en chaine, puis on l'imprime, puis on recommence.
    Simple non?

  10. #9
    invitee17aeca5

    Re : Ip ...

    merci, mais, on ne doit pas parler du meme code alors O_o
    Code:
    // Borland C++ 5.0: bcc32.cpp getlocalip.cpp
    // Visual C++ 5.0: cl getlocalip.cpp wsock32.lib
    //
    // This sample program is hereby placed in the public domain.
    
    #include <iostream.h>
    #include <winsock.h>
    
    int doit(int, char **)
    {
        char ac[80];
        if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
            cerr << "Error " << WSAGetLastError() <<
                    " when getting local host name." << endl;
            return 1;
        }
        cout << "Host name is " << ac << "." << endl;
    
        struct hostent *phe = gethostbyname(ac);
        if (phe == 0) {
            cerr << "Yow! Bad host lookup." << endl;
            return 1;
        }
    
        for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
            struct in_addr addr;
            memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
            cout << "Address " << i << ": " << inet_ntoa(addr) << endl;
        }
        
        return 0;
    }
    
    int main(int argc, char *argv[])
    {
        WSAData wsaData;
        if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
            return 255;
        }
    
        int retval = doit(argc, argv);
    
        WSACleanup();
    
        return retval;
    }
    a moin qu'il n'y ait une subtilité.

    je vais tout de meme essayer de regarder cele que tu me redonne

    merci
    ++ Tix.

  11. #10
    invite597d4991

    Re : Ip ...


    C'est la même, j'ai juste "commenté" des extraits choisis (en fait l'intégralité de la méthode 'doit').

    Ce qu'il y a dans main c'est juste l'initialisation de WSA, ça ne devrait pas te poser de problèmes...

Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...