• java获取操作系统的MAC地址和硬盘序列号


    1.判断操作系统是Windows还是Linux

    1     private static Boolean isLinux() {
    2         String os = System.getProperty("os.name");
    3         log.info("os.name: {}", os);
    4         return !os.toLowerCase().startsWith("win");
    5     }

    2. Linux:

      获取MAC地址:

     1     private static String getMACAddressByLinux() throws Exception {
     2         String[] cmd = {"ifconfig"};
     3 
     4         Process process = Runtime.getRuntime().exec(cmd);
     5         process.waitFor();
     6 
     7         BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
     8         StringBuffer sb = new StringBuffer();
     9         String line;
    10         while ((line = br.readLine()) != null) {
    11             sb.append(line);
    12         }
    13 
    14         String str1 = sb.toString();
    15         String str2 = str1.split("ether")[1].trim();
    16         String result = str2.split("txqueuelen")[0].trim();
    17         log.info("Linux MacAddress is: {}", result);
    18         br.close();
    19 
    20         return result;
    21     }

      获取硬盘序列号:

     1     private static String getIdentifierByLinux() throws Exception {
     2         String[] cmd = {"fdisk", "-l"};
     3 
     4         Process process = Runtime.getRuntime().exec(cmd);
     5         process.waitFor();
     6 
     7         BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
     8         StringBuffer sb = new StringBuffer();
     9         String line;
    10         while ((line = br.readLine()) != null) {
    11             sb.append(line);
    12         }
    13 
    14         String str1 = sb.toString();
    15         String str2 = str1.split("identifier:")[1].trim();
    16         String result = str2.split("Device Boot")[0].trim();
    17         log.info("Linux Identifier is: {}", result);
    18         br.close();
    19 
    20         return result;
    21     }

    3. Windows:

      获取MAC地址: (默认获取第一张网卡)

     1     private static String getMACAddressByWindows() throws Exception {
     2         String result = "";
     3         Process process = Runtime.getRuntime().exec("ipconfig /all");
     4         BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
     5 
     6         String line;
     7         int index = -1;
     8         while ((line = br.readLine()) != null) {
     9             index = line.toLowerCase().indexOf("物理地址");
    10             if (index >= 0) {// 找到了
    11                 index = line.indexOf(":");
    12                 if (index >= 0) {
    13                     result = line.substring(index + 1).trim();
    14                 }
    15                 break;
    16             }
    17         }
    18         log.info("Windows MACAddress is: {}", result);
    19         br.close();
    20         return result;
    21     }

      获取硬盘序列号: (默认获取C盘)

     1     private static String getIdentifierByWindows() throws Exception {
     2         String result = "";
     3         Process process = Runtime.getRuntime().exec("cmd /c dir C:");
     4         BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
     5 
     6         String line;
     7         while ((line = br.readLine()) != null) {
     8             if (line.indexOf("卷的序列号是 ") != -1) {
     9                 result = line.substring(line.indexOf("卷的序列号是 ") + "卷的序列号是 ".length(), line.length());
    10                 break;
    11             }
    12         }
    13         log.info("Windows Identifier is: {}", result);
    14         br.close();
    15         return result;
    16     }

    4. 测试:

     1     public static void main(String[] a) throws Exception {
     2         // 判断是Linux还是Windows
     3         if (isLinux()) {
     4             // Linux操作系统
     5             String macAddress = getMACAddressByLinux();
     6             System.out.println("Linux macAddress: " + macAddress);
     7             String Identifier = getIdentifierByLinux();
     8             System.out.println("Linux Identifier: " + Identifier);
     9         } else {
    10             // Windows操作系统
    11             String macAddress = getMACAddressByWindows();
    12             System.out.println("Windows macAddress: " + macAddress);
    13             String Identifier = getIdentifierByWindows();
    14             System.out.println("Windows Identifier: " + Identifier);
    15         }
    16     }

     注意事项:

      在Windows环境使用javac Test.java 命令编译该java文件时, 需指定编码, 应使用以下命令:

    1 javac -encoding UTF-8 Test.java
  • 相关阅读:
    高并发系统设计思考笔记
    面试突击74:properties和yml有什么区别?
    面试突击86:SpringBoot 事务不回滚?怎么解决?
    面试突击82:SpringBoot 中如何操作事务?
    面试突击75:SpringBoot 有几种读取配置文件的方法?
    面试突击81:什么是跨域问题?如何解决?
    面试突击73:IoC 和 DI 有什么区别?
    面试突击85:为什么事务@Transactional会失效?
    一文快速上手 Nacos 注册中心+配置中心!
    面试突击72:输入URL之后会执行什么流程?
  • 原文地址:https://www.cnblogs.com/yanwu0527/p/8990176.html
Copyright © 2020-2023  润新知