Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connaître l'adresse IP de sa propre machine

Sujet résolu
    4 septembre 2008 à 8:16:59

    Bonjour,
    J'aimerais savoir s'il existe un moyen de connaître son adresse IP publique simplement.

    Les codes qu'on trouve un peu partout sur le net, sur developpez.com par exemple, à savoir quelque chose dans ce genre :
    String ip = InetAddress.getLocalHost().getHostAddress().toString();
    System.out.println("Votre IP est : " + ip);
    


    ne me renvoie pas ce que je veux. AVec ce code, j'obtiens l'IP de ma machine dans mon réseau local, p.ex. 192.168.1.X. Ce n'est pas ce qui m'intéresse. Ce que je voudrais obtenir, c'est mon IP publique, par exemple en ce moment 81.62.X.X.

    Au pire je fais un script php distant qui fait un bête echo $_SERVER['REMOTE_ADDR'], mais ça me paraît être un peu un tank pour abattre une mouche, pareil si je décidais d'exécuter discrètement ipconfig avec Runtime.exec.

    Si vous avez une idée efficace ...
    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      7 septembre 2008 à 19:54:14

      Personne n'a une idée ? Car cela m'intéresse aussi
      • Partager sur Facebook
      • Partager sur Twitter
        7 septembre 2008 à 20:40:22

        Le problème, c'est qu'il faut passer par un intermédiaire situé à l'extérieur du réseau...
        • Partager sur Facebook
        • Partager sur Twitter
          7 septembre 2008 à 21:37:14

          Bonjour,
          Tu peut recuperer ton adresse IP publique grace a une page specilisée tel que celle ci : http://www.whatismyip.fr/raw/ .
          • Partager sur Facebook
          • Partager sur Twitter
            7 septembre 2008 à 21:43:16

            oui, c'est ce que fait la plupart des librarires reseau.
            voici une fonction tiré directement du module reseau de la SFML:
            ////////////////////////////////////////////////////////////
            /// Get the computer's public IP address (from the web point of view)
            ////////////////////////////////////////////////////////////
            IPAddress IPAddress::GetPublicAddress()
            {
                // The trick here is more complicated, because the only way
                // to get our public IP address is to get it from a distant computer.
                // Here we get the web page from http://www.whatismyip.org
                // and parse the result to extract our IP address
                // (not very hard : the web page contains only our IP address)
            
                IPAddress PublicAddress;
            
                // Create the socket
                SocketHelper::SocketType Socket = socket(PF_INET, SOCK_STREAM, 0);
                if (Socket == SocketHelper::InvalidSocket())
                    return PublicAddress;
            
                // Build the server address (use port 80 for HTTP)
                IPAddress Server("www.whatismyip.org");
                sockaddr_in SockAddr;
                memset(SockAddr.sin_zero, 0, sizeof(SockAddr.sin_zero));
                SockAddr.sin_addr.s_addr = inet_addr(Server.ToString().c_str());
                SockAddr.sin_family      = AF_INET;
                SockAddr.sin_port        = htons(80);
            
                // Connect the socket
                if (connect(Socket, reinterpret_cast<sockaddr*>(&SockAddr), sizeof(SockAddr)) == -1)
                {
                    SocketHelper::Close(Socket);
                    return PublicAddress;
                }
            
                // Send a request for getting the index page
                const char Request[] = "GET / HTTP/1.0\r\n"
                                       "From: camembert@fromage.com\r\n"
                                       "User-Agent: SFML/1.0\r\n"
                                       "\r\n";
                if (send(Socket, Request, sizeof(Request), 0) <= 0)
                {
                    SocketHelper::Close(Socket);
                    return PublicAddress;
                }
            
                // Get the response (the source code of the web page)
                char Response[1024] = {0};
                int Received = 0;
                do
                {
                    // Get the next chunk of response from the server
                    char Buffer[1024];
                    Received = recv(Socket, Buffer, sizeof(Buffer), 0);
            
                    if (Received > 0)
                    {
                        // We received something : concatenate it to the response
                        Buffer[Received] = '\0';
                        strcat(Response, Buffer);
                    }
                    else if (Received < 0)
                    {
                        // We received an error : return an invalid address
                        return PublicAddress;
                    }
                } while (Received > 0);
            
                // Close the socket
                SocketHelper::Close(Socket);
            
                // Extract the address from the source code of the web page
                // (extract from first \r\n\r\n to the end)
                std::string Page = Response;
                std::string::size_type Start = Page.find("\r\n\r\n");
                if (Start != std::string::npos)
                {
                    PublicAddress = Page.substr(Start + 4);
                }
            
                return PublicAddress;
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              8 septembre 2008 à 15:51:19

              IL n'y a vraiment pas d'autre choix que de passer par une page web ?

              OK, alors tant pis, je fais un script php complètement stupide :
              <?php echo $_SERVER['REMOTE_ADDR']; ?>
              


              Ensuite il suffit d'appeler cette page...
              URL url = new URL("http://www.xxxxx.com/ip.php");
              InputStream in = url.openStream();
              BuffredReader inbr = new BufferedReader(new InputStreamReader(in));
              String ip = inbr.readLine().trim();
              inbr.close();
              in.close();
              System.out.println("Votre IP publique est : " +ip);
              


              Ce n'est pas que c'est très compliqué, mais ça m'embête de faire une requête sur un service externe juste pour ça... il n'y a vraiment pas d'autre moyen ?
              • Partager sur Facebook
              • Partager sur Twitter
                8 septembre 2008 à 20:14:50

                on il 'y a pas, pour conaitre son adresse public, c'est le seul moyen dispo
                • Partager sur Facebook
                • Partager sur Twitter
                  9 septembre 2008 à 5:31:56

                  Alors question sans doute idiote, comment le programme ipconfig fait-il ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 septembre 2008 à 12:58:10

                    salut,
                    L'adresse IP publique est l'adresse ip fournie par ton fournisseur d'accès.

                    ipconfig, lui, te fournit ton adresse locale. cette adresse est restreinte à ton réseau local.

                    ton ordinateur, lui ne connait pas l'adresse publique qui lui est attribuée. celle-ci n'est utilisée qu'entre le fournisseur et les serveurs distants.

                    Il faut donc utiliser un serveur distant pour la connaitre.
                    en espérent répondre a ta question ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 septembre 2008 à 21:38:09

                      Oui tu réponds à ma question.
                      Au temps pour moi à propos d'ipconfig, j'aurais juré qu'il donnait aussi l'IP publique en plus de l'IP locale, je dois admettre après vérification que je me suis lourdement trompé sur ce coup-là.

                      Donc, je vais en rester au script php distant, c'est encore le plus simple pour récupérer son IP.

                      EDIT : Mince, j'ai oublié de mettre résolu et on ne peut pas le rajouter après coup. Tant pis.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 septembre 2008 à 23:06:10

                        "Mince, j'ai oublié de mettre résolu et on ne peut pas le rajouter après coup. Tant pis."
                        ?? t'es sur?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 septembre 2008 à 6:27:22

                          Effectivement c'était possible, j'avais pas vu en-dessous de "plus d'options" sous la réponse rapide.
                          C'est réglémaintenant.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Connaître l'adresse IP de sa propre machine

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown