根据用户IP抓取MEC地址

package com.ccit.web.recommonedCode.dao.impl;

import java.io.BufferedReader;
 
import java.io.InputStreamReader;
 
import java.util.regex.Matcher;
 
import java.util.regex.Pattern;
public class GetIpAndMec {
/**
 
* 获取MAC地址
 
* @author
 
* 2011-12
 
*/
 
public  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 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 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 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 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 String getMacAddress(String ip){
     String macAddress = "";
     macAddress = getMacInWindows(ip).trim();
     if(macAddress==null||"".equals(macAddress)){
         macAddress = getMacInLinux(ip).trim();
     }
     return macAddress;
 }
}



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值