Abrufen der IP-Adresse des aktuellen Computers mit Java
Ich versuche ein system zu entwickeln, wo es verschiedene Knoten, die auf verschiedenen system oder verschiedene ports auf demselben system.
Nun alle Knoten erstellt einen Socket mit einer Ziel-IP-Adresse als die IP eines speziellen Knotens bekannt als bootstrapping-node. Die Knoten dann erstellen Sie Ihre eigenen ServerSocket
und starten Sie die überwachung von verbindungen.
Die bootstrapping-Knoten verwaltet eine Liste von Knoten und gibt diese in abgefragt werden.
Nun, was ich brauche, ist der Knoten muss sich registrieren, seine IP zu der bootstrapping-node. Ich habe versucht, mit cli.getInetAddress()
sobald der client eine Verbindung zu der ServerSocket
des bootstrapping-Knoten, aber das hat nicht funktioniert.
- Ich Brauch den client zu registrieren, Ihre PPP-IP, falls verfügbar;
- Andernfalls die LAN-IP, falls verfügbar;
- Ansonsten müssen sich registrieren 127.0.0.1 angenommen es ist der gleiche Rechner.
Verwenden Sie den code:
System.out.println(Inet4Address.getLocalHost().getHostAddress());
oder
System.out.println(InetAddress.getLocalHost().getHostAddress());
Meine PPP-Verbindung-IP-Adresse: 117.204.44.192 aber die oben genannten gibt mir 192.168.1.2
BEARBEITEN
Ich bin mit dem folgenden code:
Enumeration e = NetworkInterface.getNetworkInterfaces();
while(e.hasMoreElements())
{
NetworkInterface n = (NetworkInterface) e.nextElement();
Enumeration ee = n.getInetAddresses();
while (ee.hasMoreElements())
{
InetAddress i = (InetAddress) ee.nextElement();
System.out.println(i.getHostAddress());
}
}
Ich bin in der Lage, alle IP-Adressen aller NetworkInterface
s, aber wie kann ich Sie unterscheiden? Das ist die Ausgabe die ich erhalte:
127.0.0.1
192.168.1.2
192.168.56.1
117.204.44.19
InformationsquelleAutor der Frage sasidhar | 2012-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Weise funktioniert auch wenn es mehreren Netzwerk-Schnittstellen. Es gibt immer die bevorzugte ausgehende IP. Das Ziel
8.8.8.8
ist nicht nötig, um zu erreichen.Connect
auf einen UDP-socket hat folgende Wirkung: es legt das Ziel für Send/Recv, verwirft alle Pakete von anderen Adressen, und - das ist, was wir verwenden - überträgt die Buchse in die "verbunden" - Zustand, Einstellungen die entsprechenden Felder ein. Dies beinhaltet die Prüfung der Existenz der route zu dem Ziel entsprechend der system-routing-Tabelle und der Einstellung des lokalen Endpunkts entsprechend. Der Letzte Teil scheint zu sein, ohne Papiere offiziell, aber es sieht aus wie ein integraler Charakterzug der Berkeley sockets-API (eine Nebenwirkung von UDP - "connected" - Zustand), funktioniert zuverlässig unter Windows und Linux in verschiedenen Versionen und Distributionen.So, diese Methode geben Sie die lokale Adresse, die verwendet werden, um eine Verbindung zu dem angegebenen remote host. Es gibt keine wirkliche Verbindung aufgebaut, damit die festgelegten remote-ip nicht erreichbar sein.
InformationsquelleAutor der Antwort Mr.Wang from Next Door
Dies könnte ein wenig schwierig sein, in der die meisten Allgemeinen Fall.
Auf dem Gesicht,
InetAddress.getLocalHost()
sollte Ihnen die IP-Adresse des Hosts. Das problem ist, dass ein host könnte, haben viele der Netzwerk-Schnittstellen und einer Schnittstelle kann mit eingebunden werden, um mehr als eine IP-Adresse. Und nach oben, dass nicht alle IP-Adressen erreichbar sein, die außerhalb Ihrer Maschine oder Ihrem LAN. Sie könnten zum Beispiel werden IP-Adressen für virtuelle Netzwerk-Geräte, private Netzwerk-IP-Adressen, und so weiter.Was dies bedeutet ist, dass die zurückgegebene IP-Adresse von
InetAddress.getLocalHost()
vielleicht nicht die richtigen zu verwenden.Wie können Sie damit umgehen?
NetworkInterface.getNetworkInterfaces()
alle bekannten Netzwerkschnittstellen auf dem host, und dann die Iteration über die einzelnen NI-Adressen.InetAddress.getByName()
zum nachschlagen der primäre IP-Adresse. (Aber wie bekommt man es, und wie gehen Sie mit einem DNS-basierten load balancer?)Zusammenfassend
InetAddress.getLocalHost()
wird in der Regel funktionieren, aber möglicherweise müssen Sie eine alternative Methode für die Fälle, in denen der code ausgeführt wird, in einer Umgebung mit "kompliziert" Vernetzung.In der Tat, die InetAddress-API stellt Methoden für die Prüfung für loopback link-local, site-local, multicast-und broadcast-Adressen. Sie können diese nutzen, um sich zu Sortieren, welche der IP-Adressen, die Sie erhalten zurück am besten geeignet ist.
InformationsquelleAutor der Antwort Stephen C
Posting hier getesteten IP-Mehrdeutigkeit Problemumgehung code von https://issues.apache.org/jira/browse/JCS-40 (InetAddress.getLocalHost() mehrdeutig auf Linux-Systemen):
InformationsquelleAutor der Antwort Vadzim
Können Sie java InetAddress Klasse für diesen Zweck.
Ausgang für mein system =
IP of my system is := 10.100.98.228
getHostAddress() gibt
ODER Sie können auch
Output =
IP of my system is := RanRag-PC/10.100.98.228
InformationsquelleAutor der Antwort RanRag
Beispiel in scala (nützlich bei der sbt-Datei):
InformationsquelleAutor der Antwort Andrzej Jozwik
EDIT 1: Update-code, da der Vorherige link, nicht mehr existiert
AKTUELLE VERSION: Diese aufgehört zu arbeiten
Hoffentlich dieses snippet könnte Ihnen helfen, dies zu erreichen :
InformationsquelleAutor der Antwort nIcE cOw
Wenn Sie sind auf der Suche nach Ihrem "local" - Adresse, sollten Sie beachten, dass jede Maschine, nicht nur eine einzelne Netzwerk-Schnittstelle, und jedes interface hat seine eigenen lokalen Adresse. Was bedeutet, dass Ihre Maschine immer besitzen Sie mehrere "local" - Adressen.
Verschiedenen "local" - Adressen werden automatisch ausgewählt, wenn Sie eine Verbindung zu verschiedenen Endpunkten. Zum Beispiel, wenn Sie eine Verbindung zu
google.com
Sie ein "außerhalb" lokale Adresse; aber wenn Sie die Verbindung zu Ihremlocalhost
Ihre lokale Adresse ist immerlocalhost
selbst, denn localhost ist einfach nur ein loopback.Unten zeigt, wie finden Sie Ihre lokale Adresse, wenn Sie die Kommunikation mit
google.com
:InformationsquelleAutor der Antwort macomgil
zunächst importieren Sie die Klasse
in der Klasse
InformationsquelleAutor der Antwort Gautam
InformationsquelleAutor der Antwort J.R
Verwenden InetAddress.getLocalHost()die lokale Adresse
InformationsquelleAutor der Antwort deantoni
Können Sie
java.net.InetAddress
API.Versuchen Sie dies :
InformationsquelleAutor der Antwort Ved
InformationsquelleAutor der Antwort twatson0990
Einen eher einfachen Ansatz, der zu funktionieren scheint...
InformationsquelleAutor der Antwort Pantelis Natsiavas
In der Regel, wenn ich versuche zu finden, die eigene öffentliche IP-Adresse wie cmyip.com oder http://www.iplocation.netnutze ich diesen Weg:
InformationsquelleAutor der Antwort YCF_L
InformationsquelleAutor der Antwort Maxple