繁体   English   中英

如何使用C#唯一标识计算机?

[英]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激活查看以下硬件特征:

  • 显示适配器
  • SCSI适配器
  • IDE适配器(实际上是主板)
  • 网络适​​配器(NIC)及其MAC地址
  • RAM量范围(即0-64mb,64-128mb等)
  • 处理器类型
  • 处理器序列号
  • 硬盘装置
  • 硬盘卷序列号(VSN)
  • CD-ROM / CD-RW / DVD-ROM

您可以选择其中的一些来生成唯一的计算机标识符。

尝试这个:

http://carso-owen.blogspot.com/2007/02/how-to-get-my-motherboard-serial-number.html

不过就我个人而言,我会选择硬盘驱动器序列号。 如果主板死了并被更换,则该PC不再有效。 如果更换了HDD驱动器,则没有太大关系,因为其中装有软件。

当然,另一方面,如果将HDD仅仅移动到其他地方,则信息也会随之而来,因此您可能希望查看序列号的组合,具体取决于所需用途。

实际上,您拥有MotherboardID,CPUID,磁盘序列和MAC地址,从经验来看,它们都不是100%。

我们的数据显示

  • 磁盘序列丢失0.1%
  • MAC缺失1.3%
  • 主板ID缺失30%
  • CPUID缺少99%

0.04%的经过测试的计算机未产生任何信息,我们甚至无法读取计算机名称。 也许这些是某种虚拟PC,HyperV或VMWare实例,或者只是被锁定? 无论如何,您的设计都必须能够应对这些情况。

磁盘序列是最可靠的,但易于更改,可以更改mac,并且如果添加设备驱动程序(hyperv,wireshark等),则可以根据读取时应用的过滤条件进行更改。

主板和CPUID有时会返回无效的值“ NONE”,“ AAAA ..”,“ XXXX ...”等。

您还应该注意,这些函数的调用可能非常慢(即使在快速的PC上,它们也可能需要花费几秒钟的时间),因此值得尽早在后台线程上将它们启动,您最好不要阻止他们。

网卡的MAC地址如何?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM