使用C#可以轻松获取哪些“唯一”的系统标识符(用于哈希和唯一地标识一个系统)?我可以仅对硬盘大小等进行哈希,但我需要识别和区分所有由相同组件构建的计算机,因此不能只依靠这些。
感谢提示、思路和示例代码!
使用C#可以轻松获取哪些“唯一”的系统标识符(用于哈希和唯一地标识一个系统)?我可以仅对硬盘大小等进行哈希,但我需要识别和区分所有由相同组件构建的计算机,因此不能只依靠这些。
感谢提示、思路和示例代码!
以下是使用WMI的良好起点...
// Win32_CPU will work too
var search = new ManagementObjectSearcher( "SELECT * FROM Win32_baseboard" );
var mobos = search.Get();
foreach (var m in mobos)
{
var serial = m["SerialNumber"]; // ProcessorID if you use Win32_CPU
}
你可以使用多个硬件设备来解决这个问题。
你可以使用System.Management命名空间来获取与硬件相关的所有内容,如处理器ID、MAC地址等等,然后可以将其哈希在一起。
请看这篇文章:
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
如果你在谈论Windows,那么每个Windows安装都有一个唯一的产品ID(当您查看“我的电脑”的属性时可以看到)。我认为这是存储在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ)
中的。我猜你想要更多信息吗?
Response.Write(@"<br>System.Guid.NewGuid().ToString() = " + System.Guid.NewGuid().ToString());
Response.Write(@"<br>System.Guid.NewGuid().ToString(""N"") = " + System.Guid.NewGuid().ToString("N"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""D"") = " + System.Guid.NewGuid().ToString("D"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""B"") = " + System.Guid.NewGuid().ToString("B"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""P"") = " + System.Guid.NewGuid().ToString("P"));
网络适配器MAC地址:
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// probably need to do some filtering on ni.NetworkInterfaceType here
Console.WriteLine(ni.GetPhysicalAddress());
}
你可以使用C#与WMI来获取关于硬件的相当多的信息。
硬盘ID和以太网MAC地址是系统识别方案中常用的两种唯一标识符。理论上,MAC地址对于每个网络卡是唯一的。