飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

根据ip获取mac地址(亲测可用,获取速度慢,需要用异步来保存)

时间:2021-12-02  作者:匿名  
package 域名域名.util;

import 域名eredReader;
import 域名tStreamReader;
import 域名域名her;
import 域名域名ern;

/**
* 获取MAC地址
* @author
* 2011-12
*/
public class GetMacAddress {
   public static String callCmd(String[] cmd) { 
     String result = ""; 
     String line = ""; 
     try { 
       Process proc = 域名untime().exec(cmd); 
       InputStreamReader is = new InputStreamReader(域名nputStream());
       BufferedReader br = new BufferedReader(is);
       while ((line = 域名Line ()) != null) { 
       result += line; 
       } 
     } 
     catch(Exception e) { 
       域名tStackTrace(); 
     } 
     return result; 
   }
    
   /** 
   * 
   * @param cmd 第一个命令 
   * @param another 第二个命令 
   * @return  第二个命令的执行结果 
   */
   public static String callCmd(String[] cmd,String[] another) { 
     String result = ""; 
     String line = ""; 
     try { 
       Runtime rt = 域名untime(); 
       Process proc = 域名(cmd); 
       域名For(); //已经执行完第一个命令,准备执行第二个命令 
       proc = 域名(another); 
       InputStreamReader is = new InputStreamReader(域名nputStream()); 
       BufferedReader br = new BufferedReader (is); 
       while ((line = 域名Line ()) != null) { 
         result += line; 
       } 
     } 
     catch(Exception e) { 
       域名tStackTrace(); 
     } 
     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 = 域名ile(regExp);
     Matcher matcher = 域名her(sourceString);
     while(域名()){ 
       result = 域名p(1); 
       if(域名xOf(ip) <= 域名IndexOf(域名p(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) {      
     域名tln(getMacAddress("域名.158"));
   }
   
}
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。