다음과 같이 코드 코드를 복사합니다 .
패키지 com.yswc.dao.sign;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* MAC 주소 얻기
*
* @작가
*
*2011-12
*
*/
공개 클래스 GetMacAddress {
공개 정적 문자열 callCmd(String[] cmd) {
문자열 결과 = "";
문자열 = "";
노력하다 {
프로세스 프로세스 = Runtime.getRuntime().exec(cmd);
InputStreamReader는 = new InputStreamReader(proc.getInputStream());
BufferedReader br = 새로운 BufferedReader(is);
while ((line = br.readLine ()) != null) {
결과 += 줄;
}
}catch(예외 e) {
e.printStackTrace();
}
결과 반환;
}
/**
*
*
*
* @param cmd
* 첫 번째 명령
*
* @param 또 다른
* 두 번째 명령
*
* @return 두 번째 명령의 실행 결과
*
*/
public static String callCmd(String[] cmd,String[] another) {
문자열 결과 = "";
문자열 = "";
노력하다 {
런타임 rt = Runtime.getRuntime();
프로세스 proc = rt.exec(cmd);
proc.waitFor(); // 첫 번째 명령이 실행되고 두 번째 명령이 실행되었습니다.
proc = rt.exec(다른);
InputStreamReader는 = new InputStreamReader(proc.getInputStream());
BufferedReader br = 새로운 BufferedReader(is);
while ((line = br.readLine ()) != null) {
결과 += 줄;
}
}catch(예외 e) {
e.printStackTrace();
}
결과 반환;
}
/**
*
*
*
* @param ip
* 일반적으로 LAN 내의 대상 IP
*
* @param 소스스트링
* 명령 처리 결과 문자열
*
* @param macSeparator
* 맥 구분 기호
*
* @return mac 주소, 위의 구분 기호로 표시됨
*
*/
공개 정적 문자열 filterMacAddress(최종 문자열 ip, 최종 문자열 sourceString, 최종 문자열 macSeparator) {
문자열 결과 = "";
문자열 regExp = "((([0-9,AF,af]{1,2}" + macSeparator + "){1,5})[0-9,AF,af]{1,2})";
패턴 패턴 = Pattern.compile(regExp);
일치자 matcher = Pattern.matcher(sourceString);
동안(matcher.find()){
결과 = matcher.group(1);
if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
break; // IP가 여러 개인 경우 해당 IP에 해당하는 Mac만 일치시킵니다.
}
}
결과 반환;
}
/**
*
*
*
* @param ip
* 대상 IP
*
* @return 맥 주소
*
*
*
*/
공개 정적 문자열 getMacInWindows(최종 문자열 IP){
문자열 결과 = "";
String[] cmd = {"cmd","/c","ping " + ip};
String[] another = {"cmd","/c","arp -a"};
String cmdResult = callCmd(cmd,another);
결과 = filterMacAddress(ip,cmdResult,"-");
결과 반환;
}
/**
*
* @param ip
* 대상 IP
* @return 맥 주소
*
*/
공개 정적 문자열 getMacInLinux(최종 문자열 IP){
문자열 결과 = "";
String[] cmd = {"/bin/sh","-c","ping " + ip + " -c 2 && arp -a" };
String cmdResult = callCmd(cmd);
결과 = filterMacAddress(ip,cmdResult,":");
결과 반환;
}
/**
* MAC 주소 얻기
*
* @return MAC 주소 반환
*/
공개 정적 문자열 getMacAddress(문자열 IP){
문자열 macAddress = "";
macAddress = getMacInWindows(ip).trim();
if(macAddress==null||"".equals(macAddress)){
macAddress = getMacInLinux(ip).trim();
}
macAddress를 반환합니다.
}
공개 정적 무효 메인(String[] args) {
String mac=getMacAddress("192.168.1.102");
System.out.println("mac:"+mac);
}
}