我對從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