午后星期午

          通過java獲取mac地址

          package  cc.wshao.util;

          import  java.io.BufferedReader;
          import  java.io.InputStreamReader;
          import  java.util.regex.Matcher;
          import  java.util.regex.Pattern;

          public   class  GetMacAddress {
               
               
          public   static  String callCmd(String[] cmd) {  
                   String result 
          =   "" ;  
                   String line 
          =   "" ;  
                   
          try  {  
                       Process proc 
          =  Runtime.getRuntime().exec(cmd);  
                       InputStreamReader is 
          =   new  InputStreamReader(proc.getInputStream());  
                       BufferedReader br 
          =   new  BufferedReader (is);  
                       
          while  ((line  =  br.readLine ())  !=   null ) {  
                       result 
          +=  line;  
                       }  
                   }  
                   
          catch (Exception e) {  
                       e.printStackTrace();  
                   }  
                   
          return  result;  
               }
               
               
               
               
               
          /**  
                * 
                * 
          @param  cmd  第一個命令 
                * 
          @param  another 第二個命令 
                * 
          @return    第二個命令的執行結果 
                
          */   
               
          public   static  String callCmd(String[] cmd,String[] another) {  
                   String result 
          =   "" ;  
                   String line 
          =   "" ;  
                   
          try  {  
                       Runtime rt 
          =  Runtime.getRuntime();  
                       Process proc 
          =  rt.exec(cmd);  
                       proc.waitFor();  
          // 已經執行完第一個命令,準備執行第二個命令  
                       proc  =  rt.exec(another);  
                       InputStreamReader is 
          =   new  InputStreamReader(proc.getInputStream());  
                       BufferedReader br 
          =   new  BufferedReader (is);  
                       
          while  ((line  =  br.readLine ())  !=   null ) {  
                           result 
          +=  line;  
                       }  
                   }  
                   
          catch (Exception e) {  
                       e.printStackTrace();  
                   }  
                   
          return  result;  
               }
               
               
               
               
          /**  
                * 
                * 
          @param  ip  目標ip,一般在局域網內 
                * 
          @param  sourceString 命令處理的結果字符串 
                * 
          @param  macSeparator mac分隔符號 
                * 
          @return   mac地址,用上面的分隔符號表示 
                
          */   
               
          public   static  String filterMacAddress( final  String ip,  final  String sourceString, final  String macSeparator) {  
                   String result 
          =   "" ;  
                   String regExp 
          =   " ((([0-9,A-F,a-f]{1,2} "   +  macSeparator  +   " ){1,5})[0-9,A-F,a-f]{1,2}) " ;  
                   Pattern pattern 
          =  Pattern.compile(regExp);  
                   Matcher matcher 
          =  pattern.matcher(sourceString);  
                   
          while (matcher.find()){  
                       result 
          =  matcher.group( 1 );  
                       
          if (sourceString.indexOf(ip)  <=  sourceString.lastIndexOf(matcher.group( 1 ))) {  
                           
          break ;   // 如果有多個IP,只匹配本IP對應的Mac.  
                       }  
                   }
             
                   
          return  result;  
               }
               
               
               
               
          /**  
                * 
                * 
          @param  ip 目標ip 
                * 
          @return    Mac Address 
                * 
                
          */   
               
          public   static  String getMacInWindows( final  String ip){  
                   String result 
          =   "" ;  
                   String[] cmd 
          =  {  
                           
          " cmd " ,  
                           
          " /c " ,  
                           
          " ping  "   +   ip  
                           };  
                   String[] another 
          =  {  
                           
          " cmd " ,  
                           
          " /c " ,  
                           
          " arp -a "   
                           };  
             
                   String cmdResult 
          =  callCmd(cmd,another);  
                   result 
          =  filterMacAddress(ip,cmdResult, " - " );  
             
                   
          return  result;  
               }  
             
             
               
          /**  
               * 
               * 
          @param  ip 目標ip 
               * 
          @return    Mac Address 
               * 
               
          */   
               
          public   static  String getMacInLinux( final  String ip){  
                   String result 
          =   "" ;  
                   String[] cmd 
          =  {  
                           
          " /bin/sh " ,  
                           
          " -c " ,  
                           
          " ping  "   +   ip  +   "  -c 2 && arp -a "   
                           };  
                   String cmdResult 
          =  callCmd(cmd);  
                   result 
          =  filterMacAddress(ip,cmdResult, " : " );  
             
                   
          return  result;  
               }  
               
               
          /**
                * 獲取MAC地址 
                * 
          @return  返回MAC地址
                
          */
               
          public   static  String getMacAddress(String ip){
                   String macAddress 
          =   "" ;
                   macAddress 
          =  getMacInWindows(ip).trim();
                   
          if (macAddress == null || "" .equals(macAddress)){
                       macAddress 
          =  getMacInLinux(ip).trim();
                   }
                   
          return  macAddress;
               }
             
               
          /**  
               * 測試 
               
          */   
               
          public   static   void  main(String[] args) {           
                   System.out.println(getMacAddress(
          " 192.168.10.203 " ));
               }
               

          }

          posted on 2013-12-31 13:58 午后星期午 閱讀(127) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 江孜县| 屯门区| 合川市| 平阳县| 泰和县| 固安县| 昭觉县| 会昌县| 三亚市| 孟州市| 清徐县| 三河市| 运城市| 襄垣县| 太谷县| 承德市| 都兰县| 连平县| 崇左市| 宜城市| 德化县| 嫩江县| 宁夏| 酉阳| 安乡县| 抚远县| 东兴市| 五家渠市| 滕州市| 宜君县| 南通市| 安阳市| 古蔺县| 博客| 金坛市| 和龙市| 鄄城县| 习水县| 贵州省| 曲水县| 堆龙德庆县|