zoukankan      html  css  js  c++  java
  • 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")
    "
                        + "Set colItems = objWMIService.ExecQuery _ 
    "
                        + "   ("Select * from Win32_BaseBoard") 
    "
                        + "For Each objItem in colItems 
    "
                        + "    Wscript.Echo objItem.SerialNumber 
    "
                        + "    exit for  ' do the first cpu only! 
    " + "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();
            } 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")
    "
                        + "Set colItems = objWMIService.ExecQuery _ 
    "
                        + "   ("Select * from Win32_Processor") 
    "
                        + "For Each objItem in colItems 
    "
                        + "    Wscript.Echo objItem.ProcessorId 
    "
                        + "    exit for  ' do the first cpu only! 
    " + "Next 
    ";
    
                // + "    exit for  
    " + "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);
        }
    
    }
  • 相关阅读:
    线性表的实现用通用方法实现线性表的初始化、求表长、插入元素、删除元素等
    用c++定义两个坐标点,计算两点间距离;进而计算线段的面积
    Java:学生信息的录入,各种排序,对文件的操作
    数组1 2 3 4 5 6 1(输入-1结束),奇数位的数逆序,偶数位数不变
    按层次遍历二叉树,用队列作为缓冲
    Chapter09"内核模式下的线程同步"之事件内核对象
    Chapter10“I/O设备的同步和异步”之打开和关闭设备
    CSDN博客积分系统
    探秘Java垃圾回收机制
    Chapter09“内核模式下的线程同步”之可等待的计时器内核对象
  • 原文地址:https://www.cnblogs.com/kdy11/p/8243649.html
Copyright © 2011-2022 走看看