Скопируйте код кода следующим образом:
пакет com.yswc.dao.sign;
импортировать java.io.BufferedReader;
импортировать java.io.InputStreamReader;
импортировать java.util.regex.Matcher;
импортировать java.util.regex.Pattern;
/**
*
* Получить MAC-адрес
*
* @автор
*
*2011-12
*
*/
общественный класс GetMacAddress {
общественная статическая строка callCmd (String [] cmd) {
Строковый результат = "";
Строковая линия = "";
пытаться {
Процесс proc = Runtime.getRuntime().exec(cmd);
InputStreamReader = новый InputStreamReader(proc.getInputStream());
BufferedReader br = новый BufferedReader (есть);
while ((line = br.readLine ()) != null) {
результат += строка;
}
}catch(Исключение е) {
е.printStackTrace();
}
вернуть результат;
}
/**
*
*
*
* @param cmd
* первая команда
*
* @param другой
* Вторая команда
*
* @return Результат выполнения второй команды
*
*/
public static String callCmd(String[] cmd,String[]other) {
Строковый результат = "";
Строковая линия = "";
пытаться {
Время выполнения rt = Runtime.getRuntime();
Процесс процесса = rt.exec(cmd);
proc.waitFor(); // Первая команда выполнена, вторая команда выполнена.
proc = rt.exec(другой);
InputStreamReader = новый InputStreamReader(proc.getInputStream());
BufferedReader br = новый BufferedReader (есть);
while ((line = br.readLine ()) != null) {
результат += строка;
}
}catch(Исключение е) {
е.printStackTrace();
}
вернуть результат;
}
/**
*
*
*
* @парам ip
* Целевой IP, обычно внутри локальной сети.
*
* @param sourceString
* Результирующая строка обработки команды
*
* @param macSeparator
* Mac-разделитель
*
* @return mac-адрес, представленный разделителем выше
*
*/
public static String filterMacAddress (final String ip, Final String sourceString, Final String macSeparator) {
Строковый результат = "";
String regExp = "((([0-9,AF,af]{1,2}" + macSeparator + "){1,5})[0-9,AF,af]{1,2})";
Шаблон шаблона = Pattern.compile(regExp);
Сопоставитель = шаблон.matcher(sourceString);
в то время как (matcher.find()) {
результат = matcher.group(1);
if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
перерыв; // Если существует несколько IP-адресов, будет сопоставлен только Mac, соответствующий этому IP-адресу.
}
}
вернуть результат;
}
/**
*
*
*
* @парам ip
* целевой IP
*
* @return Mac-адрес
*
*
*
*/
общедоступная статическая строка getMacInWindows (конечная строка ip) {
Строковый результат = "";
String[] cmd = {"cmd","/c","ping " + ip};
String[]other = {"cmd","/c","arp -a"};
Строка cmdResult = callCmd(CMD,другой);
результат = filterMacAddress(ip,cmdResult,"-");
вернуть результат;
}
/**
*
* @парам ip
* целевой IP
* @return Mac-адрес
*
*/
общедоступная статическая строка getMacInLinux (окончание строки ip) {
Строковый результат = "";
String[] cmd = {"/bin/sh","-c","ping " + ip + " -c 2 && arp -a" };
Строка cmdResult = callCmd(cmd);
результат = filterMacAddress(ip,cmdResult,":");
вернуть результат;
}
/**
* Получить MAC-адрес
*
* @return Возвращает MAC-адрес
*/
общественная статическая строка getMacAddress (String ip) {
Строка macAddress = "";
macAddress = getMacInWindows(ip).trim();
if(macAddress==null||"".equals(macAddress)){
macAddress = getMacInLinux(ip).trim();
}
вернуть макадрес;
}
public static void main(String[] args) {
String mac=getMacAddress("192.168.1.102");
System.out.println("mac:"+mac);
}
}