如何使用Java获取计算机特定的ID号

时间:2018-03-26 09:55:04

标签: java uuid

我想使用除MAC地址之外的机器特定ID号创建UUID哈希,以验证运行java应用程序的计算机。是否可以使用Java 1.8?如果是这样,我可以选择的最佳选择是什么?如果它将用于Windows和Unix平台,将会更有帮助。

3 个答案:

答案 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);
} 

谢谢。