如何确定接口是否是Windows PC上的物理LAN端口?

时间:2008-10-15 04:17:56

标签: windows wmi admin ipconfig

我正在寻找一种方法来精确确定接口是否是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

5 个答案:

答案 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。以下是有关检测已连接或断开的网卡的链接:

http://felizk.dk/?p=43

答案 2 :(得分:0)

如果一台机器有两个网卡,你如何选择哪一个是正确的?我看到这样做的唯一方法是为用户提供每个接口的IP地址的下拉组合。有关示例,请参阅Wireshark -

如果还有其他解决方案,我想听听他们的意见 -

答案 3 :(得分:0)

通过以下方式检查界面: 调用GetIfEntry并在返回的MIB_IFROW结构中查找IF_TYPE_ETHERNET_CSMACD的dwType。

或者在.NET中,查找具有以太网NetworkInterfaceType的System.Net.NetworkInformation.NetworkInterface。

并检查名称是否包含文本“虚拟”。

---这似乎是一种蹩脚的检查方式,但到目前为止,这是我看到忽略这些虚拟802.3适配器的唯一方法。

答案 4 :(得分:-1)

我不确定答案 - 但请注意,可以有多个以太网接口。