如何可靠地获取计算机的板载网络适配器的MAC地址?

时间:2010-06-21 13:39:08

标签: c# .net networking

我正在努力(或多或少)唯一地识别用于许可目的的系统。我已经为此任务选择了计算机的板载网络适配器的MAC地址,因为我可以确定运行该软件的每个计算机实际上都有一个,这样可以避免在更改时重新激活,例如硬盘。

但是,我遇到了可靠地识别板载网络适配器的麻烦。

使用“Win32_NetworkAdapterConfiguration”ManagementClass,我可以获得大量的MAC地址,包括我喜欢的地址,但我还没有找到区分板载和Windows或病毒扫描程序安装的虚拟适配器的方法。 不过,这份清单似乎是有序的。我感兴趣的MAC地址(在我的机器上)列在其他(真实)网络适配器之前。 (该列表按接口索引排序。)

使用NetworkInterface.GetAllNetworkInterfaces(),我想我可以通过在.NetworkInterfaceType == NetworkInterfaceType.Ethernet上过滤来识别真正的网络适配器,但是这个列表似乎是无序的(添加的网卡出现在板载之前)。

首先使用第二种方法获取真实网卡的列表,然后按照第一个列表中的外观顺序对它们进行排序,这是识别我正在寻找的MAC地址的可靠方法吗?第一个列表中的接口索引可以更改吗? 我很高兴听到你的想法!

谢谢!

P.S。:我知道MAC地址可以很容易地改变,但我可以忍受。在插入WLAN棒后,我无法忍受不能使用该软件的客户=)

4 个答案:

答案 0 :(得分:10)

一个相当低技术的解决方案是调用netstat command并查找具有有效IP地址的适配器的MAC地址。我从未见过netstat命令在机器上失败,而我看到WMI多次给出了意想不到的结果。

在任何情况下,我之前都做过类似的激活系统,并且我使用MAC地址作为识别密钥。最终,它对我和客户来说都比它的价值更加麻烦!我发现更好的平衡和更少的麻烦是让用户在第一次安装软件时“登录”。经用户同意,您可以向服务器发送一些标识,例如其MAC地址。

然后,您只需定期检查激活数据库是否存在重大许可证违规,并根据需要停用密钥。作为一个讨厌产品激活的客户,以及讨厌软件盗版的ISV,我可以看到争论的两个方面,这样就避免了让客户处于一种令人不安的境地,即当某些事情(不可避免地)发生时,必须说服你他们是合法的错。

仅举几个原因,为什么MAC识别可能无法正常工作...我在笔记本电脑中使用两个NIC(有线和无线),具体取决于我是在工作还是在家。可以随时禁用其中一个或另一个。另外需要注意的是,我使用的虚拟机非常多,不仅可以获得自己的MAC,还可以指定我想要的任何MAC。然后当然有一天你会发现你的数据库中有100个人,其中全部为零的MAC。 :)这里没有任何保证。

答案 1 :(得分:1)

除了MAC地址之外,您还应该考虑WMI的其他一些属性。

Windows产品激活处理此问题的方法是查看MAC地址等属性(以及有关卡本身的其他识别信息,如PCI供应商信息),以及一些常见的设备属性(HDD控制器) ,显示适配器),并根据特定阈值重新激活的需要。如果这些事情中有太多变化,则需要重新激活。

这是一篇关于这个主题的精彩文章,应该给你一些思考如何选择好的属性来查看你自己的许可/激活系统:

http://aumha.org/win5/a/wpa.php

答案 2 :(得分:1)

如果您的主要要求是唯一识别PC,那么我建议您查看this question。接受的答案讨论了解决方案以及使用MAC地址标识符方法的缺陷

希望这有帮助

答案 3 :(得分:1)

要访问.Net中的网络接口详细信息,请参阅NetworkInterface.GetPhysicalAddress命名空间中的System.Net.NetworkInformation方法。

用法为detailed on MSDN

关于依赖MAC地址进行识别,我肯定会提到the link Ryan has provided

相关问题