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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM