我希望使用与MAC地址不同的机器特定ID号创建UUID哈希,以验证运行Java应用程序的计算机。在Java 1.8中是否有可能实现?如果可以,我应该选择哪个选项最佳?如果能够在Windows和Unix平台上使用,则更加有助于解决。
我希望使用与MAC地址不同的机器特定ID号创建UUID哈希,以验证运行Java应用程序的计算机。在Java 1.8中是否有可能实现?如果可以,我应该选择哪个选项最佳?如果能够在Windows和Unix平台上使用,则更加有助于解决。
是的,您可以在PC和Linux系统中不使用MAC地址来完成此操作。
我将把该过程分解成步骤。
第一步:确定操作系统
在您的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");
命令行命令wmic csproduct get UUID
可返回PC [windows]的UUID。
对于Linux系统
使用以下内核命令:Runtime.exec("YOUR COMMAND")
# cat /sys/class/dmi/id/product_uuid
要了解更多关于 Runtime.exec
的内容,请查看这个java.lang.Runtime.exec
java.lang.Runtime.exec : 通过此方法,您可以为任何基础环境(如MAC、Windows、Linux等)提供适当的shell命令。
是的...您可以使用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 OS的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);
}
谢谢你。
就像这样,根据平台,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();
}