Ip Adresse von eth0 ermitteln

Google -> Java Netzwerkadapter -> Gleich erste (nicht Werbe-)Seite ein tolles Beispiel.
Hier der Code(nach Korrektur einiger kleiner Syntaktischer Fehler):

Java:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
 
/**
 *
 * @author li
 */
public class Main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        showNIC();
    }
 
    /**
     * Gibt die Informationen über alle Netzwerkkarten aus
     *
     */
    public static void showNIC() {
        try {
            Enumeration<NetworkInterface> interfaceNIC = NetworkInterface.getNetworkInterfaces();
// Alle Schnittstellen durchlaufen
            while (interfaceNIC.hasMoreElements()) {
                //Elemente abfragen und ausgeben
                NetworkInterface n = interfaceNIC.nextElement();
                System.out.println(String.format("Netzwerk-Interface: %s (%s)", n.getName(), n.getDisplayName()));
// Adressen abrufen
                Enumeration<InetAddress> addresses = n.getInetAddresses();
// Adressen durchlaufen
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                    System.out.println(String.format("- %s", address.getHostAddress()));
                }
                System.out.println();
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

Ausgabe:

Netzwerk-Interface: lo (MS TCP Loopback interface)
- 127.0.0.1

Netzwerk-Interface: eth0 (Atheros AR5006X Wireless Network Adapter - Paketplaner-Miniport)
- 192.168.2.188

Netzwerk-Interface: eth1 (Realtek RTL8139-Familie-PCI-Fast Ethernet-NIC - Paketplaner-Miniport)
 
Net interface: eth0
IP address: /fe80:0:0:0:250:56ff:fec0:8%4
IP address: /172.16.121.1

da kommen dann 2ip raus will aber nur die 2te mit 172.16.121.1?
 
dann musst du um die Ausgabe noch eine kleinen If-Abfrage setzen:
Java:
// Adressen durchlaufen
while (addresses.hasMoreElements()) {
  InetAddress address = addresses.nextElement();
  if (address.getClass().equals(Inet4Address.class)) {
    System.out.println(String.format("- %s", address.getHostAddress()));
  }
}
InetAddress hat nämlich zwei Unterklassen. Einmal Inet4Address und Inet6Address und da dein Netzwerkadapter zwei Netzwerkadressen hat(einmal eine v4 und eine v6 und du möchtest nur die v4-Adresse haben), musst du einfach abfragen, ob die InetAddress vom Typ Inet4Address ist.

Gruß

Matt
 
Hallo,

schau mal hier:
Java:
package de.tutorials.net;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;

public class IPAddressExamples {
    public static void main(String[] args) throws Exception {
        for (NetworkInterface nic : Collections.list(NetworkInterface.getNetworkInterfaces())) {
            System.out.println(nic);
            for (InterfaceAddress ifaceAddress : nic.getInterfaceAddresses()) {
                InetAddress address = ifaceAddress.getAddress();
                if (address instanceof Inet4Address) {
                    System.out.println(address);
                }
            }
        }

        Inet4Address inet4Address = getInet4Address("eth3");
        System.out.println(inet4Address);
    }

    public static Inet4Address getInet4Address(String interfaceName) throws SocketException {
        NetworkInterface nic = NetworkInterface.getByName(interfaceName);
        Inet4Address inet4Address = null;
        for (InterfaceAddress ifaceAddress : nic.getInterfaceAddresses()) {
            InetAddress address = ifaceAddress.getAddress();
            if (address instanceof Inet4Address) {
                inet4Address = (Inet4Address) address;
                break;
            }
        }
        return inet4Address;
    }
}

Gruß Tom
 
Zurück