我正在寻找一种方法来精确确定接口是否是Windows中PC上的物理802.3以太网端口。
使用ipconfig / all我可以列出所有接口,当我在我的电脑上执行此操作时,可以在此处列出几个条目,包括VPN,蓝牙,Wifi和物理以太网接口。
我正在寻找像“isPhysical(interface)”这样的东西。 (可以有多个物理局域网端口,我只是想知道它是否是一个物理端口)。
更新:
杰伊和克里斯谢谢!(评论中的空间不够,所以我会在这里发帖)
我目前正在考虑使用WMI Win32_NetworkAdapter。 但是,它显示4个接口,AdapterType =“Ethernet 802.3”。
我的电脑上只有1个物理端口,其他人有名称,“虚拟机网络服务驱动程序”。 (我认为这些是由我公司安装的,因为一些恶劣的原因)
我在界面中找到了我需要的属性,但它在winXP中不可用!!!
PhysicalAdapter数据类型:布尔值 访问类型:只读
指示适配器是否为 物理或逻辑适配器。如果 没错,适配器是物理的。 的Windows Server 2003,Windows XP,Windows 2000, 和Windows NT 4.0:此属性是 不可用。
有没有办法确定它是否是物理端口,而不是对名称中的“虚拟”一词进行文本过滤?
更新12/08
看起来在安装VM时会添加虚拟接口。
以下是有关虚拟适配器的一些详细信息: http://blogs.msdn.com/virtual_pc_guy/archive/2005/04/01/404816.aspx
发现如果用户没有管理员权限,WMI界面不返回所需数据的问题。所以,现在看一下GetAdapterInfo方法。但是,它似乎将“虚拟机服务驱动程序”添加到实际适配器的描述中,使“虚拟”文本检查无效。
GetAdapterInfo返回的结构:
http://msdn.microsoft.com/en-us/library/aa366062(VS.85).aspx
答案 0 :(得分:4)
调用GetIfEntry并在返回的MIB_IFROW结构中查找IF_TYPE_ETHERNET_CSMACD的dwType。
或者在.NET中,查找带有NetworkInterfaceType以太网的System.Net.NetworkInformation.NetworkInterface。
答案 1 :(得分:2)
到目前为止,我使用任何系统Windows 2000 SP2及以上版本的最佳方法是使用WMI。
http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
Win32_NetworkAdapter http://msdn.microsoft.com/en-us/library/aa394216(VS.85).aspx
你可以使用提到的名称空间System.Net.NetworkInformation Jay。以下是有关检测已连接或断开的网卡的链接:
答案 2 :(得分:0)
如果一台机器有两个网卡,你如何选择哪一个是正确的?我看到这样做的唯一方法是为用户提供每个接口的IP地址的下拉组合。有关示例,请参阅Wireshark -
如果还有其他解决方案,我想听听他们的意见 -
答案 3 :(得分:0)
通过以下方式检查界面: 调用GetIfEntry并在返回的MIB_IFROW结构中查找IF_TYPE_ETHERNET_CSMACD的dwType。
或者在.NET中,查找具有以太网NetworkInterfaceType的System.Net.NetworkInformation.NetworkInterface。
并检查名称是否包含文本“虚拟”。
---这似乎是一种蹩脚的检查方式,但到目前为止,这是我看到忽略这些虚拟802.3适配器的唯一方法。
答案 4 :(得分:-1)
我不确定答案 - 但请注意,可以有多个以太网接口。