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); } }
