c - 如何在 C 语言中唯一标识一台机器?

标签 c windows linux identification

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

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

  • CPU:我正在使用 cpuid 指令,但是,除了 Pentium 3 之外,任何处理器都没有实现序列号,即不相关。我可以使用处理器签名,但这对每个处理器来说都不是唯一的。
  • 硬盘: ?
  • BIOS:?
  • 主板:?
  • MAC 地址:通过系统函数调用。

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

谢谢!

最佳答案

一般来说,您需要确定组件的组合,并了解码件可以并且将会随着时间的推移而发生变化。您需要容差算法来做出明智的猜测,判断何时更改表示对您之前确定的机器的更新,或者您以前从未见过的新机器。

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

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

这里有一些获取具体系统信息的引用资料(不是都是具体的C cookbook,但是都可以用C)。

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

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

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

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

MAC 地址窗口 C++: Get MAC address of network adapters on Vista?

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

关于c - 如何在 C 语言中唯一标识一台机器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7440763/

相关文章:

c - "assert I' m 保持此互斥锁是否可行?

c++ - 如何在 mfc C++ 中创建自定义 wm_copydata

linux - 如何在多线程程序中使用 Ollydbg?

linux - 对目录中的文件使用 rm

java - 在 Ubuntu 上用 Java 从网络摄像头读取图片?

c - 如何在需要 super 用户权限的程序上运行 Valgrind?

c - 如何知道链表是​​否被正确删除?

windows - 设置 jenkins git 返回 "Host key verification failed"错误

linux - 同一个文件的两个文件描述符

c - winsock 的 recv 函数