it-swarm.com.de

Java erhält meine IP-Adresse

Ich versuche, meine Internet-IP-Adresse in Java zu erhalten, erhalte jedoch weiterhin meine lokale Adresse (z. B. 127.0.0.1), wenn meine IP-Adresse 192.168.0.xxx ist

Ich benutze die Leitung:

InetAddress.getLocalHost().getHostAddress();

das scheint Standard zu sein, um die IP-Adresse zu bekommen, aber es ist nicht das, wonach ich suche. In jedem Tutorial heißt es, diese Zeile zu verwenden, daher bin ich etwas verwirrt.

Kann mir bitte jemand mitteilen, wie ich meine korrekte IP-Adresse erhalten kann?


Ich verwende ein Gerät, das mit WLAN verbunden ist, und verwende kein Kabel. Ich verbinde mich mit einem Server, der die von ifconfig inet addr angegebene IP verwendet, und suche nach der inet-addr des Geräts. Ich könnte die IP des Sockets auf der Serverseite überprüfen, dachte aber, es wäre schöner, wenn das Gerät (Client) dem Server mitteilt, auf welcher IP er andere Geräte erwartet. 

24
Jary

Die NetworkInterface -Klasse enthält alle relevanten Methoden. Beachten Sie jedoch, dass es keine "meine IP" gibt. Ein Rechner kann mehrere Schnittstellen haben und jede Schnittstelle kann mehrere IPs haben.

Sie können sie alle mit dieser Klasse auflisten, aber für welche Schnittstelle und IP-Adresse Sie sich entscheiden, für welche IP-Adresse Sie genau diese IP-Adresse verwenden müssen.

(InetAddress.getLocalHost() fragt Ihre Schnittstellen nicht ab, sondern gibt einfach die Konstante 127.0.0.1 (für IPv4) zurück)

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

Fragen wir nach AWS

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

EDIT

Ich bin mir bewusst, dass dies keine Java-Lösung ist. Es ist eine allgemeine Lösung für jede Programmiersprache. Die anderen Lösungen funktionieren für mich nicht so gut. Ich glaube auch, dass der einfachere Weg, Ihre IP zu kennen, darin besteht, im Internet zu surfen. Es kann ein beliebiger Standort sein. Der Server kann Ihre Client-IP zurücksenden, die er in der Anforderung erhalten hat. Sie können Ihren eigenen Endpunkt dafür einrichten.

9
Sorter

Eine weitere Option für die Standard-Netzwerkschnittstelle. Ich habe es vor 5 Minuten versucht und Ihre Frage gesehen :)

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

Hier ist mein Ansatz, um die IP-Adresse zu erhalten.

  1. Holen Sie sich Ihre Standard-Gateway-Adresse
  2. Holen Sie sich alle Adressen in Ihrem PC
  3. Nun müssen in Ihrer IP (angenommen 192.168.100.4) und dem Standardgateway IP (angenommen 192.168.100.1) die ersten 9 Stellen der Adresse identisch sein, also ist die IP, die diese Kriterien erfüllt, Ihre IP. 

Unten finden Sie den vollständigen Funktionscode.

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

Meine Lösung, die nur 1 IP4-Adresse zurückgibt:

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

Hatte das gleiche Problem, fand die Lösung auf dieser Seite: 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();
  }

hatte einige Probleme mit diesem Code auf lange Sicht, mehrmals in der Woche antwortet der Server einfach nicht.

neue Lösung:

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

Sie müssen das jar von jsoup hier .__ bekommen. Fügen Sie das jar von jsoup in Ihr Java-Projekt ein und interpretieren Sie diese Codezeilen. Sie erhalten dann Ihre IP-Adresse.

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