Подтвердить что ты не робот

Как я могу однозначно идентифицировать машину в C?

Я хочу однозначно идентифицировать машину в C.

Ниже перечислены источники, имеющие серийные номера, но они не гарантированы быть уникальными или присутствовать (например, съемный жесткий диск или сетевая карта).

  • CPU: Я использую инструкцию cpuid, однако серийный номер не реализован для какого-либо процессора, кроме Pentium 3, то есть не имеет значения. Я могу использовать сигнатуру процессора, но это не будет уникальным для каждого процессора.
  • HDD:?
  • BIOS:?
  • материнская плата:?
  • MAC-адрес: через вызовы системных функций.

Для всех вопросительных знаков, как бы получить серийные номера в C? Если вы ответите на системно-зависимое решение, укажите как Windows/* nix. Кроме того, для Windows, пожалуйста, не WMI.

Спасибо!

4b9b3361

Ответ 1

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

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

Использование этого подхода специально для активации программного обеспечения распространяется на патент, который активно применяется, поэтому будьте осторожны с тем, что вы делаете. Если вы хотите сделать это для защиты своего программного обеспечения, лучше использовать коммерческое решение. Некоторые из них вполне доступны. Google "активация программного обеспечения" для параметров.

Вот несколько ссылок для получения конкретной системной информации (не все они являются конкретными кулинарными книгами C, но C можно использовать в каждом случае).

HDD Windows http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx

HDD Linux http://www.webmasterworld.com/forum40/957.htm

BIOS Windows http://msdn.microsoft.com/en-us/library/aa394077(v=vs.85).aspx

BIOS Linux http://www.dufault.info/blog/a-better-way-to-find-your-bios-version-in-linux/

MAC-адрес Windows С++: получить MAC-адрес сетевых адаптеров в Vista?

MAC-адрес Linux http://www.linuxquestions.org/info/programming-9/linux-determining-mac-address-from-c-38217/