Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks
package  com.juziku.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 " ));
     }
     

}
通过java获取mac地址,下面是完整的代码:
posted on 2011-06-02 23:52 礼物 阅读(3479) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。

网站导航: