web-dev-qa-db-fra.com

Java obtenant mon adresse IP

J'essaie d'obtenir mon adresse IP Internet en Java mais je continue à obtenir mon adresse locale (c'est-à-dire: 127.0.0.1), lorsque mon adresse IP est 192.168.0.xxx.

J'utilise la ligne:

InetAddress.getLocalHost().getHostAddress();

ce qui semble standard pour obtenir l'adresse IP, mais ce n'est pas ce que je recherche. Chaque tutoriel dit d'utiliser cette ligne, donc je suis un peu confus.

Quelqu'un pourrait-il me dire s'il vous plaît comment je peux obtenir mon adresse IP correcte, s'il vous plaît?


J'utilise un appareil connecté au WiFi et je n'utilise aucun câble. Je me connecte à un serveur en utilisant l'adresse IP donnée par ifconfig inet addr, et je cherche à obtenir l'inet inr du périphérique. Je pouvais vérifier l'adresse IP de la prise côté serveur, mais je pensais que ce serait plus agréable si le périphérique (client) indique au serveur l'adresse IP à laquelle il s'attend à ce que les autres périphériques se connectent. 

24
Jary

La classe NetworkInterface contient toutes les méthodes pertinentes, mais sachez qu'il n'y a rien de tel que "mon IP". Une machine peut avoir plusieurs interfaces et chaque interface peut avoir plusieurs adresses IP.

Vous pouvez tous les lister avec cette classe, mais l'interface et l'adresse IP que vous choisissez dans la liste dépendent de l'utilisation que vous souhaitez en faire.

(InetAddress.getLocalHost() ne consulte pas vos interfaces, il renvoie simplement la constante 127.0.0.1 (pour IPv4))

18
biziclop
    String ip;
    try {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface iface = interfaces.nextElement();
            // filters out 127.0.0.1 and inactive interfaces
            if (iface.isLoopback() || !iface.isUp())
                continue;

            Enumeration<InetAddress> addresses = iface.getInetAddresses();
            while(addresses.hasMoreElements()) {
                InetAddress addr = addresses.nextElement();
                ip = addr.getHostAddress();
                System.out.println(iface.getDisplayName() + " " + ip);
            }
        }
    } catch (SocketException e) {
        throw new RuntimeException(e);
    }
37
roylaurie

Demandons à AWS

URL url = new URL("http://checkip.amazonaws.com/");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
System.out.println(br.readLine());

MODIFIER

Avant de voter, je suis conscient que ce n’est pas une solution Java. C'est une solution générale pour n'importe quel langage de programmation. Les autres solutions ne fonctionnent pas aussi bien pour moi. De plus, je pense que le moyen le plus simple de connaître votre IP est d’aller sur Internet. Il peut s'agir de n'importe quel site, le serveur peut renvoyer votre adresse IP client qu'il a reçue dans la requête. Vous pouvez configurer votre propre noeud final pour cela.

9
Sorter

Une autre option pour l'interface réseau par défaut, je viens d'essayer il y a 5 min et vu votre question :)

InetAddress[] localaddr;

try {
    localaddr = InetAddress.getAllByName("Host.name");

    for(int i = 0; i < localaddr.length; i++){
        System.out.println("\n" + localaddr[i].getHostAddress());
    }
} catch (UnknownHostException e) {
    e.printStackTrace();
}
3
HRgiger

Voici mon approche pour obtenir l'adresse IP.

  1. Obtenez votre adresse de passerelle par défaut
  2. Obtenez toutes les adresses sur votre PC
  3. Maintenant, dans votre adresse IP (supposons 192.168.100.4) et l'adresse IP de passerelle par défaut (supposons 192.168.100.1), les 9 premiers chiffres d'adresse doivent être identiques; 

S'il vous plaît voir ci-dessous pour le code de travail complet.

import Java.io.BufferedReader;
import Java.io.IOException;
import Java.io.InputStreamReader;
import Java.net.InetAddress;
import Java.net.NetworkInterface;
import Java.net.SocketException;
import Java.util.Enumeration;
import Java.util.Iterator;
import Java.util.StringTokenizer;
import Java.util.TreeSet;

public class MyIpAddress {

    public static void main(String[] args) {
        // doPortForwarding();

        MyIpAddress myIpAddress = new MyIpAddress();

        // get default address
        String yourIp = myIpAddress.getYourIp(myIpAddress
                .getDefaultGateWayAddress());
        System.out.println(yourIp);

        // get

    } // amin

    // return ip address for which u need to do port forwarding
    private String getYourIp(String defaultAddress) {

        String temp = defaultAddress.substring(0, 11);
        String ipToForward = "";

        TreeSet<String> ipAddrs = getIpAddressList();
        for (Iterator<String> iterator = ipAddrs.iterator(); iterator.hasNext();) {

            String tempIp = iterator.next();
            if (tempIp.contains(temp)) {
                ipToForward = tempIp;
                break;
            }
        }

        return ipToForward;

    }// ipForPortForwarding

    // get the ipaddress list
    private TreeSet<String> getIpAddressList() {
        TreeSet<String> ipAddrs = new TreeSet<String>();

        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface
                    .getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface iface = interfaces.nextElement();
                // filters out 127.0.0.1 and inactive interfaces
                if (iface.isLoopback() || !iface.isUp())
                    continue;

                Enumeration<InetAddress> addresses = iface.getInetAddresses();
                while (addresses.hasMoreElements()) {

                    InetAddress addr = addresses.nextElement();

                    ipAddrs.add(addr.getHostAddress());

                }// 2 nd while
            }// 1 st while
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return ipAddrs;

    }// getIpAddressList

    // get default gateway address in Java

    private String getDefaultGateWayAddress() {
        String defaultAddress = "";
        try {
            Process result = Runtime.getRuntime().exec("netstat -rn");

            BufferedReader output = new BufferedReader(new InputStreamReader(
                    result.getInputStream()));

            String line = output.readLine();
            while (line != null) {
                if (line.contains("0.0.0.0")) {

                    StringTokenizer stringTokenizer = new StringTokenizer(line);
                    stringTokenizer.nextElement();// first string is 0.0.0.0
                    stringTokenizer.nextElement();// second string is 0.0.0.0
                    defaultAddress = (String) stringTokenizer.nextElement(); // this is our default address
                    break;
                }

                line = output.readLine();

            }// while
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return defaultAddress;

    }// getDefaultAddress
}
2
chandan

Ma solution qui ne retourne qu'une adresse IP4:

try {
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    while (interfaces.hasMoreElements()) {
        NetworkInterface iface = interfaces.nextElement();
        if (iface.isLoopback() || !iface.isUp() || iface.isVirtual() || iface.isPointToPoint())
            continue;

        Enumeration<InetAddress> addresses = iface.getInetAddresses();
        while(addresses.hasMoreElements()) {
            InetAddress addr = addresses.nextElement();

            final String ip = addr.getHostAddress();
            if(Inet4Address.class == addr.getClass()) return ip;
        }
    }
} catch (SocketException e) {
    throw new RuntimeException(e);
}
return null;
2
Error404
//This program is find your exact LAN(Local Machine on which your are       //runing this program) IP Address 
import Java.net.InetAddress;
import Java.net.NetworkInterface;
import Java.net.SocketException;
import Java.util.Enumeration;

public class GetMyIPAddress {
public static void main(String gks[]) throws SocketException{
    Enumeration e = NetworkInterface.getNetworkInterfaces();
    int ctr=0;
    while(e.hasMoreElements())
    {
        NetworkInterface n = (NetworkInterface) e.nextElement();
        Enumeration ee = n.getInetAddresses();
        while (ee.hasMoreElements() && ctr<3)
        {       ctr++;
            if(ctr==3)
                break;
                InetAddress i = (InetAddress) ee.nextElement();
                    if(ctr==2)
                         System.out.println(i.getHostAddress());

        }
    }
}

}
2
Gajendra Singh

Avait le même problème, trouvé la solution sur cette page: http://mrhawy.blogspot.it/2012/05/how-to-get-your-external-ip-address-in.html

    public String getIpAddress() throws MalformedURLException, IOException {
  URL myIP = new URL("http://api.externalip.net/ip/");
  BufferedReader in = new BufferedReader(
                       new InputStreamReader(myIP.openStream())
                      );
  return in.readLine();
  }

eu quelques problèmes avec ce code sur le long terme, plusieurs fois dans une semaine, le serveur ne répondra tout simplement pas.

nouvelle solution:

public static String getIpAddress() 
{ 
        URL myIP;
        try {
            myIP = new URL("http://api.externalip.net/ip/");

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(myIP.openStream())
                    );
            return in.readLine();
        } catch (Exception e) 
        {
            try 
            {
                myIP = new URL("http://myip.dnsomatic.com/");

                BufferedReader in = new BufferedReader(
                        new InputStreamReader(myIP.openStream())
                        );
                return in.readLine();
            } catch (Exception e1) 
            {
                try {
                    myIP = new URL("http://icanhazip.com/");

                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(myIP.openStream())
                            );
                    return in.readLine();
                } catch (Exception e2) {
                    e2.printStackTrace(); 
                }
            }
        }

    return null;
}
2
user2358132

Vous devez obtenir le fichier jar de jsoup ici Ajouter le fichier jar de jsoup dans votre projet Java et interpréter ces lignes de code et vous obtiendrez votre adresse IP,

Document doc = Jsoup.connect("https://whatismyipaddress.com/").timeout(10000).get() ;
Elements el = doc.select("div#section_left") ;
Element e = el.select("a").get(
System.out.println(e.text());
0
Usama Bin Tariq