2014-02-06 3 views
9

Я ищу значение, которое будет уникальным для каждого компьютера, независимого от платформы. Это для регистрации компьютеров в учетной записи, так что вы не можете войти в систему с не зарегистрированных. Я не хочу использовать MAC-адрес, так как это можно легко изменить. Мне было интересно, может быть, получить идентификаторы из нескольких аппаратных компонентов и объединить их, чтобы получить уникальный идентификатор для машины. Однако я не знал, как получить идентификаторы от указанных компонентов, используя Java. Я провел некоторое исследование и нашел способ получить серийный номер процессора, но это будет работать только для окон, поскольку он просто запускает временную визуальную базовую команду/скрипт/что угодно. Любая информация приветствуется, спасибо.Независимая от платформы уникальная машина id java

+3

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

+2

см. Обсуждение здесь http://stackoverflow.com/questions/2004666/get-unique-machine-id – Leo

+1

Спасибо за ответы, я до сих пор не знаю, как я могу это сделать. – user1009569

ответ

0

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

Так что только две возможности, которые я вижу.

Сначала вы можете попробовать создать хэш некоторой комбинации имени хоста, текущего пути к классам, свойств системы и значений JVM. Вдоль этой линии вы можете увидеть, какие значения вы получаете от System.getenv() или System.getProperties()

Второй способ - использовать собственный API среды выполнения, чтобы возвращать системные значения, но вам нужно будет иметь конкретные команды для запуска для каждого типа ОС, который пытается поддерживать ваш клиент. Пример:

Runtime.getRuntime(). Exec ("some_command_line_prog_that_returns_sys_info");

Смежные вопросы