通過java獲取mac地址
package cc.wshao.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 第一個(gè)命令
* @param another 第二個(gè)命令
* @return 第二個(gè)命令的執(zhí)行結(jié)果
*/
public static String callCmd(String[] cmd,String[] another) {
String result = "" ;
String line = "" ;
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
proc.waitFor(); // 已經(jīng)執(zhí)行完第一個(gè)命令,準(zhǔn)備執(zhí)行第二個(gè)命令
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 目標(biāo)ip,一般在局域網(wǎng)內(nèi)
* @param sourceString 命令處理的結(jié)果字符串
* @param macSeparator mac分隔符號(hào)
* @return mac地址,用上面的分隔符號(hào)表示
*/
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 ; // 如果有多個(gè)IP,只匹配本IP對應(yīng)的Mac.
}
}
return result;
}
/**
*
* @param ip 目標(biāo)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 目標(biāo)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 " ));
}
}
posted on 2013-12-31 13:58 午后星期午 閱讀(127) 評論(0) 編輯 收藏 所屬分類: Java