日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

获取CPU、硬盘、主板序列号及MAC地址工具类

發布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取CPU、硬盘、主板序列号及MAC地址工具类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

獲取CPU、硬盤、主板序列號、MAC工具類

public class MachineSNUtils {/*** 獲取主板序列號** @return*/public static String getMotherboardSN() {String result = "";try {File file = File.createTempFile("realhowto", ".vbs");file.deleteOnExit();FileWriter fw = new FileWriter(file);String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"+ "Set colItems = objWMIService.ExecQuery _ \n"+ " (\"Select * from Win32_BaseBoard\") \n"+ "For Each objItem in colItems \n" + " Wscript.Echo objItem.SerialNumber \n"+ " exit for ' do the first cpu only! \n" + "Next \n";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();} catch (Exception e) {e.printStackTrace();}return result.trim();}/*** 獲取CPU序列號** @return*/public static String getCPUSerial() {String result = "";try {File file = File.createTempFile("tmp", ".vbs");file.deleteOnExit();FileWriter fw = new 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) {e.fillInStackTrace();}if (result.trim().length() < 1 || result == null) {result = "無CPU_ID被讀取";}return result.trim();}/*** 獲取localhost的LANAddress** @return*/private static List<String> getLocalHostLANAddress()throws UnknownHostException, SocketException {List<String> ips = new ArrayList<String>();Enumeration<NetworkInterface> interfs = NetworkInterface.getNetworkInterfaces();while (interfs.hasMoreElements()) {NetworkInterface interf = interfs.nextElement();Enumeration<InetAddress> addres = interf.getInetAddresses();while (addres.hasMoreElements()) {InetAddress in = addres.nextElement();if (in instanceof Inet4Address) { // System.out.println("v4:" + in.getHostAddress());if (!"127.0.0.1".equals(in.getHostAddress())) {//連接VPN后,根據產生的ip查詢MAC時,返回結果為null 因此獲取IP時不要VPN產生的IPif (!interf.getName().contains("ppp")){ips.add(in.getHostAddress());}}}}}return ips;}/*** MAC* 通過jdk自帶的方法,先獲取本機所有的ip,然后通過NetworkInterface獲取mac地址* 注意:連接VPN后,根據產生的ip查詢MAC時,返回結果為null,需特殊處理** @return*/public static String getMac() {try {String resultStr = "";List<String> ls = getLocalHostLANAddress();int num = 0;for (String str : ls) {InetAddress ia = InetAddress.getByName(str);// 獲取本地IP對象// 獲得網絡接口對象(即網卡),并得到mac地址,mac地址存在于一個byte數組中。byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();if (mac == null) {continue;}// 下面代碼是把mac地址拼裝成StringStringBuilder sb = new StringBuilder();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);}if (num == ls.size() - 1) {resultStr += sb.toString().toUpperCase();} else {// 把字符串所有小寫字母改為大寫成為正規的mac地址并返回resultStr += sb.toString().toUpperCase() + ",";}num++;}return resultStr;} catch (Exception ex) {ex.printStackTrace();}return null;}/*** 獲取硬盤序列號** @return*/public static String getHardDiskSN() {String line = "";String HdSerial = "";try {Process proces = Runtime.getRuntime().exec("cmd /c dir c:");BufferedReader buffreader = new BufferedReader(new InputStreamReader(proces.getInputStream(), "gbk"));while ((line = buffreader.readLine()) != null) {if (line.indexOf("卷的序列號是 ") != -1) { //讀取參數并獲取硬盤序列號HdSerial = line.substring(line.indexOf("卷的序列號是 ") + "卷的序列號是 ".length());break;}}} catch (IOException e) {e.printStackTrace();}return HdSerial;}/***************************linux*********************************/public static String executeLinuxCmd(String cmd) {try {System.out.println("got cmd job : " + cmd);Runtime run = Runtime.getRuntime();Process process;process = run.exec(cmd);InputStream in = process.getInputStream();BufferedReader bs = new BufferedReader(new InputStreamReader(in));StringBuffer out = new StringBuffer();byte[] b = new byte[8192];for (int n; (n = in.read(b)) != -1; ) {out.append(new String(b, 0, n));}in.close();process.destroy();return out.toString();} catch (Exception e) {e.printStackTrace();}return null;}/*** @param cmd 命令語句* @param record 要查看的字段* @param symbol 分隔符* @return*/public static String getSerialNumber(String cmd, String record, String symbol) {String execResult = executeLinuxCmd(cmd);String[] infos = execResult.split("\n");for (String info : infos) {info = info.trim();if (info.indexOf(record) != -1) {info.replace(" ", "");String[] sn = info.split(symbol);return sn[1];}}return null;}/*** @param cmd 命令語句* @param record 要查看的字段* @param symbol 分隔符* @return*/public static String getAllSerialNumber(String cmd, String record, String symbol) {String execResult = executeLinuxCmd(cmd);String[] infos = execResult.split("\n");StringBuilder result = new StringBuilder();int k = 0;for (int i = 0; i < infos.length - 1; i++) {String info = infos[i];info = info.trim();if (info.indexOf(record) != -1) {info.replace(" ", "");String[] sn = info.split(symbol);if (k != 0) {result.append(',');}result.append(sn[1]);k++;}}if (k != 0) {return result.toString();} else {return null;}}/*** 判斷是否為容器、虛擬機,返回虛擬ID** @return*/public static String getVirtualID() {String execResult = executeLinuxCmd("systemd-detect-virt");if (!execResult.contains("none")) {//docker容器String VirtualID = getSerialNumber("cat /proc/1/cgroup", "docker", "docker/");if (VirtualID != null) {return VirtualID;}//machine-rktVirtualID = getSerialNumber("cat /proc/1/cgroup", "machine-rkt", "machine-rkt\\");if (VirtualID != null) {VirtualID.replaceAll("\\x2d", "-");return VirtualID;}//vmwareVirtualID = getSerialNumber("dmidecode -t system", "UUID", ":");if (VirtualID != null) {return VirtualID;}return "UNKNOWN";}return null;}/*** 獲取CPUID、硬盤序列號、MAC地址、主板序列號** @return*/public static Map<String, String> getAllSn() {String os = System.getProperty("os.name");os = os.toUpperCase();System.out.println("OS Name : " + os);Map<String, String> snVo = new HashMap<String, String>();if ("LINUX".equals(os)) {snVo.put("operating system", "LINUX");String virtualID = getVirtualID();if (virtualID != null) {if (virtualID.equals("UNKNOWN")) {System.out.println("UNKNOWN VMWARE!");return snVo;} else {System.out.println("virtualID : " + virtualID);snVo.put("virtualID", virtualID.toUpperCase().replace(" ", ""));String mac = getAllSerialNumber("ifconfig -a", "ether", " ");System.out.println("mac : " + mac);snVo.put("mac", mac.toUpperCase().replace(" ", ""));}} else {String cpuid = getSerialNumber("dmidecode -t processor | grep 'ID'", "ID", ":");System.out.println("cpuid : " + cpuid);String mainboardNumber =getSerialNumber("dmidecode |grep 'Serial Number'", "Serial Number", ":");System.out.println("mainboardNumber : " + mainboardNumber);String mac = getAllSerialNumber("ifconfig -a", "ether", " ");System.out.println("mac : " + mac);snVo.put("cpuid", cpuid.toUpperCase().replace(" ", ""));snVo.put("mac", mac.toUpperCase().replace(" ", ""));snVo.put("mainboard", mainboardNumber.toUpperCase().replace(" ", ""));}} else {snVo.put("operating system", "windows");String cpuid = getCPUSerial();String mainboard = getMotherboardSN();String disk = getHardDiskSN();String mac = getMac();System.out.println("CPU_SN : " + cpuid);System.out.println("MAINBOARD_SN : " + mainboard);System.out.println("CDISK_SN : " + disk);System.out.println("MAC_SN : " + mac);snVo.put("cpuid", cpuid.toUpperCase().replace(" ", ""));snVo.put("cdiskid", disk.toUpperCase().replace(" ", ""));snVo.put("mac", mac.toUpperCase().replace(" ", ""));snVo.put("mainboard", mainboard.toUpperCase().replace(" ", ""));}return snVo;}public static void main(String[] args) {getAllSn();} }

參考文章地址:https://blog.csdn.net/linhaibing009/article/details/102524648

本文章修改了原帖中getLocalHostLANAddress()方法,增加對VPN連接的處理。由于連接VPN后,根據產生的ip查詢MAC時,返回結果為null,做了特殊處理,即獲取本機IP時,過濾掉VPN產生的IP。

總結

以上是生活随笔為你收集整理的获取CPU、硬盘、主板序列号及MAC地址工具类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。