java獲取機器碼簡單實現(xiàn)demo
更新時間:2023年11月21日 10:45:44 作者:初窺門徑
這篇文章主要為大家介紹了java獲取機器碼的簡單實現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
java獲取機器碼
import cn.hutool.crypto.digest.DigestUtil; import com.alibaba.fastjson.JSON; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.Scanner; /** * @author shanjunpeng * @date 2023/9/27 */ public class MachineCodeUtils { public static final String WINDOWS = "Windows"; public static final String LINUX = "Linux"; /** * 獲取機器碼 */ public static String getMachineCode() { return getMachineCode(getOS()); } /** * 獲取操作系統(tǒng) * @return */ public static String getOS() { String os = System.getProperty("os.name").toLowerCase(); if (os.contains("win")) { return WINDOWS; } else if (os.contains("nix") || os.contains("nux") || os.contains("aix")) { return LINUX; } else if (os.contains("mac")) { return "Mac OS"; } else if (os.contains("sunos")) { return "Solaris"; } else { return "Unknown"; } } public static String getMachineCode(String type) { if (Objects.isNull(type)) { return ""; } Map<String, Object> codeMap = new HashMap<>(2); String result = ""; if (LINUX.equals(type)) { String boisVersion = getBoisVersion(); codeMap.put("boisVersion", boisVersion); System.out.println("boisVersion:" + boisVersion); String uuid = getUUID(); codeMap.put("uuid", uuid); System.out.println("uuid:" + uuid); } else if (WINDOWS.equals(type)) { String processorId = getCPUSerialNumber(); codeMap.put("ProcessorId", processorId); System.out.println("ProcessorId:" + processorId); String serialNumber = getHardDiskSerialNumber(); codeMap.put("SerialNumber", serialNumber); System.out.println("SerialNumber:" + serialNumber); }else{ return ""; } String codeMapStr = JSON.toJSONString(codeMap); String serials = DigestUtil.md5Hex(codeMapStr); result = getSplitString(serials, "-", 4); return result.toUpperCase(); } public static String getSplitString(String str, String joiner, int number) { StringBuilder sb = new StringBuilder(); int len = str.length(); for (int i = 0; i < len; i += number) { if (i + number <= len) { sb.append(str, i, i + number); } else { sb.append(str.substring(i)); } if (i + number < len) { sb.append(joiner); } } return sb.toString(); } /** * 獲取CPU序列號 * * @return * @throws IOException */ public static String getCPUSerialNumber() { String next; try { Process process = Runtime.getRuntime().exec(new String[]{"wmic", "cpu", "get", "ProcessorId"}); process.getOutputStream().close(); Scanner sc = new Scanner(process.getInputStream()); String serial = sc.next(); next = sc.next(); } catch (IOException e) { throw new RuntimeException("獲取CPU序列號失敗"); } return next; } /** * 獲取 硬盤序列號(Windows) * * @return * @throws IOException * @throws InterruptedException */ public static String getHardDiskSerialNumber() { try { Process process = Runtime.getRuntime().exec(new String[]{"wmic", "path", "win32_physicalmedia", "get", "serialnumber"}); process.getOutputStream().close(); Scanner sc = new Scanner(process.getInputStream()); String serial = sc.next(); return sc.next(); } catch (IOException e) { throw new RuntimeException("獲取硬盤序列號失敗"); } } /** * 獲取系統(tǒng)序列號(linux) * * @return */ public static String getUUID() { String result = ""; try { Process process = Runtime.getRuntime().exec("sudo dmidecode -s system-uuid"); InputStream in; BufferedReader br; in = process.getInputStream(); br = new BufferedReader(new InputStreamReader(in)); while (in.read() != -1) { result = br.readLine(); } br.close(); in.close(); process.destroy(); System.out.println("獲取序列號:" + result); } catch (Throwable e) { e.printStackTrace(); } return result; } /** * bois版本號(linux) * * @return */ public static String getBoisVersion() { String result = ""; Process p; try { // 管道 p = Runtime.getRuntime().exec("sudo dmidecode -s bios-version"); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { result += line; break; } br.close(); } catch (IOException e) { System.out.println("獲取主板信息錯誤"); } return result; } }
以上就是java獲取機器碼實現(xiàn)demo的詳細內容,更多關于java獲取機器碼的資料請關注腳本之家其它相關文章!
相關文章
MySQL查詢字段實現(xiàn)字符串分割split功能的示例代碼
本文主要介紹了MySQL查詢字段實現(xiàn)字符串分割split功能的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01Java中網(wǎng)絡IO的實現(xiàn)方式(BIO、NIO、AIO)介紹
這篇文章主要介紹了Java中網(wǎng)絡IO的實現(xiàn)方式(BIO、NIO、AIO)介紹的相關資料,需要的朋友可以參考下2017-03-03Java中的SimpleDateFormat的線程安全問題詳解
這篇文章主要介紹了Java中的SimpleDateFormat的線程安全問題詳解,sonar 是一個代碼質量管理工具,SonarQube是一個用于代碼質量管理的開放平臺,為項目提供可視化報告, 連續(xù)追蹤項目質量演化過程,需要的朋友可以參考下2024-01-01SpringBoot HttpMessageConverter消息轉換器的使用詳解
在整個數(shù)據(jù)流轉過程中,前端的請求報文轉化為Java對象,Java對象轉化為響應報文,這里就用到了消息轉換器HttpMessageConverter2022-06-06