package
?com.juziku.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??第一個命令?
??????*?
@param
?another?第二個命令?
??????*?
@return
???第二個命令的執(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í)行完第一個命令,準(zhǔn)備執(zhí)行第二個命令??
?????????????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分隔符號?
??????*?
@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對應(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
"
));
?????}
?????
}
通過java獲取mac地址,下面是完整的代碼: