Socket liefert leere IP-Nummern

Andi_CH

Top Contributor
Von einem Server habe ich erstaunliche Einträge im log gefunden.
Lässt sich das unterschiedliche Verhalten erklären?

Zugriffe von anderen Rechnern oder vom lokalen aus über die IP-Nummer geben einen korrekten output.

z.B. so:
Code:
Remote IP addr     = /127.0.0.1
Remote port        = 49167
Local IP addr      = /127.0.0.1
Local port         = 8080
Local socket addr  = /127.0.0.1:8080

Nur wenn der Zugriff über den Namen localhost erfolgt kommt:
Code:
Remote IP addr     = /0:0:0:0:0:0:0:1
Remote port        = 49165
Local IP addr      = 0.0.0.0/0.0.0.0
Local port         = 8080
Local socket addr  = 0.0.0.0/0.0.0.0:8080

Sogar die lokale Adresse ist 0 ???:L

Codeschnipsel:
Java:
	Socket client = s.accept();
	InetAddress rina = client.getInetAddress();
	InetAddress lina = client.getLocalAddress();
	int lp = client.getLocalPort();
	SocketAddress sa = client.getLocalSocketAddress();
	int rp = client.getPort();

	System.out.println("Request");
	System.out.println("Remote IP addr     = " + rina);
	System.out.println("Remote port        = " + rp);
	System.out.println("Local IP addr      = " + lina);
	System.out.println("Local port         = " + lp);
	System.out.println("Local socket addr  = " + sa);
 

Andi_CH

Top Contributor
Grundsätzlich läuft alles, denn eigentlich greift man da nie vom localhost aus zu, ausser wenn man testet.

Interessant ist ja nur, dass sich das anders verhält wenn der request über den Namen kommt.

EDIT: Was für ein Idi.. Mechanismus schreibt mir da die URL-Tags hinein auch wenn ich das NICHT will? :eek:
Domain ist reserviert vs Domain ist reserviert
also da steht

http : // localhost : 8080 vs http : // 127.0.0.1 : 8080

Hier das KSKB ;-)

Java:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;

public class ServerVersuch {

	public ServerVersuch() throws Exception {
		final int socket = 8080;
		ServerSocket s = null;
		try {
			s = new ServerSocket(socket);
			System.out.println("Server running on " + socket + "...");
		} catch (java.net.BindException e) {
			System.err.println("Can't start server. Port " + socket + " is already in use.\nClose the previously running server to free the Port again.");
		}
		while (true) {
			try {
				Socket client = s.accept();
				InetAddress rina = client.getInetAddress();
				InetAddress lina = client.getLocalAddress();
				int lp = client.getLocalPort();
				SocketAddress sa = client.getLocalSocketAddress();
				int rp = client.getPort();

				System.out.println("Request");
				System.out.println("Remote IP addr     = " + rina);
				System.out.println("Remote port        = " + rp);
				System.out.println("Local IP addr      = " + lina);
				System.out.println("Local port         = " + lp);
				System.out.println("Local socket addr  = " + sa);

				TestThread c = new TestThread(client);
				c.start();
			} catch (java.lang.NullPointerException e) {
				System.err.println("Exiting...");
				break;
			}
		}
	}

	public static void main(String args[]) throws Exception {
		@SuppressWarnings("unused")
		TimeServer server = new TimeServer();
	}
}

class TestThread extends Thread {
	private Socket outputS;

	public TestThread(Socket s) {
		outputS = s;
	}

	public void run() {
		try {
			PrintWriter pout = new PrintWriter(outputS.getOutputStream(), true);
			System.out.println("Answering request");
			pout.println("Hello world");
			outputS.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
 
Zuletzt bearbeitet:

HoaX

Top Contributor
Also bei mir kommt dann:
Code:
Server running on 8080...
Request
Remote IP addr     = /0:0:0:0:0:0:0:1
Remote port        = 57246
Local IP addr      = /0:0:0:0:0:0:0:1
Local port         = 8080
Local socket addr  = /0:0:0:0:0:0:0:1:8080
Answering request
Und das passt ja.
Ubuntu 10.10 64bit, Oracle 1.6.0_24
 

Andi_CH

Top Contributor
Ich habe auch nichts anderes erwartet, als dass bei dir dasselbe kommt, aber ich möchte verstehen warum das so ist?.

Der name localhost wird in deinem Fall durch einen Zugriff auf /etc/hosts durch 127.0.0.1 ersetzt. Bei windows geschieht das auch, wenn auch auf etwas undurchsichtigere Art.
Also warum bekomme ich nicht 127.0.0.1 zu sehen?
 

Antoras

Top Contributor
Also, ich bekomme sowohl bei einem Zugriff über die IP als auch über die Domain immer die korrekte IP 127.0.0.1 ausgegeben. Hab aber keine Ahnung was da bei euch falsch konfiguriert sein könnte.

Mit dem noparse-Tag können auch Links richtig dargestellt werden -> [noparse]http://localhost:8080/[/noparse]
 
D

despikyxd

Gast
es kommt 0 weil LOCALHOST eben nun mal KEIN interface ist ...
siehe dazu MSDN : *frei übersetzt* : sämtliche aufrufe von LOCAL an LOCAL werden über PIPES gelöst ... es werden keine SOCKETS erzeugst ...
wie das unter unix ist ... kp ... weil dort gibt es ja über ifconfig das interface lo0

wenn du über 127.0.0.1 aufrufst verhält es sich änlich ... nur hier wird die pipe genamed ... also das andere ende der pipe weis das diese pipe nunmal "127.0.0.1" heißt ...

mehr infos : GOOGLE
 

HoaX

Top Contributor
Also mein Win XP spuckt in beiden Fällen die 127.0.0.1 aus. Evtl liegt es bei dir am IPv6?

@despikyxd: Würdest du noch den Link nennen, welchen du Zitierst, dann könnte man evtl. sogar was mit der Antwort anfangen. Aber wie es intern abläuft sollte egal sein, auf beiden Seiten muss eine IP/Port verwendet werden, und die sollte der gegenüber auch sehen.
 

HoaX

Top Contributor
Ich habe auch nichts anderes erwartet, als dass bei dir dasselbe kommt, aber ich möchte verstehen warum das so ist?.

Der name localhost wird in deinem Fall durch einen Zugriff auf /etc/hosts durch 127.0.0.1 ersetzt. Bei windows geschieht das auch, wenn auch auf etwas undurchsichtigere Art.
Also warum bekomme ich nicht 127.0.0.1 zu sehen?

Tests eben zeigen, dass bei dir wohl localhost zu 0.0.0.0 aufgelöst wird. Prüf das doch mal.

Nachtrag: Oder auch nicht, unter Linux kann ich zu 0.0.0.0 verbinden, und bekommt 127.0.0.1 angezeigt. Bei Windows meckert Telnet wenn ich zur 0.0.0.0 verbinden will, also kanns das auch nicht sein.
 
Zuletzt bearbeitet:

FArt

Top Contributor
Serversockets können auf ein Netzwerkdevice gebunden werden, wovon ein Standardrechner oft mehrere hat: den Loopback (localhost in irgendeiner Form) und die Netzwerkkarten (z.B. WiFi und Ethernet, auch mehrere gleichzeitig). Auf welches der Socket per Default gebunden wird, muss man in der Doku nachlesen.
Man kann einen Socket aber auch fest an einen Port binden. Dann ist er auch nur über diese Netzwerkadresse zu erreichen. Ist ein Socket an 0.0.0.0 gebunden bedeutet dass, er ist an alle verfügbaren Devices gebunden, also über alle für den Rechner zur Verfügung stehenden Adressen erreichbar.
Vergleiche: ServerSocket (Java 2 Platform SE v1.4.2)

Was man also wie und wo sieht hängt sehr stark von der lokalen Konfiguration des Rechners ab und wie er im Moment des Test in eines odere mehrere Netze eingebunden ist.

Und dann kommt noch IPV6 ins Spiel...
Was sagt also obiger Test aus? Nichts, so lange man nicht weiß wie (s)ein Netzwerk aufgebaut ist und funktioniert.
 

Andi_CH

Top Contributor
Hatte dazwischen anderes zu tun ... Die magischen Wege von Windows verblüffen mich immer wieder:

Tests eben zeigen, dass bei dir wohl localhost zu 0.0.0.0 aufgelöst wird. Prüf das doch mal.

Code:
C:\>ping localhost

Ping wird ausgeführt für DesktopAV [::1] mit 32 Bytes Daten:
Antwort von ::1: Zeit<1ms
Code:
ping ::1
funktioniert tatsächlich auch - :bahnhof:

ping auf den Rechnernamen
Code:
C:\>ping Desktop

Ping wird ausgeführt für Desktop [fe80::a13f:dcb4:5d71:ed9e%11] mit 32 Bytes Daten:
Antwort von fe80::a13f:dcb4:5d71:ed9e%11: Zeit<1ms

Nachtrag: Oder auch nicht, unter Linux kann ich zu 0.0.0.0 verbinden, und bekommt 127.0.0.1 angezeigt. Bei Windows meckert Telnet wenn ich zur 0.0.0.0 verbinden will, also kanns das auch nicht sein.

0.0.0.0 ist keine gültige IP nummer, da ist es wohl eher Zufall was passiert - ping versucht es zwar, aber liefert "Allgemeiner fehler" (-> Win 7)
 

musiKk

Top Contributor
0.0.0.0 ist keine gültige IP nummer, da ist es wohl eher Zufall was passiert - ping versucht es zwar, aber liefert "Allgemeiner fehler" (-> Win 7)

Das behauptet (glaube ich) auch keiner. Es ist eine Notation, die offenbar verschiedene Dinge bedeuten kann. Wenn man 0.0.0.0 adressiert, bedeutet es wohl je nach Umgebung mal "default route". Viele Daemons unter Linux erlauben bei der Angabe der IP, an der ein Server lauschen soll, ebenfalls 0.0.0.0, was "alle Interfaces" bedeutet.
 

FArt

Top Contributor
Das behauptet (glaube ich) auch keiner. Es ist eine Notation, die offenbar verschiedene Dinge bedeuten kann. Wenn man 0.0.0.0 adressiert, bedeutet es wohl je nach Umgebung mal "default route". Viele Daemons unter Linux erlauben bei der Angabe der IP, an der ein Server lauschen soll, ebenfalls 0.0.0.0, was "alle Interfaces" bedeutet.

0.0.0.0 bedeutet eigentlich immer alle Schnittstellen. Die "default route" geht einfach die Schnittstellen der Reihe nach durch, bis eines die Anfrage befriedigen kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I http:GET mittels Socket liefert selsame Zeichenfolgen. Netzwerkprogrammierung 4
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
B Versuch mit Socket etwas zu lesen und zu schreiben Netzwerkprogrammierung 15
G Socket Socket Kommunikation Netzwerkprogrammierung 1
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
D Socket-Verbindungen übers Internet Netzwerkprogrammierung 4
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
A TCP multiClientServer mit socket mittels ObjectOutputStream Netzwerkprogrammierung 12
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
x46 Socket Files per Socket verschicken Netzwerkprogrammierung 1
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
D new ObjectInputStream(socket.getInputStream()); Netzwerkprogrammierung 15
E Socket Frage Netzwerkprogrammierung 6
D ServerSocket - Socket Verbindungsart Netzwerkprogrammierung 3
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
F TCP Socket auf Verbindungsabbruch prüfen Netzwerkprogrammierung 15
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
T Socket Socket connections schließen? Netzwerkprogrammierung 2
D Socket Socket OutputStream leeren? Netzwerkprogrammierung 3
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
F Socket Socket in anderen Methoden Netzwerkprogrammierung 1
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
I Socket Netzwerkprogrammierung 1
F Wiederverbinden nach socket Abbruch Netzwerkprogrammierung 1
J 1 Socket - 2 Serversocket Netzwerkprogrammierung 4
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
F Socket Verbindungsaufbau abbrechen Netzwerkprogrammierung 3
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
Joew0815 socket event handler Netzwerkprogrammierung 2
F Einfache Socket Verbindung Netzwerkprogrammierung 2
A Socket Socket Receive-/SendBuffersize Netzwerkprogrammierung 0
D Socket server auf Smartphone Netzwerkprogrammierung 9
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
A Socket Socket Server netcat Netzwerkprogrammierung 1
Shams Anfängerfrage zu Server-Socket-Kommunikation Netzwerkprogrammierung 2
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
B SSL Socket Netzwerkprogrammierung 2
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
P Warum kann ich kein Socket aufbauen? Netzwerkprogrammierung 12
S Socket SSL Socket und Sun/Oracle Java Netzwerkprogrammierung 5
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
precoc Server Socket Start / Stop Netzwerkprogrammierung 5
N SOCKET mehrere Requests, keep Alive serverspezifisch? Netzwerkprogrammierung 3
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
C Socket Systemsperren mit Socket Netzwerkprogrammierung 4
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
D Socket Multithread-Socket | Kurz vor dem Ziel Netzwerkprogrammierung 7
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
A UDP verlorene Pakete/ socket.receive zu langsam Netzwerkprogrammierung 27
CookieSoft Socket Packet per Socket Netzwerkprogrammierung 8
CookieSoft Fehler bei Socket Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Per Socket auf POP3 zugreifen? Netzwerkprogrammierung 7
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
Helgon Socket Socket IP Frage + Tutorial/Bücher Netzwerkprogrammierung 5
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T Socket String zu Socket Netzwerkprogrammierung 26
M Datenübertragung per Socket nur alle 200ms Netzwerkprogrammierung 4
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Socket blockierter Socket Netzwerkprogrammierung 4
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
T Alternative Socket mit Verbindungsabbruch Erkennung Netzwerkprogrammierung 2
M Socket, Ende Dateitransfer Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
D RMI oder Socket Netzwerkprogrammierung 4
H Socket Socket listening Netzwerkprogrammierung 11
D Client Socket mit Eventlistener? Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Netzwerkprogrammierung 18
N Socket geht auf Windows, aber auf Mac nicht ? Netzwerkprogrammierung 3
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
M SSl Socket Server und openssl key Netzwerkprogrammierung 3
J Socket Socket Programmierung. Wie anfangen? Netzwerkprogrammierung 4
DEvent Keine IOException beim schreiben Socket Netzwerkprogrammierung 3
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben