Как однозначно идентифицировать компьютер с помощью C #? - PullRequest
7 голосов
/ 13 сентября 2009

Как однозначно идентифицировать компьютер (материнскую плату) с помощью C # (.Net / Mono, локальное приложение)?

Edition. Мы можем идентифицировать материнскую плату в .Net, используя что-то вроде этого (см. Получение уникальных идентификаторов системы в C # ):

using System.Management;
...
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_MotherboardDevice");
...

Но, к сожалению, Mono не поддерживает System.Management. Как это сделать под Mono для Linux? - Я не знаю: (

Ответы [ 5 ]

13 голосов
/ 13 сентября 2009

Напишите функцию, которая принимает в качестве входных данных несколько уникальных параметров оборудования и генерирует из них хеш.

Например, при активации Windows рассматриваются следующие характеристики оборудования:

  • Адаптер дисплея
  • SCSI-адаптер
  • Адаптер IDE (фактически, материнская плата)
  • Сетевой адаптер (NIC) и его MAC-адрес
  • Диапазон объема ОЗУ (т. Е. 0-64 МБ, 64-128 МБ и т. Д.)
  • Тип процессора
  • Серийный номер процессора
  • Устройство с жестким диском
  • Серийный номер тома жесткого диска (VSN)
  • CD-ROM / CD-RW / DVD-ROM

Вы можете выбрать несколько из них, чтобы сгенерировать ваш уникальный идентификатор компьютера.

5 голосов
/ 13 сентября 2009
3 голосов
/ 22 декабря 2016

У вас реально есть MotherboardID, CPUID, Disk Serial и MAC-адрес, по опыту, ни один из них не является 100%.

Наша статистика показывает

  • Серийный диск отсутствует 0,1%
  • MAC отсутствует 1,3%
  • Отсутствует идентификатор материнской платы 30%
  • CPUID отсутствует 99%

0,04% протестированных машин не дали никакой информации, мы даже не могли прочитать имя компьютера. Может быть, это был какой-то виртуальный ПК, экземпляр HyperV или VMWare, или, может быть, он был просто заблокирован? В любом случае ваш дизайн должен справиться с этими случаями.

Последовательность дисков является наиболее надежной, но простой в замене, mac может быть изменен и в зависимости от фильтрации, применяемой при чтении, может меняться при добавлении драйверов устройств (hyperv, wireshark и т. Д.).

Материнская плата и CPUID иногда возвращают недопустимые значения «NONE», «AAAA ..», «XXXX ...» и т. Д.

Вы также должны заметить, что эти функции могут быть очень медленными для вызова (они могут занять несколько секунд даже на быстром ПК), поэтому, возможно, стоит стереть их в фоновом потоке как можно раньше, в идеале не хочу блокировать их.

3 голосов
/ 13 сентября 2009

Попробуйте это:

http://carso -owen.blogspot.com / 2007/02 / как к получить-моя-материнская плата-серийному-number.html

Лично я бы пошел с серийным номером жесткого диска. Если материнская плата умирает и заменяется, этот компьютер больше не действителен. Если жесткий диск заменен, это не имеет большого значения, поскольку на нем установлено программное обеспечение.

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

2 голосов
/ 15 сентября 2009

Как насчет MAC-адреса сетевой карты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...