Java lokale IP Adresse


#1

Was wäre denn der beste Weg die lokale IP Adresse herauszufinden?
Versuche ein paar Treiber zum laufen zu bringen, die werden per TCP/IP gesteuert, aber die obere Treiberschicht nimmt scheinbar kein “localhost” entgegen, dann stürzt er ab.
Oder hat Linux einen anderen Begriff dafür?


#2

Das Loopbackinterface ist doch immer über 127.0.0.1 erreichbar. Funktioniert das nicht?


#3
NetworkInterface ni = null;
Inet4Address ia = null;
try {
	Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
	for(NetworkInterface n; eni.hasMoreElements();) {
		n = eni.nextElement();
		if(!n.isLoopback() && n.getInetAddresses().hasMoreElements()) {
			ni = n;
			break;
		}
	}
	if(ni != null) {
		Enumeration<InetAddress> eia = ni.getInetAddresses();
		for(InetAddress a; eia.hasMoreElements();) {
			a = eia.nextElement();
			if(a instanceof Inet4Address) {
				ia = (Inet4Address) a;
				break;
			}
		}
	}
} catch (Exception e) {
	// TODO: handle exception
}

Sofern nur ein Netzwerk Aktiv ist, funktioniert das für IP4-Adressen. Für IP6-Adressen wirds problematischer. Meine Karte hat z.B. 6 IP6-Adressen und ich wüsste nicht, welches die korrekte wär.


#4

Danke muss ich mal ausprobieren am Montag. Ich frag mich gerade was passiert wenn man mit keinem Netzwerk verbunden ist…


#5

Wie gesagt, 127.0.0.1 (bei IPv6 äquivalent ::1) funktioniert quasi immer, unter jedem Betriebssystem. Selbst dann, wenn keine Netzwerkkarte im Rechner steckt.


#6

Keine Sorge ich hab dich nicht überlesen.
Nur wird im Treiber localhost zu 127.0.0.1 aufgelöst, ich probiere das am Montag nochmal direkt aus. Kann sein dass das Gateway falsch eingestellt ist oder etwas anderes. Denn Loopback geht mit allen Adressen bis 127.255.255.254 aber… mir ist noch etwas anderes aufgefallen - nur eine Vermutung. Andere nicht-lokale Geräte im Netzwerk haben 127.X.X.X Adressen.