Windows vs Linux

windl

Bekanntes Mitglied
Hallo liebe Community,

ich habe folgendes Problem was ich nicht verstehe.
Gelernt habe ich einmal, dass Java sowohl auf Windows als auch auf LINUX das gleiche Verhalten liefern sollt.

Der folgende Code wird unter Windows (Java 1.7) ohne Probleme ausgeführt liefert aber unter Linux auf einer Raspberry PI (Java 1.8) nur null zurück.

Java:
    private byte[] getHardwareAdress() {
        byte[] hwAddr = null;
        InetAddress local;
       
        try {
            local = InetAddress.getLocalHost();
            NetworkInterface ni = NetworkInterface.getByInetAddress(local);
           
            if (ni != null)
                hwAddr = ni.getHardwareAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        }
       
        return hwAddr;
    }


Es wäre schön,wenn man mir erklären könnte woran es liegt.

Danke
Uwe
 
Zuletzt bearbeitet von einem Moderator:

Tobse

Top Contributor
Ich vermute mal, dass das Windows auf deinem PC läuft? Einen normalen Desktop-PC kannst du nicht mit dem Raspberry vergleichen; zumal du auch zwei unterschiedliche Java-Versionen nutzt.

Ich würde mir mal anschauen, welche Rückgabe du von getLocalHost() bekommst. Ich vermute unter Windows ist das deine Lan-IP (z.B. 192.168.1.10) und unter Linux 127.0.0.1. Dieser Unterschied könnte dann auch der Grund für die Unterschiedlichen Rückgabewerte von NetworkInterface#getByInetAddress sein
 

windl

Bekanntes Mitglied
Hallo Tobse,

vielen Dank - genau so verhält es sich. Nun bleibt die Frage, wie bekomme ich aus Linux die Lan-IP wie bei Windows?
 

stg

Top Contributor
Die Frage ist eigentlich wieso du die programmatisch ermitteln must?

Weil sie möglicherweise dynamisch ist und automatisch vergeben wird.
Weil man eine Anwendung ausliefern möchte, die auf verschiedenen Maschinen in verschiedenen Netzwerken laufen soll - eventuell auch mehrere Maschinen im selben Netzwerk.
 

Thallius

Top Contributor
Weil sie möglicherweise dynamisch ist und automatisch vergeben wird.
Weil man eine Anwendung ausliefern möchte, die auf verschiedenen Maschinen in verschiedenen Netzwerken laufen soll - eventuell auch mehrere Maschinen im selben Netzwerk.

Dann weiß ich aber immer noch nicht warum ein Programm die IP des eigenen Rechners wissen muss...
 

stg

Top Contributor
Naja, vielleicht will man sie einfach anzeigen ... ansonsten natürlich ein berechtigter Einwand. Ein wirklich sinnvoller Anwendungsfall fällt mir gerade auch nicht ein. :)
 

windl

Bekanntes Mitglied
Hallo Thallius,
dieser Teil ist ein Ausschnitt aus einem Apple-Airserver den ich für meine Belange angepasst habe. Ich verstehe es so, dass das Java-Programm die IP an das Iphone mit überträgt um sich dort als Server zu registrieren.

Zumindest wird es im JMDNS - ServiceInfo.create () mit abgefragt.

Gruß
Uwe
 

Tobse

Top Contributor
Auf SO (1. link von stg) wird das ganze schon richtig beschrieben: du kannst alle Netzwerkschnittstellen abfragen und deren IPs abfragen. Hier würde ich folgende Strategie Vorschlagen:

1. Alle Netzwerkschnittstellen abfragen: NetworkInterface#getNetworkInterfaces()
2. Die IP-Adressen jeder Schnittstelle abarbeiten: NetworkInterface#getInetAddresses()
3. Alle rausfiltern, welche LAN IPs sind: 10.*.*.*, 192.168.*.*, 172.16.*.*-172.31.*.*

Wenn dabei mehr als eine übrig bleibt den Benutzer um Mithilfe bitten: einen Dialog o.ä. zeigen, wo die korrekte Adresse ausgewählt werden kann. Ich denke aber dass in 99% der Privaten Netzwerke/Privaten PCs nur eine (oder keine) übrig bleibt.
 

windl

Bekanntes Mitglied
Hallo,
ich habe es gestern Abend getestet und der folgende Code liefert das erwartete Ergebnis.
Java:
public static String getIpAddress() {
 
    String ipAddress = null;
 
    try {
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
 
        while (networkInterfaces.hasMoreElements()) {
 
            NetworkInterface networkInterface = networkInterfaces.nextElement();
 
            byte[] hardwareAddress = networkInterface.getHardwareAddress();
            if (null == hardwareAddress || 0 == hardwareAddress.length || (0 == hardwareAddress[0] && 0 == hardwareAddress[1] && 0 == hardwareAddress[2])) continue;
 
            Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
 
            if (inetAddresses.hasMoreElements()) ipAddress = inetAddresses.nextElement().toString();
 
            break;
        }
    } catch (SocketException e) {
        e.printStackTrace();
    }
 
    return ipAddress;
}

Danke
Uwe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
Dit_ UDP Port bestimmen | Windows, MAC, Linux... Netzwerkprogrammierung 2
multiholle RMI Verbindung Linux <-> Windows Netzwerkprogrammierung 4
T RMI delay windows(client) <-> linux(server) Netzwerkprogrammierung 11
DeviAn Über ein Linux Server ein Windows Server nach einer File fragen Netzwerkprogrammierung 6
K Server Client läuft in Windows allerdings nicht in Linux Netzwerkprogrammierung 9
H freigabe - unterschiedliche pfade unter linux und windows Netzwerkprogrammierung 7
M IP Adressen auslesen und in Windows/Linux übergeben Netzwerkprogrammierung 5
W Windows 2019-Server Dienste starten unter Nutzer Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
T Windows-Anmeldung weiterreichen? Netzwerkprogrammierung 4
J Eclipse: Windows-Dienst auf fremden Host aktivieren Netzwerkprogrammierung 14
S soap kann nicht zu 127.0.0.1:8090 unter Windows verbinden Netzwerkprogrammierung 2
B Die IPv4 Einstellungen ändern (Windows 7) Netzwerkprogrammierung 9
N Socket geht auf Windows, aber auf Mac nicht ? Netzwerkprogrammierung 3
aze JPCap unter Windows 7(64 Bit) Netzwerkprogrammierung 6
J Windows Unix remote Netzwerkprogrammierung 2
C SingleSignOn auf Client mittels Windows Credentials Netzwerkprogrammierung 11
W Terminal-Server (Windows 2003) und Java Netzwerkprogrammierung 9
Q Datein von Windows nach Mac senden Netzwerkprogrammierung 4
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
KNeuhaus (Windows) Authentication VON einer Java-App aus. Netzwerkprogrammierung 2
K Windows 10 Threads gleichzeitig Netzwerkprogrammierung 18
G Windows-Verbindungen Netzwerkprogrammierung 4
K Windows TCP/IP Einstellungen ändern Netzwerkprogrammierung 4
B Internetverbindung prüfen unter Windows Netzwerkprogrammierung 1
S Windows-Share? Netzwerkprogrammierung 2
D Anmelden an einer Windows-Domäne Netzwerkprogrammierung 2
G Ich krieg bei mir zuhause nichts auf die Reihe(Windows XP) Netzwerkprogrammierung 8
C Windows-Username sicher einlesen Netzwerkprogrammierung 11
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
G Update - Funktionalität wie Windows Update Netzwerkprogrammierung 11
G Java und Netzwerkumgebung von Windows Netzwerkprogrammierung 5
R PID's auf remote PC unter Windows herrausfinden Netzwerkprogrammierung 2
M Windows NT Domainnamen abfragen Netzwerkprogrammierung 3
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
OnDemand Linux RAM per Thread Netzwerkprogrammierung 3
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
B Socket Verbindungsverlust unter Linux erkennen Netzwerkprogrammierung 5
W Tcpdump aktive Netzwerkverbindungen/Programme (Linux) Netzwerkprogrammierung 2
N Über Socket an Linux-Server Kommandos absetzen? Netzwerkprogrammierung 4
psysp Paket unter Linux broadcaste Netzwerkprogrammierung 2
R LINUX: getHostAddress() und getHostName() werfen Exception Netzwerkprogrammierung 6
A Socket unter Linux Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben