[英]How to uniquely identify computer using C#?
如何使用C#(。Net / Mono,本地应用程序)唯一标识计算机(主板)?
版。 我们可以使用以下方式在.Net中标识主板(请参阅在C#中获取唯一系统标识符 ):
using System.Management;
...
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_MotherboardDevice");
...
但是很遗憾,Mono不支持System.Management。 在Linux版Mono下如何做? - 我不知道 :(
编写一个函数,该函数将一些唯一的硬件参数作为输入,并从中生成哈希值。
例如,Windows激活查看以下硬件特征:
您可以选择其中的一些来生成唯一的计算机标识符。
请参阅: 在C#中获取唯一的系统标识符
尝试这个:
http://carso-owen.blogspot.com/2007/02/how-to-get-my-motherboard-serial-number.html
不过就我个人而言,我会选择硬盘驱动器序列号。 如果主板死了并被更换,则该PC不再有效。 如果更换了HDD驱动器,则没有太大关系,因为其中装有软件。
当然,另一方面,如果将HDD仅仅移动到其他地方,则信息也会随之而来,因此您可能希望查看序列号的组合,具体取决于所需用途。
实际上,您拥有MotherboardID,CPUID,磁盘序列和MAC地址,从经验来看,它们都不是100%。
我们的数据显示
0.04%的经过测试的计算机未产生任何信息,我们甚至无法读取计算机名称。 也许这些是某种虚拟PC,HyperV或VMWare实例,或者只是被锁定? 无论如何,您的设计都必须能够应对这些情况。
磁盘序列是最可靠的,但易于更改,可以更改mac,并且如果添加设备驱动程序(hyperv,wireshark等),则可以根据读取时应用的过滤条件进行更改。
主板和CPUID有时会返回无效的值“ NONE”,“ AAAA ..”,“ XXXX ...”等。
您还应该注意,这些函数的调用可能非常慢(即使在快速的PC上,它们也可能需要花费几秒钟的时间),因此值得尽早在后台线程上将它们启动,您最好不要阻止他们。
网卡的MAC地址如何?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.