将 VMware 网络适配器与物理网络适配器区分开来 - 或 - 检测虚拟网络适配器
Posted
技术标签:
【中文标题】将 VMware 网络适配器与物理网络适配器区分开来 - 或 - 检测虚拟网络适配器【英文标题】:Differentiate VMware network adapter from physical network adapters -or- Detect Virtual Network Adaptor 【发布时间】:2011-03-05 00:07:17 【问题描述】:我必须使用任何 Windows API 区分真实地址和 VM 地址。
我正在使用GetAdaptersAddresses
API 来填充本地机器的 IP 地址列表。除了与 VMware 网络适配器关联的地址和其他地址(自动配置和隧道适配器地址)之外,我只需要提取“真实”地址。我无法找到任何 API 或任何标志来区分这一点。有什么办法可以做到吗?
PS:GetAdaptersAddresses
返回的 IP_ADAPTER_ADDRESSES
结构中的 IfType
标志无法帮助我区分 VMware 地址和真实地址。
【问题讨论】:
请参考以下链接了解更多详情。 codesanitize.com/2021/04/… 【参考方案1】:mac 地址的开头(前 3 段)显示接口是否为虚拟:
"00:05:69"; //vmware1
"00:0C:29"; //vmware2
"00:50:56"; //vmware3
"00:1C:42"; //parallels1
"00:03:FF"; //microsoft virtual pc
"00:0F:4B"; //virtual iron 4
"00:16:3E"; //red hat xen , oracle vm , xen source, novell xen
"08:00:27"; //virtualbox
编辑 更清楚地说,如果一个接口的MAC address 以上述任何给定的字符串开头,那么它就是虚拟的。
【讨论】:
只是想添加一些链接:使用此链接 - standards.ieee.org/regauth/oui/index.shtml 查找 id 预订。可以在这里进行反向操作:coffer.com/mac_find 这并不能完全回答这个问题:我们如何从公司名称中知道它是否是虚拟的? “来自公司名称”是什么意思? 为什么 VirtualBox MAC 地址没有在任何地方列出? VBox 5 使用的0A:00:27
没有在任何地方列出!旧的08:00:27
被列为“Cadmus 计算机系统”。 code.wireshark.org/review/…
详情请参考以下链接。 codesanitize.com/2021/04/…【参考方案2】:
在阅读clyfe答案后,我找到了一个站点以获得更完整的MAC地址前缀列表。
请访问:Vendor/Ethernet/Bluetooth MAC Address Lookup and Search
例如:VirtualBox has 17 MAC prefix!
Prefix Vendor
000F4B Virtual Iron Software, Inc. (was: Katana Technology)
001307 Paravirtual Corporation (was: Accenia, Inc.)
0013BE Virtual Conexions
0021F6 Virtual Iron Software
00240B Virtual Computer Inc.
00A0B1 First Virtual Corporation
00E0C8 virtual access, ltd.
545200 linux kernal virtual machine (kvm)
000F4B Virtual Iron Software, Inc. (was: Katana Technology)
001307 Paravirtual Corporation (was: Accenia, Inc.)
0013BE Virtual Conexions
0021F6 Oracle Corporation (was: Virtual Iron Software)
00240B Virtual Computer Inc.
00A0B1 First Virtual Corporation
00E0C8 virtual access, ltd.
18922C Virtual Instruments
3CF392 Virtualtek. Co. Ltd
最后,我更喜欢从其“网卡描述”中检测虚拟网络适配器。 如果我在它的描述中看到“虚拟”或“VMWare”字样(C++:IP_ADAPTER_INFO::Description),我会认为它是虚拟网络适配器。
【讨论】:
如何处理非英文的“描述”?【参考方案3】:您可以在下面的方法中传递 NetworkInterface ,它会返回布尔值以指示 NIC 是否为物理网卡。
private static bool IsPhysicalAdapter(NetworkInterface ni)
bool isPhysical = false;
ManagementObjectSearcher searcher = new
ManagementObjectSearcher(@"root\CIMV2",
string.Format(@"SELECT * FROM Win32_NetworkAdapter
WHERE GUID='0' AND NOT PNPDeviceID LIKE 'ROOT\\%'",
ni.Id));
foreach (ManagementObject share in searcher.Get())
isPhysical =
Convert.ToBoolean(share.Properties["PhysicalAdapter"].Value);
break;
return isPhysical;
【讨论】:
以上是关于将 VMware 网络适配器与物理网络适配器区分开来 - 或 - 检测虚拟网络适配器的主要内容,如果未能解决你的问题,请参考以下文章