用純Java程式碼根據IP獲取windows和linux的MAC實體地址
阿新 • • 發佈:2019-02-03
-
import java.io.BufferedReader;
-
import java.io.InputStreamReader;
-
import java.util.regex.Matcher;
-
import java.util.regex.Pattern;
-
/**
-
*
-
* 根據ip獲取mac地址
-
*
-
*/
-
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("192.168.2.184"));
-
}
- }