需要對對應的MAC地址進行驗證的方法,以為很簡單就能過,鼓搗了半天以后才發現,我的機器是window7,查詢出來是亂碼,居然不給支持。沒辦法在網上繼續找資料。終于找到了,貼上來,以備不時之需。?
東西都有注釋,自己看吧,?
找了很多都是只支持window和linux的。windows7 因為是中文,不能用同一個方法獲取。只能另想辦法了
東西都有注釋,自己看吧,?
- import?java.io.BufferedReader;??
- import?java.io.IOException;??
- import?java.io.InputStreamReader;??
- import?java.net.InetAddress;??
- import?java.net.NetworkInterface;??
- ??
- /**?
- ?*?與系統相關的一些常用工具方法.?
- ?*??
- ?*?@author?lvbogun?
- ?*?@version?1.0.0?
- ?*/??
- public?class?SystemTool?{??
- ??
- ????/**?
- ?????*?獲取當前操作系統名稱.?return?操作系統名稱?例如:windows?xp,linux?等.?
- ?????*/??
- ????public?static?String?getOSName()?{??
- ????????return?System.getProperty("os.name").toLowerCase();??
- ????}??
- ??
- ????/**?
- ?????*?獲取unix網卡的mac地址.?非windows的系統默認調用本方法獲取.?
- ?????*?如果有特殊系統請繼續擴充新的取mac地址方法.?
- ?????*??
- ?????*?@return?mac地址?
- ?????*/??
- ????public?static?String?getUnixMACAddress()?{??
- ????????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)?{??
- ????????????e.printStackTrace();??
- ????????}?finally?{??
- ????????????try?{??
- ????????????????if?(bufferedReader?!=?null)?{??
- ????????????????????bufferedReader.close();??
- ????????????????}??
- ????????????}?catch?(IOException?e1)?{??
- ????????????????e1.printStackTrace();??
- ????????????}??
- ????????????bufferedReader?=?null;??
- ????????????process?=?null;??
- ????????}??
- ????????return?mac;??
- ????}??
- ??
- ????/**?
- ?????*?獲取widnows網卡的mac地址.?
- ?????*??
- ?????*?@return?mac地址?
- ?????*/??
- ????public?static?String?getWindowsMACAddress()?{??
- ????????String?mac?=?null;??
- ????????BufferedReader?bufferedReader?=?null;??
- ????????Process?process?=?null;??
- ????????try?{??
- ????????????//?windows下的命令,顯示信息中包含有mac地址信息??
- ????????????process?=?Runtime.getRuntime().exec("ipconfig?/all");??
- ????????????bufferedReader?=?new?BufferedReader(new?InputStreamReader(??
- ????????????????????process.getInputStream()));??
- ????????????String?line?=?null;??
- ????????????int?index?=?-1;??
- ????????????while?((line?=?bufferedReader.readLine())?!=?null)?{??
- ????????????????System.out.println(line);??
- ????????????????//?尋找標示字符串[physical??
- ????????????????index?=?line.toLowerCase().indexOf("physical?address");??
- ??????????????????
- ????????????????if?(index?>=?0)?{//?找到了??
- ????????????????????index?=?line.indexOf(":");//?尋找":"的位置??
- ????????????????????if?(index?>=?0)?{??
- ????????????????????????System.out.println(mac);??
- ????????????????????????//?取出mac地址并去除2邊空格??
- ????????????????????????mac?=?line.substring(index?+?1).trim();??
- ????????????????????}??
- ????????????????????break;??
- ????????????????}??
- ????????????}??
- ????????}?catch?(IOException?e)?{??
- ????????????e.printStackTrace();??
- ????????}?finally?{??
- ????????????try?{??
- ????????????????if?(bufferedReader?!=?null)?{??
- ????????????????????bufferedReader.close();??
- ????????????????}??
- ????????????}?catch?(IOException?e1)?{??
- ????????????????e1.printStackTrace();??
- ????????????}??
- ????????????bufferedReader?=?null;??
- ????????????process?=?null;??
- ????????}??
- ??
- ????????return?mac;??
- ????}??
- ??
- ????/**?
- ?????*?windows?7?專用?獲取MAC地址?
- ?????*??
- ?????*?@return?
- ?????*?@throws?Exception?
- ?????*/??
- ????public?static?String?getMACAddress()?throws?Exception?{??
- ??????????
- ????????//?獲取本地IP對象??
- ????????InetAddress?ia?=?InetAddress.getLocalHost();??
- ????????//?獲得網絡接口對象(即網卡),并得到mac地址,mac地址存在于一個byte數組中。??
- ????????byte[]?mac?=?NetworkInterface.getByInetAddress(ia).getHardwareAddress();??
- ??
- ????????//?下面代碼是把mac地址拼裝成String??
- ????????StringBuffer?sb?=?new?StringBuffer();??
- ??
- ????????for?(int?i?=?0;?i?<?mac.length;?i++)?{??
- ????????????if?(i?!=?0)?{??
- ????????????????sb.append("-");??
- ????????????}??
- ????????????//?mac[i]?&?0xFF?是為了把byte轉化為正整數??
- ????????????String?s?=?Integer.toHexString(mac[i]?&?0xFF);??
- ????????????sb.append(s.length()?==?1???0?+?s?:?s);??
- ????????}??
- ??
- ????????//?把字符串所有小寫字母改為大寫成為正規的mac地址并返回??
- ????????return?sb.toString().toUpperCase();??
- ????}??
- ??
- ????/**?
- ?????*?測試用的main方法.?
- ?????*??
- ?????*?@param?argc?運行參數.?
- ?????*?@throws?Exception?
- ?????*/??
- ????public?static?void?main(String[]?argc)?throws?Exception?{??
- ????????String?os?=?getOSName();??
- ????????System.out.println(os);??
- ????????if?(os.equals("windows?7"))?{??
- ????????????String?mac?=?getMACAddress();??
- ????????????System.out.println(mac);??
- ????????}?else?if?(os.startsWith("windows"))?{??
- ????????????//?本地是windows??
- ????????????String?mac?=?getWindowsMACAddress();??
- ????????????System.out.println(mac);??
- ????????}?else?{??
- ????????????//?本地是非windows系統?一般就是unix??
- ????????????String?mac?=?getUnixMACAddress();??
- ????????????System.out.println(mac);??
- ????????}??
- ????}??
- }??
找了很多都是只支持window和linux的。windows7 因為是中文,不能用同一個方法獲取。只能另想辦法了