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

时间:2009-09-13 10:25:02

标签: c# .net mono

如何使用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下进行? - 我不知道:(

5 个答案:

答案 0 :(得分:13)

编写一个函数,该函数将一些独特的硬件参数作为输入,并从中生成散列。

例如,Windows激活会查看以下硬件特征:

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

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

答案 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.1%
  • MAC缺少1.3%
  • 主板ID缺少30%
  • CPUID缺少99%

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

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

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

您还应该注意,这些功能调用起来可能非常慢(即使在快速PC上也可能需要几秒钟),因此可能需要尽早在后台线程中将它们踢掉,理想情况下我想阻止他们。

答案 4 :(得分:2)

网卡的MAC address怎么样?