Wie lassen sich die Netzwerkdaten des aktuellen Rechners auslesen? v.5.0

Mit Hilfe der Klassen InetAddress und NetworkInterface lassen sich Hostname, MAC-Adresse, IP-Adresse und der Network-Schnittstellenname ermitteln. Das Beispiel zeigt anhand einer Reihe Methoden, wie diese Angaben einzeln ausgelesen werden können.

Die Methode getOwnerHostName() liefert den Netzwerknamen des Rechners, auf dem sie ausgeführt wird. Sie ermittelt zunächst über die statische Methode getLocalHost() die Netzwerk-Adresse des Localhosts als InetAddress -Object. Auf diesem aufgerufen liefert getHostName() dann den String des entsprechenden Netzwerknamens.

Die Methode wird in der Beispielklasse in printAllOwnerMacs() verwendet, um ein Array der IP-Adressen auszulesen. Sie liefert den Parameter der statischen Methode getAllByName() . Das Array speichert die IPv4- und IPv6-Adressen, die als String mittels getHostAddress() dargestellt werden können.

Die Methode getOwnerNetworkDeviceName() liefert den Device-Namen des z.Zt. aktiven Netzwerk-Interfaces. Besteht keine Netzwerkverbindung, so wird der Name des Loopback-Device zurück gegeben. Die Methode bedient sich der Klasse NetworkInterface , die nach Übergabe der aktuellen IP an die statische Methode getByInetAddress() das NetworkInterface -Objekt liefert, dessen Name durch getDisplayName() ermittelt werden kann.

Auch die Methode getOwnerMac() bedient sich der Klasse NetworkInterface und liefert die Hardware- (=Mac-) Adresse des aktiven Device. Wie oben wird hierzu zunächst das Netzwerkinterface ermittelt, dessen Hardware-Adresse dann als Byte-Array durch die Methode getHardwareAddress() zurückgegeben wird. Um eine String-Repräsentation zu erhalten, wird das Array durchlaufen, die einzelnen Werte in das Hexadezimal-Format konvertiert und durch einen Doppelpunkt getrennt aneinander gehängt. Nach Entfernen des letzten Doppelpuntes kann der String zurück gegeben werden.

GetOwnerIp() ermittelt die IP des aktuellen Netzwerkinterfaces durch Aufruf von getHostAdress() auf der Netzwerkadresse des lokalen Hosts.

import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;

public class NetworkUtil {

    public void printAllOwnerMacs() {
        InetAddress[] ias;
        try {
            ias = InetAddress.getAllByName(getOwnerHostName());
            if (ias != null)
                for (InetAddress ia : ias) {
                    System.out.println(ia.getHostAddress());
                }
        } catch (UnknownHostException e) {
            System.err.println("Unbekannter Hostname");
        }
    }

    public String getOwnerHostName() {
        try {
            return InetAddress.getLocalHost().getHostName();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getOwnerNetworkDeviceName() {
        try {
            NetworkInterface ni = NetworkInterface.getByInetAddress(InetAddress
                    .getLocalHost());
            if (ni != null)
                return ni.getDisplayName();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getOwnerMac() {
        try {
            NetworkInterface ni = NetworkInterface.getByInetAddress(InetAddress
                    .getLocalHost());
            byte[] hwa = ni.getHardwareAddress();
            if (hwa == null)
                return null;
            String mac = "";
            for (int i = 0; i < hwa.length; i++) {
                mac += String.format("%x:", hwa[i]);
            }
            if (mac.length() > 0 && !ni.isLoopback()) {
                return mac.toLowerCase().substring(0, mac.length() - 1);
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getOwnerIp() {
        try {
            return InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        NetworkUtil nu = new NetworkUtil();
        nu.printAllOwnerMacs();
        System.out.println("Host-Name: " + nu.getOwnerHostName());
        System.out.println("Device-Name: " + nu.getOwnerNetworkDeviceName());
        System.out.println("Mac-Adresse: " + nu.getOwnerMac());
        System.out.println("IP: " + nu.getOwnerIp());
    }
}