Мне нужно распечатать все mac-адреса моей машины. Рекомендуемый способ - использовать NetworkInterface.getNetworkInterfaces () и выполнять итерацию возвращаемого перечисления. Однако, когда некоторые устройства не работают (НЕТ Ip настроен), вышеуказанный метод не возвращает интерфейсы.
Запуск «ip addr» вернет следующее
- lo: mtu 16436 qdisc noqueue
link / loopback 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00
инет 127.0.0.1/8 хост хоста lo
inet6 :: хозяин области видимости 1/128
valid_lft forever предпочитаемый_lft forever
- G2: mtu 1500 qdisc pfifo_fast qlen 1000
ссылка / эфир 00: 03: b2: 75: 99: c2 brd ff: ff: ff: ff: ff: ff
- G1: mtu 1500 qdisc pfifo_fast qlen 1000
ссылка / эфир 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
- eth2: mtu 1500 qdisc noop qlen 1000
ссылка / эфир 00: 03: b2: 75: 99: c4 brd ff: ff: ff: ff: ff: ff
- eth3: mtu 1500 qdisc noop qlen 1000
ссылка / эфир 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, если это возможно.
Есть мысли?