如何利用c#找到物理网卡的Mac地址

我们经常会在代码中查找设备的Mac地址,以确认设备的唯一性。但是如果你的设备安装了一些虚拟机,这个时候就会比较麻烦了


出现问题

看一下我这边通过ipconfig /all 跑出来的结果,大家猜猜看,哪个才是我的物理网卡呢?

在这里插入图片描述

看名称?看描述,看NetBIOS启用状态?唉,都不靠谱,你能想到是第一个标着fake_wlan,描述带Hyper-V的才是我的物理网卡么?

How

那么如何才能去找到我们的物理网卡信息呢?

OK,首先的一个问题是如何找到网卡信息。德熙这边的博客有介绍了dotnet core 获取 MacAddress 地址方法,不过很不巧这里面没有介绍虚拟网卡和物理网卡的区分方法。

不过,德熙的博客里面介绍了使用WMI,查询Win32_NetworkAdapterConfiguration的方式找到网络适配器的信息。对于系统来说物理网卡和虚拟网卡的Win32_NetworkAdapterConfiguration是没有区别的,所以这里我们看不出分别(Ipconfig也是如此)

但是WMI有另外一个信息叫做,Win32_NetworkAdapter,他包含了网络适配器的信息。

而这个信息中最关键的两点是NetConnectionStatusPNPDeviceID,前者代表了网络连接状态,可以过滤哪些不在上网的设备,后者更为重要,表示设备实例路径,就是下面这个家伙

在这里插入图片描述

设备实例路径有什么用呢?小Track就是物理网卡的设备实例路径都是以"PCI"开头的,(当然你要说厂家喜欢乱来,或者自己把里面的内容改了,那我也没有办法)。

OK,有了这些知识,我们写代码就很方便了。

额,不完全是。这个其实是跟点击其他程序窗口这一操作有关。其实你只要启动时点击其他窗口的手速够快,也能出现。

我们看看MessageBox的源码。当我们采用MessageBox.Show方法重载不带有owner参数时,他会通过GetActiveWindow这个方法获取当前激活的窗口,作为owner。而我们通过只要在程序执行到这里之前点击其他程序窗口,就会出现上述问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值