Java getHostAddress () Gibt die VirtualBox-IPv4-Adresse zurück

  • Ich verwende Java, um eine einfache Methode innerhalb einer Klasse zu erstellen, die die LAN-IPv4-Adresse des Computers des Benutzers übernimmt. Für den most -Teil funktioniert dies gut, mit einer Ausnahme ... Die IP-Adresse, die ich zurückerhalte, ist die IPv4-Adresse meines VirtualBox-Ethernet-Adapters :

    Java getHostAddress () Gibt die VirtualBox-IPv4-Adresse zurück

    Hier wird die IP-Adresse ermittelt:

     import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    ...
    
    private String getIP() {
      try {
        return InetAddress.getLocalHost().getHostAddress();
      } catch (UnknownHostException e) {
        return "0.0.0.0";
      }
    }
     

    Könnte mir bitte jemand zeigen, wie ich das umgehen kann? Ich möchte vermeiden, dass der Endbenutzer keine VirtualBox (oder ähnliches) installiert hat.

    Vielen Dank für Ihre Zeit.

    22 November 2011
    Oliver Sprynoutman
2 answers
  • Ich denke, Sie müssen sich die NetworkInterface-Klasse ansehen und prüfen, ob Sie in diesem Fall die virtuelle Schnittstelle ausschließen können:

         for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) {
            //Perhaps networkInterface.isVirtual() will help you identify the correct one?
        }
     

    Ich habe keine virtuellen Schnittstellen in meinem Setup, daher kann ich nicht sagen, wie gut es funktioniert, aber ich hoffe, das gibt Ihnen einen Zeiger.

    22 November 2011
    Yishai
  • Im Anschluss an Yishais Vorschlag, den NetworkInterface Klasse, nach meiner Erfahrung hat isVirtual () nicht zwischen VM-Netzwerkadaptern und "normalen" Netzwerkadaptern unterschieden.

    Sie können jedoch die MAC-Adresse mithilfe von NetworkInterface.getHardwareAddress () abrufen und anhand einiger Muster vergleichen, ob die Netzwerkschnittstelle für virtuelle Maschinen geeignet ist. Siehe diese Seite Für gängige MAC-Adressmuster für virtuelle Maschinen.

    Es gibt keine Garantie, dass diese Technik funktionieren wird, da die meisten VM-Software dem Benutzer die explizite Festlegung der MAC-Adresse für Netzwerkadapter ermöglicht. In den meisten Fällen erhalten Benutzer jedoch nur die VM-Software, um eine zu generieren, und diese Muster sollten die Mehrheit der Fälle abdecken.

    22 November 2011
    prunge