Системный вызов для получения серийного номера машины в Linux - PullRequest
4 голосов
/ 06 августа 2010

Я знаю, что это длинный путь, но есть ли способ получить серийный номер или уникально идентифицируемую часть информации в linux?

Если так, как это можно запрограммировать в Java-программу?

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

Заранее спасибо

Ответы [ 5 ]

4 голосов
/ 06 августа 2010

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

  • / sys / class / dmi / id / product_uuid: UUID продукта основной платы, как установленоизготовителем платы и закодированы в информации BIOS DMI.Может использоваться для идентификации материнской платы и только материнской платы.Это изменяется, когда пользователь заменяет главную плату.Кроме того, довольно часто производители BIOS записывают в него фиктивные сериалы.Кроме того, он специфичен для x86.Доступ для непривилегированных пользователей запрещен.Следовательно, он не имеет общего назначения.

  • CPUID / EAX = 3 Серийный номер CPU: UUID CPU, установленный производителем CPU и закодированный на микросхеме CPU.Он может использоваться для идентификации ЦП и только ЦП.Это изменяется, когда пользователь заменяет процессор.Кроме того, большинство современных процессоров больше не поддерживают эту функцию, а старые компьютеры обычно отключают эту опцию по умолчанию, управляемую с помощью опции BIOS Setup.Кроме того, он специфичен для x86.Следовательно, это тоже мало общего применения.

Так что / sys / class / dmi / id / product_uuid кажется демоном alidation хорошим кандидатом, но для этого нужен код проверкизапустить как привилегированный пользователь.Полный пост в блоге действительно полезен для чтения!

2 голосов
/ 06 августа 2010

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

Если вы просто хотите сказать пользователю, что «эй, вы уже работаетеэту лицензию на другом компьютере в вашей сети, получите другую лицензию », тогда хорошим способом является сетевое вещание, чтобы они могли найти друг друга.Самый простой способ сделать это, вероятно, использовать Zeroconf с библиотекой jmdns.

Если вы хотите быть уверены, что программа запускается только в одном месте с заданным серийным номером,Единственный способ сделать это с обычными компьютерами - это заставить программу вызывать центральное материнство через Интернет во время работы и регистрировать, где она используется.Затем Mothership возвращает фрагмент, содержащий важный код, который необходимо запустить.Скорее всего, вы можете реализовать это с помощью Java WebStart.

0 голосов
/ 06 августа 2010

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

0 голосов
/ 06 августа 2010

Mac-адрес может быть изменен.Проверьте это .Кроме того, Mac-адрес привязан к интерфейсу (Ethernet / Wireless / HPNA и т. Д.).Таким образом, умный пользователь может легко настроить это.Существует аналогичная проблема, обсуждаемая в stackoverflow.Проверьте это .

0 голосов
/ 06 августа 2010

Я использую MAC-адрес в качестве уникального идентификатора.

InetAddress address = InetAddress.getByName("192.168.1.1");
NetworkInterface ni = NetworkInterface.getByInetAddress(address);
byte[] mac = ni.getHardwareAddress();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...