【问题标题】:How to get a computer specific ID number using Java如何使用 Java 获取计算机特定的 ID 号
【发布时间】:2018-09-04 10:19:50
【问题描述】:

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

【问题讨论】:

标签: java uuid


【解决方案1】:

就像这样,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】:

    是的...您可以使用 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);
    } 
    

    谢谢。

    【讨论】:

    • 请从您的回答中删除该问题。这不是一个普通的论坛,而是一个问答网站,问题和答案之间有明显的区别。要获得您问题的答案,请将其作为一个新问题提出:)
    【解决方案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 位数字,用于识别计算机系统中的信息。

    适用于窗户

    Runtime.exec("wmic csproduct get UUID");
    

    cmd 命令wmic csproduct get UUID 返回 PC 的 UUID [windows]

    适用于 Linux
    将此内核命令与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 等。

    【讨论】:

    • 谢谢。你拯救了这一天。当命令需要运行权限时,您能否指定如何将命令输出转换为字符串。
    猜你喜欢
    • 1970-01-01
    • 2012-02-19
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2021-07-18
    • 2012-02-23
    • 2010-12-31
    相关资源
    最近更新 更多