【问题标题】:How do you determine if an interface is a physical LAN port on a Windows PC?如何确定一个接口是否是 Windows PC 上的物理 LAN 端口?
【发布时间】:2008-10-15 04:17:55
【问题描述】:

我正在寻找一种方法来准确确定接口是否是 Windows 中 PC 上的物理 802.3 以太网端口。

使用 ipconfig /all 我可以列出所有接口,当我在我的电脑上执行此操作时,可以在此处列出几个条目,包括 VPN、蓝牙、Wifi 和物理以太网接口。

我正在寻找类似“isPhysical(interface)”的东西。 (有多个物理网口也没关系,我就是想知道是不是物理网口)。

更新:

谢谢杰和克里斯!

(cmets 空间不足,我会在这里发布)

我目前正在考虑使用 WMI Win32_NetworkAdapter。 但是,它显示了 4 个 AdapterType="Ethernet 802.3" 的接口。

我的电脑上只有 1 个物理端口,其他端口的名称为“虚拟机网络服务驱动程序”。 (我假设这些是我的公司出于某些邪恶的原因安装的)

我在界面中找到了我需要的属性,但是winXP下没有!!!

PhysicalAdapter 数据类型:布尔型 访问类型:只读

表示适配器是否为 物理或逻辑适配器。如果 没错,适配器是物理的。 窗口 服务器 2003、Windows XP、Windows 2000、 和 Windows NT 4.0:这个属性是 不可用。

除了对名称中的“Virtual”一词进行文本过滤外,有什么方法可以确定它是否是物理端口?

2008 年 12 月更新

看起来虚拟接口是在您安装 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

【问题讨论】:

  • 你需要澄清你的问题——你问的是哪一个是硬连线的,然后在人们告诉你可能不止一个时标记他们的回答。您的问题需要更改为“如何判断接口是否为有线以太网接口?”
  • 他不是那个标记你的人。
  • 好的,这很好 - 但是标记一个没有解释就挑战问题本身的回答是没有帮助的。当前形式的问题存在问题 - 目前的两个答案都指出了该问题。
  • 它们不应该是答案;他们应该是这个问题的cmets。

标签: windows wmi admin ipconfig


【解决方案1】:

调用GetIfEntry 并在返回的MIB_IFROW 结构中查找 IF_TYPE_ETHERNET_CSMACD 的 dwType。

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

【讨论】:

  • 我没试过,但我猜这个方法在列出的虚拟适配器上仍然会有同样的问题,对吧?
【解决方案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

您可以使用 Jay 提到的命名空间 System.Net.NetworkInformation。这是一个关于检测哪些网卡连接或断开的链接:

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

【讨论】:

  • 谢谢,我喜欢 WMI 界面,因为它易于访问。
【解决方案3】:

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

如果有其他解决方案,我想听听 -

【讨论】:

  • 可能是多个端口。主要是我想要一个方法来确定端口是否是本地局域网端口。像 isHardwired(interface) 这样的东西。
【解决方案4】:

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

或者在 .NET 中,查找 NetworkInterfaceType 为 Ethernet 的 System.Net.NetworkInformation.NetworkInterface。

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

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多