IP-Adresse ermitteln

javaprogger1987

Erfahrenes Mitglied
Hallo,

ich hab schon wieder ein Problem ;( und zwar folgendes:
Ich würde gerne die Internet-Ip eines PC's ermitteln, hab bis jetzt nur die Methode
java.net.InetAddress.getLocalHost().getHostAddress()
gefunden, die liefert mit aber die lokale Netzwerkadresse..Gibts da was?

Danke schonmal
 
Aber das liefert doch die IP von dem Server von Webnobis oder
Hab ich mich falsch ausgedrückt sry ich meinte die IP vom Rechner auf dem z.B. das Applet läuft..
 
Das wird dann auch immer die IP sei, die der Rechner hat. Wenn der sich in nem lokalen Netzwerk aufhält ist es auch diese. EIne andere hat kein Rechner der Welt.
 
Aber... das versteh ich nich... ich hab zum Bsp. im lokalen Netzwerk die IP 192.168.178.20.. und wenn ich nun ins Internet gehe bekomm ich doch noch eine zugewiesen von meinem ISP oder ?
 
javaprogger1987 hat gesagt.:
Aber... das versteh ich nich... ich hab zum Bsp. im lokalen Netzwerk die IP 192.168.178.20.. und wenn ich nun ins Internet gehe bekomm ich doch noch eine zugewiesen von meinem ISP oder ?

Die Adresse bekommt aber nicht Dein Rechner sondern der Rechner oder Router, der sich in das Internet einwählt. Einige Router bieten da aber Schnittstellen an um zu ermitteln.

Was hast Du eigentlich mit der IP vor?
 
cham hat gesagt.:
Die Adresse bekommt aber nicht Dein Rechner sondern der Rechner oder Router, der sich in das Internet einwählt. Einige Router bieten da aber Schnittstellen an um zu ermitteln.

Was hast Du eigentlich mit der IP vor?


Jep, das ist absolut korrekt. Der Router hat deine Internet-IP und bekommt ja lokal eine vom Router zugewiesen(DHCP-Funktion des Routers) (oder hat Sie fest). Das beste ist, du schaust dir wie vorgeschlagen die API Funktionalität deines Routers an und verwendest diese ggf. Du musst den Router bewegen seine IP rauszugeben.

Andernfalls, könntest du auch versuchen über die Verbindungen von deinem rechner aus, die des Routers zu finden, wenn du weisst welches die ersten 2-3 (*.* oder *.*.* ) stellen der ISP-IP sind und diese dann zu filtern. Nur so als gedanken-gang.

Grüsse

Torsten.
 
Zitat von cham:
Was hast Du eigentlich mit der IP vor?
Also ich habe ja schon ein paar andere Male wegen Sachen hier gepostet, es ging aber im Prinzip immer um dasselbe..
Ich will einen Chat programmieren. Dieser besteht aus einem Servlet, das auf einem Server läuft und RMI-Verbindungen von Applets entgegen nimmt. Dabei ruft z.B. der Server auch Methoden von den Applets auf, z.B. wenn eine neue Nachricht da ist. Das hat den Vorteil, dass das Applet nicht immer z.B. über HTTP anfragen muss ob eine neue Nachricht da ist. Nun ist das Problem, dass es so scheint als würde der Router von jemandem die Anforderung vom Server, eine Methode vom Applet aufzurufen verwerfen..(Ich kann es nicht testen ob es ohne Router geht, da ich niemanden kenne der keinen hat).
Deshalb wollte ich die Verbindung nun über Sockets machen, zumindest wenn ein Router vorhanden ist. Allerdings habe ich das nun mit jemand anders (jemand mit Router) getestet, aber das geht auch irgendwie nicht....

edit:
Ah ich hab grad gesehen warum das mit RMI nicht geht in der Log vom Server steht folgendes:
/-----------------------------------------------------------------
java.rmi.ConnectException: Connection refused to host: 192.168.0.6; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:567)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:101)
at chatgame.ChatApplet_Stub.setNextMessage(ChatApplet_Stub.java:107)
at chatgame.ChatServlet.testForRouter(ChatServlet.java:222)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)
at sun.rmi.transport.Transport$1.run(Transport.java:148)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:534)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:452)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:124)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:562)
... 16 more
/------------------------------------------------------------------------------------------------------
Wobei die erwähnte IP (192....) die lokale(!) Ip von meiner "Testperson" ist...
 
Zuletzt bearbeitet:
Ja das wird wohl insgesamt nicht so gehen, da Dein Server dann zwar die Info an den Router schicken kann, wenn er die korrekte IP hat, der aber ja nicht weiß auf welchem lokalen Host der Client läuft.

Du wirst IMHO nicht um einen Scheduler drumrumkommen, der nachfragt ob es neue Nachrichten gibt.

Ich lass emich aber gern eines besseren belehren.
 
Zurück