Java获取主板序列号、MAC地址、CPU序列号工具类
import java.io.File; import java.io.FileWriter; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import com.tjhq.hqoa.utils.Log4jUtil; import com.tjhq.hqoa.utils.StringUtil; //取主板序列号 public class MainBordUtil { /** * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等. */ public static String getOSName() { return System.getProperty("os.name").toLowerCase(); } public static String getMainBordId_windows() { String result = ""; try { File file = File.createTempFile("realhowto", ".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_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(); Process p = Runtime.getRuntime().exec( "cscript //NoLogo " + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader( p.getInputStream())); String line; while ((line = input.readLine()) != null) { result += line; } input.close(); } catch (Exception e) { Log4jUtil.error("获取主板信息错误",e); } return result.trim(); } public static String getMainBordId_linux() { String result = ""; String maniBord_cmd = "dmidecode | grep 'Serial Number' | awk '{print $3}' | tail -1"; Process p; try { p = Runtime.getRuntime().exec( new String[] { "sh", "-c", maniBord_cmd });// 管道 BufferedReader br = new BufferedReader(new InputStreamReader( p.getInputStream())); String line; while ((line = br.readLine()) != null) { result += line; break; } br.close(); } catch (IOException e) { Log4jUtil.error("获取主板信息错误",e); } return result; } public static String getMainBordId() throws Exception { String os = getOSName(); String mainBordId = ""; if (os.startsWith("windows")) { mainBordId = getMainBordId_windows(); } else if (os.startsWith("linux")) { mainBordId = getMainBordId_linux(); } if(!StringUtil.isNotNullOrBlank(mainBordId)){ mainBordId="null"; } return mainBordId; } public static void main(String[] args) throws Exception { String mainBord = getMainBordId(); System.out.println(mainBord); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import com.tjhq.hqoa.utils.Log4jUtil; import com.tjhq.hqoa.utils.StringUtil; /** * 与系统相关的一些常用工具方法. * * @version 1.0.0 */ public class MACUtil { /** * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等. */ public static String getOSName() { return System.getProperty("os.name").toLowerCase(); } /** * 获取unix网卡的mac地址. 非windows的系统默认调用本方法获取. 如果有特殊系统请继续扩充新的取mac地址方法. * * @return mac地址 */ public static String getMAC_linux() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { // linux下的命令,一般取eth0作为本地主网卡 process = Runtime.getRuntime().exec("ifconfig eth0"); // 显示信息中包含有mac地址信息 bufferedReader = new BufferedReader(new InputStreamReader( process.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { // 寻找标示字符串[hwaddr] index = line.toLowerCase().indexOf("hwaddr"); if (index >= 0) {// 找到了 // 取出mac地址并去除2边空格 mac = line.substring(index + "hwaddr".length() + 1).trim(); break; } } } catch (IOException e) { Log4jUtil.error("获取mac信息错误",e); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException e1) { Log4jUtil.error("获取mac信息错误",e1); } bufferedReader = null; process = null; } return mac; } /** * 获取widnows网卡的mac地址. * * @return mac地址 */ public static String getMAC_windows() { InetAddress ip = null; NetworkInterface ni = null; List<String> macList = new ArrayList<String>(); try { Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface .getNetworkInterfaces(); while (netInterfaces.hasMoreElements()) { ni = (NetworkInterface) netInterfaces.nextElement(); // ----------特定情况,可以考虑用ni.getName判断 // 遍历所有ip Enumeration<InetAddress> ips = ni.getInetAddresses(); while (ips.hasMoreElements()) { ip = (InetAddress) ips.nextElement(); if (!ip.isLoopbackAddress() // 非127.0.0.1 && ip.getHostAddress().matches( "(\\d{1,3}\\.){3}\\d{1,3}")) { macList.add(getMacFromBytes(ni.getHardwareAddress())); } } } } catch (Exception e) { Log4jUtil.error("获取mac错误", e); } if (macList.size() > 0) { return macList.get(0); } else { return ""; } } private static String getMacFromBytes(byte[] bytes) { StringBuffer mac = new StringBuffer(); byte currentByte; boolean first = false; for (byte b : bytes) { if (first) { mac.append("-"); } currentByte = (byte) ((b & 240) >> 4); mac.append(Integer.toHexString(currentByte)); currentByte = (byte) (b & 15); mac.append(Integer.toHexString(currentByte)); first = true; } return mac.toString().toUpperCase(); } public static String getMAC() throws Exception { String os = getOSName(); String mac = ""; if (os.startsWith("windows")) { mac = getMAC_windows(); } else if (os.startsWith("linux")) { mac = getMAC_linux(); } if(!StringUtil.isNotNullOrBlank(mac)){ mac="null"; } return mac; } /** * 测试用的main方法. * * @param argc * 运行参数. * @throws Exception */ public static void main(String[] argc) throws Exception { String mac = getMAC(); System.out.println(mac); } }
import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import com.tjhq.hqoa.utils.Log4jUtil; import com.tjhq.hqoa.utils.StringUtil; public class CPUUtil { /** * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等. */ public static String getOSName() { return System.getProperty("os.name").toLowerCase(); } /** * 获取CPU序列号 * * @return */ public static String getCPUID_Windows() { 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(); Process p = Runtime.getRuntime().exec( "cscript //NoLogo " + file.getPath()); BufferedReader input = new BufferedReader(new InputStreamReader( p.getInputStream())); String line; while ((line = input.readLine()) != null) { result += line; } input.close(); file.delete(); } catch (Exception e) { Log4jUtil.error("获取cpu信息错误",e); } return result.trim(); } public static String getCPUID_linux() throws InterruptedException { String result = ""; String CPU_ID_CMD = "dmidecode"; BufferedReader bufferedReader = null; Process p = null; try { p = Runtime.getRuntime().exec(new String[]{ "sh", "-c", CPU_ID_CMD });// 管道 bufferedReader = new BufferedReader(new InputStreamReader( p.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { // 寻找标示字符串[hwaddr] index = line.toLowerCase().indexOf("uuid"); if (index >= 0) {// 找到了 // 取出mac地址并去除2边空格 result = line.substring(index + "uuid".length() + 1).trim(); break; } } } catch (IOException e) { Log4jUtil.error("获取cpu信息错误",e); } return result.trim(); } public static String getCPUId() throws InterruptedException { String os = getOSName(); String cpuId = ""; if (os.startsWith("windows")) { cpuId = CPUUtil.getCPUID_Windows(); } else if (os.startsWith("linux")) { cpuId = CPUUtil.getCPUID_linux(); } if(!StringUtil.isNotNullOrBlank(cpuId)){ cpuId="null"; } return cpuId; } public static void main(String[] args) throws Exception { String os = getOSName(); System.out.println(os); String cpuid = getCPUId(); System.out.println(cpuid); } }