【问题标题】:Unique computer ID唯一的计算机 ID
【发布时间】:2011-03-29 08:16:42
【问题描述】:

我正在寻找一种获取唯一计算机 ID 的方法。

根据this post,我不能为此目的使用处理器 ID。可以拿主板ID吗?识别计算机的最佳方法是什么?

【问题讨论】:

  • 这与C#无关。
  • 人们会假设(我很欣赏,在回答编程问题时鲁莽)一旦确定了通用机制,将需要 C# 中的特定实现......
  • 这个问题我应该使用什么标签?
  • 如果你想要一个如何在 C# 中获取唯一计算机 ID 的示例,你应该用 C# 标记它......我猜这就是你所追求的不是吗?跨度>

标签: system-identification


【解决方案1】:

就像您所说的 CPU Id 不会是唯一的,但是您可以将它与另一个硬件标识符一起使用来创建您自己的唯一密钥。

参考程序集System.Management

因此,使用此代码获取 CPU ID:

string cpuInfo = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)
{
     cpuInfo = mo.Properties["processorID"].Value.ToString();
     break;
}

然后使用此代码获取HD ID:

string drive = "C";
ManagementObject dsk = new ManagementObject(
    @"win32_logicaldisk.deviceid=""" + drive + @":""");
dsk.Get();
string volumeSerial = dsk["VolumeSerialNumber"].ToString();

然后,您可以结合这两个序列来获得该机器的唯一 ID:

string uniqueId = cpuInfo + volumeSerial;

显然,您获得的硬件组件 ID 越多,唯一性就越大。但是,同一台机器拥有相同CPU序列和硬盘序列的机会已经微乎其微了。

【讨论】:

  • 正如我之前所说的处理器 ID 不合适。
  • @StuffHappens - 更新了答案。
  • 我明白你的意思。我只是怀疑如果有 RAID 并且有 2 个不同的 HDD 和磁盘 C,我会得到什么。
  • 这不会产生唯一的 ID。到目前为止,我们在从戴尔购买的 15 台机器上对此进行了测试,并且已经有 3 台具有相同的 ID。
  • 也许尝试的不仅仅是答案所说的两个组件?
【解决方案2】:

网络适配器的 MAC 地址? Windows 操作系统安装的安全标识符 (SID)? (假设您正在处理的是 Windows) 你能为每台电脑生成一个 GUID 吗?

你到底想达到什么目的?

【讨论】:

  • 如果他试图为许可机制这样做,那么 SID 和 MAC 地址可以很容易地更改,因此不会被接受。
【解决方案3】:

主板 ID 是一个非常独特的标识符。另一种选择是使用网卡 MAC 地址,它非常独特。

【讨论】:

  • 但是应该注意的是,MAC 可以从很多 NIC 的 NIC 属性窗口中更改,而主板 ID 更难更改。
  • 据我所知你可以更改你的mac地址。如果有多个网板怎么办(或者我应该如何命名)?
  • 没错。主板 ID 更为独特。但是,如果您不需要非常强的唯一性(即您可以假设 MAC 不会更改),则获取 MAC 地址要容易得多。 @Stuff,将地址散列在一起? :)
猜你喜欢
  • 2011-03-17
  • 2011-09-13
  • 2013-07-05
  • 1970-01-01
  • 2019-02-16
  • 2011-04-05
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多