如何使用C#(.Net / Mono,本地应用程序)唯一识别计算机(主板)?
版。我们可以使用类似的内容识别.Net中的主板(参见Get Unique System Identifiers in C#):
using System.Management;
...
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_MotherboardDevice");
...
但不幸的是Mono不支持System.Management。如何在Mono for Linux下进行? - 我不知道:(
答案 0 :(得分:13)
编写一个函数,该函数将一些独特的硬件参数作为输入,并从中生成散列。
例如,Windows激活会查看以下硬件特征:
您可以选择其中一些来生成唯一的计算机标识符。
答案 1 :(得分:5)
答案 2 :(得分:3)
试试这个:
http://carso-owen.blogspot.com/2007/02/how-to-get-my-motherboard-serial-number.html
就个人而言,我会选择硬盘序列号。如果主板死机并被更换,则该PC无效。如果更换硬盘驱动器,则无关紧要,因为软件已在其上。
当然,另一方面,如果硬盘只是移动到其他地方,那么信息就随之而来,所以你可能想看一下序列号的组合,这取决于你想要它。
答案 3 :(得分:3)
您实际拥有MotherboardID,CPUID,磁盘串口和MAC地址,根据经验,它们都不是100%。
我们的统计数据显示
0.04%的测试机器没有提供任何信息,我们甚至无法读取计算机名称。也许这些是某种虚拟PC,HyperV或VMWare实例,或者可能只是被锁定了?无论如何,您的设计必须能够应对这些情况。
磁盘序列是最可靠的,但易于更改,mac可以更改,并且根据读取时应用的过滤,如果添加了设备驱动程序(hyperv,wireshark等),则可能会更改。
主板和CPUID有时会返回无效“NONE”,“AAAA ..”,“XXXX ......”等无效的值。
您还应该注意,这些功能调用起来可能非常慢(即使在快速PC上也可能需要几秒钟),因此可能需要尽早在后台线程中将它们踢掉,理想情况下我想阻止他们。
答案 4 :(得分:2)
网卡的MAC address怎么样?