java獲取mac地址-屏蔽ip封mac地址 – 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地址 www.aiwalls.com
* @author 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; 
     } 
        
     /**
     *
     * @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"));
     }
   
}

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

摘自 玩轉java

發佈留言