Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中唯一地识别机器?_C_Windows_Linux_Identification - Fatal编程技术网

如何在C语言中唯一地识别机器?

如何在C语言中唯一地识别机器?,c,windows,linux,identification,C,Windows,Linux,Identification,我想用C唯一地标识一台机器 以下是具有序列号的源,但不保证它们是唯一的或存在的(如可移动硬盘或网卡) CPU:我使用的是cpuid指令,但是,除了奔腾3之外,任何处理器都没有实现序列号,即不相关。我可以使用处理器签名,但这不会对每个处理器都是唯一的 硬盘驱动器: BIOS: 主板: MAC地址:通过系统函数调用 对于所有的问号,我如何获得C中的序列号? 如果您使用依赖于系统的解决方案进行回答,请同时提供Windows/*nix。 另外,对于Windows,请不要使用WMI 谢谢 一般来说,您

我想用C唯一地标识一台机器

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

  • CPU:我使用的是
    cpuid
    指令,但是,除了奔腾3之外,任何处理器都没有实现序列号,即不相关。我可以使用处理器签名,但这不会对每个处理器都是唯一的
  • 硬盘驱动器:
  • BIOS:
  • 主板:
  • MAC地址:通过系统函数调用
对于所有的问号,我如何获得C中的序列号? 如果您使用依赖于系统的解决方案进行回答,请同时提供Windows/*nix。 另外,对于Windows,请不要使用WMI


谢谢

一般来说,您需要确定组件的组合,并了解组件可以而且将随着时间的推移而变化。您需要使用容差算法对更改何时表示您以前识别的机器的更新或以前未见过的新机器进行知情猜测

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

专门用于软件激活的这种方法是由一项积极实施的专利所涵盖的,所以要小心你在做什么。如果您确实希望这样做来保护您的软件,那么最好使用商业解决方案。有些相当便宜。谷歌“软件激活”选项

以下是获取特定系统信息的一些参考资料(并非所有都是特定的C烹饪书,但在每种情况下都可以使用C)

硬盘窗口

硬盘Linux

BIOS窗口

BIOS Linux

MAC地址窗口

MAC地址Linux

你想监视你程序的用户?序列号意味着什么?仅仅因为你可以追踪个人行为。假设您在web浏览器中实现了这一点。然后,可以使用该浏览器跟踪特定机器上的所有web访问,而不管它以何种web身份显示。所以这很容易被滥用来侵犯隐私。啊,看,这就是你犯错误的地方。此代码是客户端可执行文件。不需要序列号,程序本身可以通过键盘记录来跟踪所有计算机的使用情况,如果这是它的目的的话。不,我不认为我犯了“错误”。我很了解饼干的概念。用户可以删除Cookies(至少原则上是这样),礼貌的软件会询问我们是否允许他们存储Cookies。使用cpuid做这样的事情是恶意的,因为我不能轻易地更改我的cpuid,因为我可以删除cookie。至于windows链接,我特别声明,没有WMI。至于linux bios链接,这是版本号,而不是序列号。@Eric J.感谢您提及现有专利!知道它什么时候到期吗?@supertwang:这是Uniloc持有的216年到期的专利。不确定有效期。看见