如何用C语言唯一标识一台机器?

2023-12-28

我想在 C 语言中唯一标识一台机器。

以下是具有序列号的来源,但不能保证它们是唯一的或存在的(例如可移动硬盘或网卡)。

  • CPU:我正在使用cpuid然而,除 Pentium 3 之外的任何处理器都没有实现序列号,即不相关。我可以使用处理器签名,但这对于every处理器。
  • HDD: ?
  • BIOS: ?
  • 母板: ?
  • MAC地址:通过系统函数调用。

对于所有的问号,我如何获得 C 语言中的序列号? 如果您回答与系统相关的解决方案,请提供 Windows/*nix。 另外,对于 Windows,请不要使用 WMI。

Thanks!


一般来说,您需要识别组件的组合,并了解组件可以并且将会随着时间的推移而变化。您需要容差算法来做出明智的猜测,以了解更改何时代表您之前识别的机器的更新或您以前未见过的新机器。

一种简单的方法是,当您需要确定正在处理的机器并与您之前见过的机器的快照进行比较时,枚举您列出的所有组件。如果任何序列号匹配,您可以非常安全地假设您正在处理同一台机器(尽管当然有可能有人将硬盘驱动器转移到新机器......但是,这就是simple方法。商业级启发法要复杂得多。)。

使用这种专门用于软件激活的方法受到积极执行的专利的保护,因此请小心您所做的事情。如果您确实想这样做来保护您的软件,那么最好使用商业解决方案。有些是相当实惠的。谷歌“软件激活”选项。

这里有一些获取特定系统信息的参考(并非所有都是特定的 C 食谱,但每种情况都可以使用 C)。

硬盘窗口http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx

硬盘Linuxhttp://www.webmasterworld.com/forum40/957.htm http://www.webmasterworld.com/forum40/957.htm

BIOS 窗口http://msdn.microsoft.com/en-us/library/aa394077(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/aa394077(v=vs.85).aspx

BIOS Linuxhttp://www.dufault.info/blog/a-better-way-to-find-your-bios-version-in-linux/ http://www.dufault.info/blog/a-better-way-to-find-your-bios-version-in-linux/

MAC 地址窗口C++:获取 Vista 上网络适配器的 MAC 地址? https://stackoverflow.com/questions/221894/c-get-mac-address-of-network-adapters-on-vista

MAC地址Linuxhttp://www.linuxquestions.org/questions/programming-9/linux-确定-mac-address-from-c-38217/ http://www.linuxquestions.org/questions/programming-9/linux-determining-mac-address-from-c-38217/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用C语言唯一标识一台机器? 的相关文章

随机推荐