Récupérer adresse ip public avec java

Bonjour,
Comment récupérer mon adresse ip public et la enregistrer dans un fichier avec java ?

4 réponses

  1. Modérateur
    J'ai repris l'astuce de le y@m's (dans le lien donné par fiddy), de manière à avoir un code plus simple à comprendre (tout est relatif) et surtout directement utilisable.

    import java.net.URL; 
    import java.util.Scanner; 
    
    public class IP 
    {     
        /** 
         * @param site l'adresse internet d'un site donnant l'adresse IP 
         * @param prefixe le code HTML précédant la valeur de l'adresse IP 
         * @param suffixe le code HTML succédant la valeur de l'adresse IP 
         * @return l'adresse IP trouvée ou null sinon 
         */ 
        public static String findIP(String site, String prefixe, String suffixe) throws Exception 
        {         
            Scanner sc = new Scanner(new URL(site).openStream()); 
             
            while (sc.hasNextLine()) 
            { 
                String line = sc.nextLine(); 
                 
                int a = line.indexOf(prefixe); 
                if (a!=-1) 
                { 
                    int b = line.indexOf(suffixe,a); 
                    if (b!=-1) 
                    { 
                        sc.close(); 
                        return line.substring(a+prefixe.length(),b); 
                    } 
                } 
            } 
             
            sc.close(); 
            return null; 
        } 
             
        public static void main(String...args) throws Exception 
        { 
            System.out.println(findIP("https://www.google.com/search?&gl=us&q=what+is+my+ip+address", "<b>IP Address:</b> <span class=\"ha4\">", "</span><br />")); 
        } 
    }
    La confiance n'exclut pas le contrôle
    1. Contributeur
      Bonne initiative KX, exactement ce que j'avais la flemme de faire :-)
  2. 
    try { 
       String host = InetAddress.getLocalHost().toString().split("/")[1]; 
       System.out.println(host); 
      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
      } 
    
    
    1. Contributeur
      Ne confondrais-tu pas avec l'IP privé ???
    2. il me retourne l'adresse que je trouve avec ipconfig sur windows

      Adresse IPv4. . . . . . . . . . . . . .: 172.20.xxx.xxx
    3. Contributeur
      Oui, ta fonction donne l'IP locale de ta machine. Si elle est connectée directe à internet, ça sera celle du FAI, mais en cas de NAT, ça ne sera pas la bonne. Cela dépend donc de la configuration.
  3. Contributeur
    Cela dépend de ta configuration. Passes-tu par un NAT ? Si c'est le cas, la machine ne connait pas cette adresse. Il faut donc ruser en passant par internet. Tu te connectes sur un site internet te listant l'IP de connection, tu parses l'IP et tu as ta réponse.
    1. sinon j'ai trouvé ça:

      https://java.developpez.com/faq/javaio?page=Reseaux#RESEAU_ip

      ça donne plus d'informations
      1. Contributeur
        Oui, mais le lien que tu donnes n'est pas l'IP publique (sauf en cas de connexion directe à internet), il s'agit de l'IP locale de la machine. Il s'agit de deux notions différentes.
      2. alors montre nous comment faire
      3. Contributeur
        Euh non ce n'est pas normal. N'utiliserais-tu pas un logiciel qui change de proxy ? En tout cas, sur un ordinateur classique, cela fonctionne bien (l'IP publique ne change pas à chaque rafraichissement)