Получить уникальные системные идентификаторы в C#

Какие "уникальные" системные идентификаторы могут быть легко получены с помощью C# (для хеширования, а затем уникальной идентификации системы)? Я мог бы просто хэшировать размер жесткого диска и тому подобное, но мне нужно идентифицировать и различать компьютеры, которые все построены из одних и тех же компонентов, поэтому я не могу этого сделать.

Ценю советы, идеи, примеры кода!

6 ответов

Решение

Вот хорошее начало с 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, чтобы получить всю информацию, связанную с аппаратным обеспечением, ProcessorId, MAC-адресами, и намного больше информации, которую можно затем объединить.

Посмотрите на эту статью:

http://www.codeproject.com/KB/system/GetHardwareInformation.aspx

Предполагая, что вы говорите о Windows, каждая установка Windows имеет уникальный идентификатор продукта (который вы можете увидеть при просмотре свойств моего компьютера). Я думаю, что это хранится в HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ), Я так понимаю, ты хочешь большего?

MAC-адрес сетевой карты:

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
    // probably need to do some filtering on ni.NetworkInterfaceType here
    Console.WriteLine(ni.GetPhysicalAddress());
}

Вы можете использовать WMI с C#, чтобы получить немного информации об оборудовании.

Идентификаторы жесткого диска и MAC-адрес Ethernet являются двумя общими уникальными идентификаторами, используемыми в схемах идентификации системы. MAC-адрес, теоретически, уникален для каждой сетевой карты.

Вы можете посмотреть на использование GUID

Что такое GUID

Для тех из вас, кто не знает, GUID (произносится как goo'id - глобальный уникальный идентификатор) - это 128-разрядное целое число, которое можно использовать для однозначной идентификации чего-либо. Вы можете хранить пользователей или продукты в своей базе данных, и вы хотите как-то однозначно идентифицировать каждую строку в базе данных. Обычный подход заключается в создании автоинкрементного целого числа, другой способ - создать GUID для ваших продуктов.

Как создать GUID в C#

Метод GUID находится в пространстве имен System. Метод GUID System.Guid.NewGuid() инициализирует новый экземпляр класса GUID.

Есть также несколько перегрузок, доступных для тех из вас, кто хочет, чтобы GUID был отформатирован определенным образом.

Следующий живой пример выведет сгенерированный GUID, исходный код также приведен ниже.

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"));
Другие вопросы по тегам