获取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; } } }
原文地址:https://www.cnblogs.com/yanan7890/p/9434205.html
时间: 2024-11-05 19:37:51