5

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

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

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

更新:

杰伊和克里斯谢谢!

(评论空间不够,我就在这里发)

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

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

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

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

指示适配器是物理适配器还是逻辑适配器。如果为 True,则适配器是物理的。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

4

5 回答 5

5

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

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

于 2008-10-15T04:41:40.877 回答
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

于 2008-10-15T05:09:15.160 回答
0

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

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

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

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

于 2008-10-22T09:10:20.723 回答
0

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

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

于 2008-10-15T04:25:24.607 回答
-1

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

于 2008-10-15T04:26:46.820 回答