Я хотел бы получить идентификатор, уникальный для компьютера с Java, в Windows, MacOS и, если это возможно, Linux. Это мог быть диск UUID, материнская плата S/N...
Runtime.getRuntime().exec
может использоваться (это не апплет).
Идеи?
Обычно MAC-адрес ассоциируется с сетевой картой.
Адрес доступен на Java 6 через следующий API:
Java 6 Docs for Hardware Address
Я не использовал его на Java, но для других приложений для сетевой идентификации он был полезен.
Что вы хотите сделать с этим уникальным идентификатором? Может быть, вы можете делать все, что хотите без этого идентификатора.
MAC-адрес может быть одним из вариантов, но это не доверенный уникальный идентификатор, потому что пользователь может изменить MAC-адрес компьютера.
Чтобы получить ID материнской платы или процессора, проверьте эту ссылку.
.Будьте осторожны при использовании MAC-адреса в качестве идентификатора. Я сталкивался с несколькими ошибками:
Даже с вышеупомянутыми проблемами, я все еще думаю, что это лучший чистый Java подход к аппаратной блокировке лицензии.
.Только для Windows можно получить идентификатор материнской платы, используя WMI, через COM-мост, например JACOB.
Пример:
import java.util.Enumeration;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.EnumVariant;
import com.jacob.com.Variant;
public class Test {
public static void main(String[] args) {
ComThread.InitMTA();
try {
ActiveXComponent wmi = new ActiveXComponent("winmgmts:\\\\.");
Variant instances = wmi.invoke("InstancesOf", "Win32_BaseBoard");
Enumeration<Variant> en = new EnumVariant(instances.getDispatch());
while (en.hasMoreElements())
{
ActiveXComponent bb = new ActiveXComponent(en.nextElement().getDispatch());
System.out.println(bb.getPropertyAsString("SerialNumber"));
break;
}
} finally {
ComThread.Release();
}
}
}
И если вы решили использовать MAC-адрес для идентификации машины, вы можете использовать WMI для определения того, подключен ли интерфейс через USB (если вы хотите исключить USB-адаптеры)
Также можно получить идентификатор жесткого диска через WMI, но это ненадежно.
.Думаю, вам стоит взглянуть на эту ссылку ... вы можете сделать смешанную клавишу, используя несколько такие идентификаторы, как mac+os+hostname+cpu id+серийный номер материнской платы.
Незнание всех ваших требований. Например, вы пытаетесь однозначно идентифицировать компьютер среди всех компьютеров в мире, или вы просто пытаетесь однозначно идентифицировать компьютер среди группы пользователей вашего приложения. Кроме того, можете ли вы создавать файлы в системе?
Если вы можете создать файл. Вы можете создать файл и использовать время создания файла в качестве своего уникального идентификатора. Если вы создадите его в пространстве пользователя, он будет однозначно идентифицировать пользователя вашего приложения на конкретном компьютере. Если вы создали его где-то в глобальном масштабе, он может однозначно идентифицировать машину.
Опять же, как и большинство вещей, насколько быстро достаточно быстро ... или, в данном случае, насколько уникально достаточно уникально.