java獲取mac地址-屏蔽ip封mac地址

fmms 12年前發布 | 55K 次閱讀 Java開發 Java

java通過ip獲取mac地址-封ip封mac地址

package com.yjf.test;

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

/**

  • 獲取MAC地址
  • @author sunlightcs
  • 2011-4-29
  • http://hi.juziku.com/sunlightcs/ */ 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;  
 }  
  來源博客:http://yijianfengvip.blog.163.com/blog/static/175273432201212295830661/

 /**
 *
 * @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("220.181.111.148"));
 }

}</pre>

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!