Невозможно получить все сетевые интерфейсы с NetworkInterface.getNetworkInterfaces в Linux

Мне нужно распечатать все mac-адреса моей машины. Рекомендуемый способ - использовать NetworkInterface.getNetworkInterfaces() и выполнять итерацию возвращаемого перечисления. Однако, когда некоторые устройства не работают (НЕТ Ip настроен), то вышеупомянутый метод не возвращает интерфейсы.

Запуск "IP-адрес" вернет следующее

  1. lo: mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 хост области действия lo inet6::1/128 хост области действия valid_lft навсегда предпочитаемый_всегда навсегда
  2. G2: mtu 1500 qdisc pfifo_fast qlen 1000 link / ether 00: 03: b2: 75: 99: c2 brd ff: ff: ff: ff: ff: ff
  3. G1: mtu 1500 qdisc pfifo_fast qlen 1000 link / ether 00: 03: b2: 75: 99: c3 brd ff: ff: ff: ff: ff: ff inet 10.205.191.123/16 brd 10.205.255.255 область действия глобальная G1 inet6 fe80::203:b2ff:fe75: ссылка области действия 99c3/64 valid_lft forever предпочитаемый_lft forever
  4. eth2: mtu 1500 qdisc noop qlen 1000 link / ether 00: 03: b2: 75: 99: c4 brd ff: ff: ff: ff: ff: ff
  5. eth3: mtu 1500 qdisc noop qlen 1000 link / ether 00: 03: b2: 75: 99: c5 brd ff: ff: ff: ff: ff: ff

Однако, когда я запускаю код Java (даже с правами root или с сетевыми привилегиями), я получаю только петлевые интерфейсы и интерфейсы G1.

Вот код, который я написал для тестирования:

Enumeration<NetworkInterface> ni = NetworkInterface.getNetworkInterfaces();
while(ni.hasMoreElements()){
NetworkInterface nextElement = ni.nextElement();
byte[] mac = nextElement.getHardwareAddress();
if (mac != null) {
         StringBuffer macAddress = new StringBuffer();
         for (int i = 0; i < mac.length; i++) {
              macAddress.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? ":" : ""));
         }
         System.out.println(macAddress.toString());
}
}

Выход: 00: 03: B2: 75: 99: C3 (только для G1).

Я действительно хочу чистого решения Java, если это возможно.
Какие-нибудь мысли?

1 ответ

Решение

Похоже, что "IP-адрес" показывает все сетевые адаптеры, но не все настроены с интернет-адресом. Итак, Java возвращает только сетевые интерфейсы, то есть настроенные адаптеры.

Другие вопросы по тегам