我正在使用WMI(Win32_NetworkAdapter)并尝试获取有线或无线连接的物理网络适配器的详细信息,并避免使用虚拟适配器等。
阅读this article它解释了你必须对WMI进行一些聪明的查询以消除虚拟适配器,并尝试只返回真正的物理适配器。
阅读this post它解释了您可以比较网络适配器“描述”中的文本,看它是否包含“无线”,“802.11”或“WLAN”,如果有的话,那么大多数可能适配器是无线适配器。
对于今天的.Net版本和其他进步,这些真的是在Windows XP +上确定网络适配器是有线还是无线并且不是来自VM软件等的虚拟适配器的唯一两种方式?如果没有,请解释。
答案 0 :(得分:2)
我认为这是一个老问题,但我在互联网上有found an answer elsewhere,它描述了如何做到这一点(一直滚动到评论)。
评论者的技术允许识别WiFi和蓝牙接口,其中所有其他类型可以组合在一起。如果目标只是将WiFi与以太网适配器分开,那就足够了。
查询是(Powershell示例):
$nics = Get-WmiObject -Namespace "root/CIMV2" -Query "SELECT * FROM Win32_NetworkAdapter"
$types = Get-WmiObject -Namespace "root/WMI" -Query "SELECT * FROM MSNdis_PhysicalMediumType"
第一个查询是提供适配器列表的常用方法。如前所述,可以通过许多其他选择标准将其过滤为仅包含有效的物理设备。
第二个查询返回一个具有NdisPhysicalMediumType
属性的WMI对象,根据链接的网站,该属性的值 9 用于WiFi, 10 用于蓝牙以及 0 以太网和大多数其他适配器类型。
看起来加入这两个查询似乎必须使用第一个查询的Name
或Description
属性以及第二个查询的InstanceName
属性在脚本中手动完成。
答案 1 :(得分:2)
您可以在&root; \ StandardCimv2' 命名空间中使用新的WMI类 MSFT_NetAdapter 。此类是在 Windows 8 中引入的。
我们可以使用属性 ConnectorPresent 来仅过滤到物理适配器。 接下来我们必须消除Wi-Fi适配器(存在于物理适配器中),我们可以使用 InterfaceType 和/或 NdisPhysicalMedium 属性。
InterfaceType 由Internet分配名称机构(IANA)定义,所有类似以太网的接口的值为 ethernetCsmacd(6)(请参阅https://www.iana.org/assignments/ianaiftype-mib/ianaiftype-mib)
NdisPhysicalMedium 适用于以太网适配器值 0 或 802.3(14)。
所以我在C#中的解决方案是:
$ composer install --no-dev
答案 2 :(得分:0)
也许这会对你有所帮助 http://weblogs.sqlteam.com/mladenp/archive/2010/11/04/find-only-physical-network-adapters-with-wmi-win32_networkadapter-class.aspx使用ManagementObjectSearcher类
通过WMI确定网络适配器类型答案 3 :(得分:0)
select * from Win32_NetworkAdapter where NetConnectionID LIKE "%Wireless%" or NetConnectionID LIKE "%Wi-Fi%"