我对从NetworkInterface.getNetworkInterfaces()返回值有点困惑。我试图通过NetworkInterface对象列表来筛选哪些是“真实的”(由实际硬件支持)。代码看起来像......java.net.NetworkInterface.getNetworkInterfaces()查找“真实”接口
Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();
while (e.hasMoreElements()) {
NetworkInterface iface = (NetworkInterface) e.nextElement();
if (!iface.isLoopback() && !iface.isVirtual()) {
byte[] macAddress = iface.getHardwareAddress();
String message = String.format(
"%s %s parent: %s",
iface.getName(),
byteArrayToHexString(macAddress),
iface.getParent());
System.out.println(message);
}
}
...和输出像...
vnic1 00 1C 42 00 00 09 parent: null
vnic0 00 1C 42 00 00 08 parent: null
en1 60 33 4B 20 C4 97 parent: null
我知道 “VNIC1” 和 “vnic0” 那些不 “真实”(他们被Parallels放在那里以支持我有时在这台机器上运行的虚拟机)。有没有通过NetworkInterface的方法可以检测到“真实”的或者它们与实际的对应物无法区分,比如“en1”?我讨厌不得不依靠名字,比如“它的名字是en0还是en1”。有任何想法吗?
代码已经过滤掉isVirtual()和isLoopback(),所以在这个意义上,vnics是“真实的”。此外,他们有空父母,所以歧视也不好。这个小问题扩大了我对MAC地址的理解。它就像你可以分配一个。 – 2011-12-16 08:10:22
你确实可以分配一个,mac地址是不可伪造的。 :) – Bombe 2011-12-16 12:29:25