我想使用除MAC地址之外的机器特定ID号创建UUID哈希,以验证运行java应用程序的计算机。是否可以使用Java 1.8?如果是这样,我可以选择的最佳选择是什么?如果它将用于Windows和Unix平台,将会更有帮助。
答案 0 :(得分:3)
是。您可以在PC和Linux系统中不使用MAC地址。
我将逐步打破这个过程
第1步:确定操作系统
在您的Java代码中,标识像这样使用的操作系统
private static String OS = System.getProperty("os.name").toLowerCase();
if(OS.indexOf("win") >= 0)
//your code for windows OS.
else if(OS.indexOf("mac") >= 0)
//your code for MAC OS.
else if(OS.indexOf("sunos") >= 0)
//your code for Solaris OS
else if(OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0 )
//your code for unix OS's
步骤2:使用必需的命令获取系统的UUID
什么是UUID?
通用唯一标识符(UUID)是一个128位数字,用于标识计算机系统中的信息。
适用于Windows
Runtime.exec("wmic csproduct get UUID");
cmd命令wmic csproduct get UUID
返回PC [windows]的UUID
对于Linux
将此kernal命令与Runtime.exec("YOUR COMMAND")
一起使用
# cat /sys/class/dmi/id/product_uuid
要详细了解Runtime.exec
,请查看java.lang.Runtime.exec
java.lang.Runtime.exec:通过此,您可以为任何底层环境提供适当的shell命令,无论是MAC,Windows,Linux等。
答案 1 :(得分:0)
就像这样,可以根据平台将UUID检索为字符串。
String OS = System.getProperty("os.name").toLowerCase();
String machineId = null;
if (OS.indexOf("win") >= 0) {
StringBuffer output = new StringBuffer();
Process process;
String[] cmd = {"wmic", "csproduct", "get", "UUID"};
try {
process = Runtime.getRuntime().exec(cmd);
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
machineId = output.toString();
} else if (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0) {
StringBuffer output = new StringBuffer();
Process process;
String[] cmd = {"/bin/sh", "-c", "echo <password for superuser> | sudo -S cat /sys/class/dmi/id/product_uuid"};
try {
process = Runtime.getRuntime().exec(cmd);
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
machineId = output.toString();
}
答案 2 :(得分:0)
是的...您可以使用Java获取计算机的特定ID号 您可以将系统的UUID用作计算机的特定ID。
使用Java来获取系统的UUID。请参阅以下代码:-
String command = "wmic csproduct get UUID";
StringBuffer output = new StringBuffer();
Process SerNumProcess = Runtime.getRuntime().exec(command);
BufferedReader sNumReader = new BufferedReader(new InputStreamReader(SerNumProcess.getInputStream()));
String line = "";
while ((line = sNumReader.readLine()) != null) {
output.append(line + "\n");
}
String MachineID=output.toString().substring(output.indexOf("\n"), output.length()).trim();;
System.out.println(MachineID);
}
但是使用此代码只能获取Windows系统的UUID。
如果要使用Java来获取MAC操作系统的UUID。 请参考以下代码:
String command = "system_profiler SPHardwareDataType | awk '/UUID/ { print $3; }'";
StringBuffer output = new StringBuffer();
Process SerNumProcess = Runtime.getRuntime().exec(command);
BufferedReader sNumReader = new BufferedReader(new InputStreamReader(SerNumProcess.getInputStream()));
String line = "";
while ((line = sNumReader.readLine()) != null) {
output.append(line + "\n");
}
String MachineID=output.toString().substring(output.indexOf("UUID: "), output.length()).replace("UUID: ", "");
SerNumProcess.waitFor();
sNumReader.close();
System.out.println(MachineID);
}
谢谢。