Java获取本地机器码

1. 简介

本文介绍如何使用Java代码获取本地机器码。机器码是用于唯一标识一台计算机的一串字符,它通常用于软件许可验证、硬件识别等场景。

2. 获取MAC地址

MAC地址是网络设备的唯一硬件标识,我们可以通过Java代码获取本地机器的MAC地址。

首先,我们需要导入java.net包和java.util包:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

然后,我们可以使用以下代码获取本地机器的MAC地址:

public static String getMACAddress() {
    try {
        InetAddress localHost = InetAddress.getLocalHost();
        NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
        byte[] macAddressBytes = networkInterface.getHardwareAddress();
        StringBuilder macAddress = new StringBuilder();
        for (byte b : macAddressBytes) {
            macAddress.append(String.format("%02x", b));
        }
        return macAddress.toString();
    } catch (UnknownHostException | SocketException e) {
        e.printStackTrace();
    }
    return null;
}

上述代码中,我们首先通过InetAddress.getLocalHost()方法获取本地主机的InetAddress对象,然后通过NetworkInterface.getByInetAddress()方法获取网络接口对象。接下来,我们可以通过networkInterface.getHardwareAddress()方法获取MAC地址的字节数组,然后将字节数组转换为十六进制格式的字符串。

3. 获取硬盘序列号

硬盘序列号是硬盘的唯一标识符,我们可以通过Java代码获取本地机器的硬盘序列号。

首先,我们需要导入java.io包:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

然后,我们可以使用以下代码获取本地机器的硬盘序列号:

public static String getHardDiskSerialNumber() {
    try {
        Process process = Runtime.getRuntime().exec("wmic diskdrive get serialnumber");
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        bufferedReader.readLine(); // Skip the first line
        String line = bufferedReader.readLine();
        return line.trim();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

上述代码中,我们通过执行wmic diskdrive get serialnumber命令获取硬盘序列号。然后,我们通过读取命令输出的结果,提取硬盘序列号。

4. 获取CPU序列号

CPU序列号是CPU的唯一标识符,我们可以通过Java代码获取本地机器的CPU序列号。

首先,我们需要导入java.io包:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

然后,我们可以使用以下代码获取本地机器的CPU序列号:

public static String getCPUSerialNumber() {
    try {
        Process process = Runtime.getRuntime().exec(new String[] { "wmic", "cpu", "get", "ProcessorId" });
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        bufferedReader.readLine(); // Skip the first line
        String line = bufferedReader.readLine();
        return line.trim();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

上述代码中,我们通过执行wmic cpu get ProcessorId命令获取CPU序列号。然后,我们通过读取命令输出的结果,提取CPU序列号。

5. 完整示例代码

下面是一个完整的示例代码,用于获取本地机器的MAC地址、硬盘序列号和CPU序列号:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class MachineCodeUtils {

    public static void main(String[] args) {
        String macAddress = getMACAddress();
        String hardDiskSerialNumber = getHardDiskSerialNumber();
        String cpuSerialNumber = getCPUSerialNumber();

        System.out.println("MAC Address: " + macAddress);
        System.out.println("Hard Disk Serial Number: " + hardDiskSerialNumber);
        System.out.println("CPU Serial Number: " + cpuSerialNumber);
    }

    public static String getMACAddress() {
        try {
            InetAddress localHost = InetAddress.getLocalHost();
            NetworkInterface networkInterface = NetworkInterface