Wie man die LAN-IP von einem client mit Java?
Wie bekomme ich die LAN-IP-Adresse von einem computer mit Java? Ich möchte die IP-Adresse, die mit dem router verbunden ist und dem rest des Netzwerks.
Habe ich versucht, so etwas wie dieses:
Socket s = new Socket("www.google.com", 80);
String ip = s.getLocalAddress().getHostAddress();
s.close();
Diese scheinen zu funktionieren, auf einigen Fällen, aber manchmal gibt es das loopback-Adresse oder etwas ganz anderes. Auch, es erfordert internet-Verbindung.
Nicht hat jemand eine genauere Methode, dies zu tun?
EDIT: Dachte, es wäre besser zu Fragen, als hier in einem Kommentar..
Was, wenn Sie bekommen, viele Schnittstellen? Zum Beispiel, eine für Kabel, eine für WLAN und eine für virtual box oder so. Ist es unmöglich, tatsächlich zu sehen, die man mit dem Netzwerk verbunden ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen java.net.NetworkInterface
if ( cur.isLoopback( ) )
connected
. Es liegt an deinem OS zu bestimmen, welche verwendet werden, für das externe routing. Sie können verwenden Sie dieses Socket-Konstruktor java.sun.com/j2se/1.5.0/docs/api/java/net/... abholen spezifische lokale Adresse und einen port, oder konstruieren Sie Standard-socket und bindet es an spezifische Schnittstelle. Überprüfen Sie auch, dass Sie bestimmen können Informationen, die Sie benötigen, aus NetworkInterface-Objekt.routing
- Schnittstelle und übergeben Sie diese Informationen, um Ihre Java-Programm, so kann es eine Bindung an diese bestimmte Schnittstelle. Auf der anderen Seite, wenn Sie eine Verbindung ein Socket ist dieser job für Sie erledigt, so schlage ich vor, Sie sollten dies nur tun, wenn Sie sehr spezifische Anforderungen haben. Von dir post-it ' s nicht klar ist, was diese Anforderungen sind.Zuerst: Es gibt keine einzigen Adresse. Ihre Maschine hat mindestens zwei Adressen (127.0.0.1 auf "lo" und vielleicht 192.168.1.1 auf "eth1").
Du willst dieses: Auflistung von Netzwerk-Schnittstellen
Wie Sie vielleicht erwarten, können Sie automatisch zu erkennen, welche verbunden ist, um alle Ihre Router, da diese Bedürfnisse möglicherweise komplexe Analyse Ihrer routing-Tabellen. Aber wenn Sie nur wollen, eine nicht-lokale Adresse sollte dies genug ist. Um sicher zu sein, versuchen Sie, diesen mindestens ein mal auf vista oder Windows 7, denn Sie fügen Sie IPv6-Adressen.
Dem folgenden Beispiel wird die Ausgabe aus dem Beispiel-Programm:
Dies ist eine Methode, die ich verwendet habe, für eine Weile. Es enthält einen kleinen hack, um herauszufinden, die extern sichtbare ip-Adresse sowie.
Als Daniel bereits aufgezeigt, können Sie nicht wissen, welche Schnittstelle ist der "verbunden". Was ist, wenn, zum Beispiel, auf dem computer mehrere Netzwerk-interface-Karten, die sind beide angeschlossen auf separaten physikalischen LANs?
Lassen Sie den Benutzer entscheiden, welche Schnittstelle zu verwenden, oder versuchen Sie alle, je nachdem, was Ihre Nutzung Fall ist.