用c#来获得电脑使用中的网卡硬件的MAC地址。

看到网上写了很多获得网卡MAC地址的方法,但是都是获取最后一个网卡的MAC地址。如果用户电脑上装有多网卡和虚拟网卡,如何只获得连接外网的网卡的MAC地址,如果用户只有虚拟... 看到网上写了很多获得网卡MAC地址的方法,但是都是获取最后一个网卡的MAC地址。如果用户电脑上装有多网卡和虚拟网卡,如何只获得连接外网的网卡的MAC地址,如果用户只有虚拟网卡,那就只获得虚拟网卡的MAC地址?我看驱动精灵什么的软件找网卡特别准,只找到电脑里装的硬件网卡,虚拟网卡人家也不找。。。。 展开
 我来答
匿名用户
2013-12-23
展开全部

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的引用。

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_NetworkAdapter"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_NetworkAdapter instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("NetConnectionStatus: {0}", queryObj["NetConnectionStatus"]);
                    Console.WriteLine("PNPDeviceID: {0}", queryObj["PNPDeviceID"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}
更多追问追答
追问
这个还是会将所有网卡列出,并且有很多网卡的前三个字符并非PCI,在我电脑上就会找不到网卡。。。
追答
这只是告诉你如何查询,具体要做判断的嘛,判断开头字符是不是PCI就好是的话就显示不是就不显示
米粒儿之道
2013-12-23 · 超过11用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:29.5万
展开全部
嘿嘿,我每次就直接在开始|运行里,获取的所有的MAC地址了也。
不知道有没有你所说的虚拟网卡呢。

开始|运行|输入“cmd”|再输入“ipconfig -all”,回车就行。
追问
我是想用c#代码来获取,是编程。谢谢。
追答
哦哦~~
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
paperkey
2013-12-23 · TA获得超过517个赞
知道小有建树答主
回答量:713
采纳率:0%
帮助的人:198万
展开全部
NetworkInterface.GetAllNetworkInterfaces();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式