Как определить, является ли объект NetworkInterface
физическим сетевым адаптером, а не программным обеспечением/эмуляцией сетевого адаптера.Как определить, имеет ли объект NetworkInterface физический сетевой адаптер
Я знаю, что существуют такие методы, как NetworkInterface#isVirtual
и NetworkInterface#getParent
, которые теоретически говорят, является ли это физическим интерфейсом.
Но это явно не дает мне правильного ответа, потому что я получаю ниже o/p, когда использую эти методы, а 127.0.0.1
- это программный интерфейс обратной связи.
Я что-то упустил?
Код:
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netIf : Collections.list(nets)) {
System.out.printf("Display name: %s\n", netIf.getDisplayName());
System.out.printf("Name: %s\n", netIf.getName());
System.out.printf("Up? %s\n", netIf.isUp());
System.out.printf("Loopback? %s\n", netIf.isLoopback());
System.out.printf("PointToPoint? %s\n", netIf.isPointToPoint());
System.out.printf("Supports multicast? %s\n", netIf.supportsMulticast());
System.out.printf("Virtual? %s\n", netIf.isVirtual());
System.out.printf("Hardware address: %s\n", Arrays.toString(netIf.getHardwareAddress()));
System.out.printf("MTU: %s\n", netIf.getMTU());
System.out.printf("Parent: %s\n", netIf.getParent());
System.out.println("InetAddress:");
Enumeration<InetAddress> inetAddresses = netIf.getInetAddresses();
int count = 1;
for(InetAddress inetAddress : Collections.list(inetAddresses)){
System.out.println("\tInetAddress #" + count);
printInetAddressInfo(inetAddress, "\t\t");
count++;
}
System.out.println("SubInterfaces:");
displaySubInterfaces(netIf);
netIf = null;
System.out.printf("\n");
}
Результаты:
Display name: Software Loopback Interface 1
Name: lo
Up? true
Loopback? true
PointToPoint? false
Supports multicast? true
Virtual? false
Hardware address: null
MTU: -1
Parent: null
InetAddress:
InetAddress #1
inetAddress: /127.0.0.1
InetAddress #2
inetAddress: /0:0:0:0:0:0:0:1
SubInterfaces:
Благодарим за подробную информацию. Итак, есть ли какой-либо API, с помощью которого я могу определить, является ли данный интерфейс физическим NIC или нет? – hagrawal
AFAIK, no. Хотя вы можете использовать 'isLoopback()' и 'isVirtual()' вместе. (Одна из проблем заключается в том, что сама ОС может не знать, действительно ли NIC является физически физической, например, на виртуализованной платформе.) Но почему вам нужно знать, является ли NIC «физическим» ... что это значит? –
У меня есть тест env. server (Linux box), его можно получить, используя 2 FQDN - скажем, 'abc-sit.xyz.ca' и' abc-sit2.xyz.ca', я хотел понять, имеет ли эта система 2 NIC или один, а другой - просто программный интерфейс. – hagrawal