C#判断是否存在已连接的真实网卡

这个问题可以拆成两个小问题:

1、如何判断一个网卡是否为真实网卡(即物理网卡),因为可能还有虚拟网卡,比如装了某个虚拟机;
2、如何判断一个网卡有没有连接(连接不代表就能上Internet)。

注:这里的网卡确切地应该叫网络适配器(Network Adapter)。

用C#获取硬件信息最方便的莫过于WMI了,与网卡相关的信息就在Win32_NetworkAdapter这个类里面了。

第一个问题:在Win32_NetworkAdapter里有个叫PNPDeviceID的字符串属性,官方的说明是Windows Plug and Play device identifier of the logical device。如果这个属性的前3个字符是PCI, 那么这就是本机的真实网卡(不要问我为什么,我也想知道),包括无线网卡。

第二个问题:还是在Win32_NetworkAdapter里有个名为NetConnectionStatus的uint16类型的属性,其中2代表已连接,7代表断开。其他各值的含义请参见MSDN

OK,问题解决,最终的代码为:

ManagementObjectSearcher s = new ManagementObjectSearcher(
     @"SELECT DeviceID FROM Win32_NetworkAdapter WHERE NetConnectionStatus=2 AND PNPDeviceID LIKE 'PCI%'"); 
return s.Get().Count > 0; //True表示存在已连接的真实网卡,False反之。

记得添加using System.Management;和对System.Management.dll的引用。

-------------------------------------------------------------
  转载出处:
  百度空间:http://hi.baidu.com/roovent
-------------------------------------------------------------

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐