java獲取電腦部分信息


獲取mac地址與cpu序列號

參考博客:https://www.jb51.net/article/94793.htm

另一篇參考地址沒記錄下來

package util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @todo 獲取電腦配置信息
 * @author zhangyanan
 * @date 2018年8月6日
 */
public class CpuUtil {
    private static final Logger logger = LoggerFactory.getLogger(CpuUtil.class);/**
     * @todo 獲取電腦cpu序列號
     * @author zhangyanan
     * @date 2018年8月6日
     */
    public static String getCPUSerial() {
        String os = System.getProperty("os.name");
        if (os.toLowerCase().startsWith("win")) {
            return CpuUtil.getWindowsCPUSerial();
        } else {
            return CpuUtil.getLinuxCPUSerial();
        }

    }

    /**
     * @todo windows獲取cpu序列號
     * @author zhangyanan
     * @date 2018年8月6日
     */
    public static String getWindowsCPUSerial() {
        String serial = null;
        try {
            Process process = Runtime.getRuntime().exec(new String[] { "wmic", "cpu", "get", "ProcessorId" });
            process.getOutputStream().close();
            Scanner sc = new Scanner(process.getInputStream());
            sc.next();
            serial = sc.next();
            sc.close();
        } catch (Exception e) {
            logger.error("getWindowsCPUSerial異常", e);
        }
        return serial;
    }

    /**
     * @todo linux獲取cpu序列號
     * @author zhangyanan
     * @date 2018年8月6日
     */
    public static String getLinuxCPUSerial() {
        String result = "";
        try {
            File file = File.createTempFile("tmp", ".vbs");
            file.deleteOnExit();
            FileWriter fw = new java.io.FileWriter(file);
            String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
                    + "Set colItems = objWMIService.ExecQuery _ \n" + "   (\"Select * from Win32_Processor\") \n"
                    + "For Each objItem in colItems \n" + "    Wscript.Echo objItem.ProcessorId \n"
                    + "    exit for  ' do the first cpu only! \n" + "Next \n";

            // + " exit for \r\n" + "Next";
            fw.write(vbs);
            fw.close();
            String path = file.getPath().replace("%20", " ");
            Process p = Runtime.getRuntime().exec("cscript //NoLogo " + path);
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line;
            while ((line = input.readLine()) != null) {
                result += line;
            }
            input.close();
            file.delete();
        } catch (Exception e) {
            logger.error("getLinuxCPUSerial異常", e);
        }

        return result;
    }

    /**
     * @todo 獲取mac地址
     * @author zhangyanan
     * @date 2018年8月6日
     */
    public static String getMACAddress() {
        InetAddress ia;
        try {
            ia = InetAddress.getLocalHost();
            return getMACAddress(ia);
        } catch (UnknownHostException e) {
            logger.error("getMACAddress()異常", e);
            return null;
        }

    }

    /**
     * @todo 獲取mac地址
     * @author zhangyanan
     * @date 2018年8月6日
     */
    public static String getMACAddress(InetAddress ia) {
        // 獲得網絡接口對象(即網卡),並得到mac地址,mac地址存在於一個byte數組中。
        try {
            byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

            // 下面代碼是把mac地址拼裝成String
            StringBuffer sb = new StringBuffer();

            for (int i = 0; i < mac.length; i++) {
                if (i != 0) {
                    sb.append("-");
                }
                // mac[i] & 0xFF 是為了把byte轉化為正整數
                String s = Integer.toHexString(mac[i] & 0xFF);
                sb.append(s.length() == 1 ? 0 + s : s);
            }

            // 把字符串所有小寫字母改為大寫成為正規的mac地址並返回
            return sb.toString().toUpperCase();
        } catch (SocketException e) {
            logger.error("getMACAddress異常!", e);
            return null;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM