Java getHostAddress () Возвращение IPv4-адреса VirtualBox - PullRequest
3 голосов
/ 22 ноября 2011

Я использую Java для создания простого метода в классе, который будет захватывать IPv4-адрес локальной сети компьютера пользователя. Для части most это работает хорошо, за одним исключением ... IP-адрес, который я получаю, является IPv4-адресом моего адаптера VirtualBox Ethernet, что подтверждается при вводе ipconfig в командной строке:

enter image description here

Вот метод, который захватит IP-адрес:

import java.net.InetAddress;
import java.net.UnknownHostException;

...

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

Может кто-нибудь показать мне, как обойти это? Я хотел бы избежать предположения, что у конечного пользователя не будет установлен VirtualBox (или что-то подобное).

Спасибо за ваше время.

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011

Я думаю, вам нужно взглянуть на класс NetworkInterface и посмотреть, поможет ли он исключить виртуальный интерфейс в этом случае:

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

У меня нет виртуальных интерфейсов в моей настройке, поэтому я не могу сказать, насколько хорошо это работает, но я надеюсь, что это дает вам указатель.

1 голос
/ 22 ноября 2011

Исходя из того, что Ишай предложил использовать класс NetworkInterface , по моему опыту isVirtual () не различал сетевые адаптеры VM и «нормальные».

Но вы можете получить MAC-адрес с помощью NetworkInterface.getHardwareAddress () и выполнить некоторое сопоставление с шаблоном, чтобы угадать, предназначен ли сетевой интерфейс для виртуальных машин.См. на этой странице для общих шаблонов MAC-адресов виртуальной машины.

Нет гарантии, что этот метод будет работать, так как большинство программного обеспечения VM позволяет пользователю явно указывать MAC-адрес для сетевых адаптеров.Однако в большинстве случаев пользователи просто получат программное обеспечение виртуальной машины для его создания, и поэтому эти шаблоны должны охватывать большинство случаев.

...