代码之家  ›  专栏  ›  技术社区  ›  Jens

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

  •  8
  • Jens  · 技术社区  · 14 年前

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

    不过,我很难可靠地识别板载网络适配器。

    使用“Win32\u NetworkAdapterConfiguration”管理类,我可以获得很多MAC地址,包括我喜欢的地址,但是我还没有找到一种方法来区分板载适配器和Windows或病毒扫描程序安装的虚拟适配器。 不过,这张单子似乎是有序的。我感兴趣的MAC地址(在我的机器上)列在其他(真实的)网络适配器之前(列表按接口索引排序。)

    NetworkInterface.GetAllNetworkInterfaces() ,我想我可以通过过滤来识别真正的网络适配器 .NetworkInterfaceType == NetworkInterfaceType.Ethernet ,但此列表似乎无序(已添加的网卡出现在已安装的网卡之前)。

    我很高兴听到你的想法!

    注:我知道MAC地址很容易更改,但我可以接受。我不能忍受客户仅仅插入一根WLAN棒就不能使用软件=)

    4 回复  |  直到 14 年前
        1
  •  10
  •   Josh    14 年前

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

    无论如何,我以前也做过类似的激活系统,我用MAC地址作为识别密钥。最后,它结束了更多的麻烦比它的价值-无论是对我还是客户!我发现一个更好的平衡和更少的麻烦是让用户在第一次安装软件时“登录”。在用户同意的情况下,您可以向服务器发送一些标识,比如他们的MAC地址。

    举几个理由说明为什么MAC识别可能不起作用。。。我在笔记本电脑里使用两个网卡(有线和无线),这取决于我是在工作还是在家。其中一个可以随时禁用。另外需要注意的是,我经常使用虚拟机,它们不仅有自己的MAC,而且我可以指定任何我想要的MAC。当然,总有一天你会发现你的数据库里有100个人的MAC都是零这里什么都不能保证。

        2
  •  1
  •   Warren Rumak    14 年前

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

    这是一篇关于这个主题的好文章,应该让你思考一下如何为自己的许可/激活系统选择好的属性:

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

        3
  •  1
  •   Community CDub    7 年前

    如果你的主要要求是唯一地识别一台电脑,那么我建议你看看 this question . 公认的答案谈到了一种解决方案以及使用MAC地址标识符方法的缺陷

    希望这有帮助

        4
  •  1
  •   Community CDub    7 年前

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

    用法是 detailed on MSDN .

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