代码之家  ›  专栏  ›  技术社区  ›  macropas

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

  •  6
  • macropas  · 技术社区  · 15 年前

    如何使用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 回复  |  直到 15 年前
        1
  •  2
  •   kenny    15 年前

    那呢? MAC address 网络卡的?

        2
  •  13
  •   user151323    15 年前

    编写一个函数,该函数接受一些唯一的硬件参数作为输入,并从中生成散列值。

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

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

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

        3
  •  5
  •   Community Mr_and_Mrs_D    7 年前
        4
  •  3
  •   Neil Barnwell    15 年前

    试试这个:

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

    但就我个人而言,我会使用硬盘序列号。如果主板死机并被更换,则该PC不再有效。如果更换了硬盘驱动器,这并不重要,因为上面有软件。

    当然,另一方面,如果HDD刚被移到别处,信息也会随之而去,因此您可能需要查看序列号的组合,这取决于您想要它的用途。

        5
  •  3
  •   Sprotty    8 年前

    实际上,您有主板ID、CPU ID、磁盘序列号和MAC地址,根据经验,它们都不是100%。

    我们的统计显示

    • 磁盘序列丢失0.1%
    • Mac缺失1.3%
    • 主板ID丢失30%
    • cpuid丢失99%

    0.04%的被测机器没有信息,我们甚至无法读取计算机名。也许这些是某种虚拟PC、hyper或vmware实例,或者只是非常锁定?无论如何,你的设计必须能够应付这些情况。

    磁盘串行是最可靠的,但很容易更改,Mac可以更改,并且取决于读取时应用的过滤,如果添加设备驱动程序(hyper、wireshark等),它可以更改。

    主板和cpuid有时返回无效的值“none”、“aaaa..”、“xxxx…”等。

    您还应该注意,这些函数的调用速度可能非常慢(即使在快速的PC上,它们也可能需要几秒钟),因此可能值得尽早在后台线程上启动它们,理想情况下,您不希望阻塞它们。