리모트 컴퓨터 Mac어드레스 가져오기...

미루고 미뤄오던 리모트 컴퓨터 Mac어드레스 가져오기 입니다.

아시는분들은 이미 arp에 대한 설명으로 어떻게 할지 모든걸 파악 했을꺼라 생각합니다.

하지만, 모르시는 분들을 위해.... 샘플을 만들어 봤습니다.


샘플 소스에 사용된 클래스는 다음과 같습니다.

- ProcessBuilder : 외부프로그램 실행 할때 사용

- SequenceInputStream : 여러개의 스트림 연결

- Scanner : 스트림을 스캔


샘플 소스

import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Scanner;

public class ArpMacAddressGet {

	/**
	 * @param args
	 * @throws IOException
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws IOException,
			InterruptedException {

		// mac어드레스정보를 가져와야할 ip어드레스
		String ip = "192.168.2.132";

		// 실행 커맨드(arp명령 사용)
		String[] cmd = { "cmd", "/c", "arp", "-a", ip };
		Process process = null;

		try {
			// 프로세스빌더 실행
			process = new ProcessBuilder(cmd).start();

			// SequenceInputStream은 여러개의 스트림을 하나의 스트림으로 연결해줌.
			SequenceInputStream seqIn = new SequenceInputStream(
					process.getInputStream(), process.getErrorStream());

			Scanner s = new Scanner(seqIn);

			while (s.hasNextLine() == true) {
				System.out.println(s.nextLine());
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

[실행]

mac_addr.PNG


위에 실행 결과 처럼 IP주소로 Mac어드레스를 가져올 수 가 있습니다.
하지만, arp테이블에 IP가 없다면 당연히 나오지 않겠죠...^^;
arp테이블에 등록이 될려면 해당 컴퓨터와 통신을 해야 합니다.
그래야만 arp테이블에 등록이 됩니다.

한번도 통신한적이 없는 컴퓨터일 경우에 통신을 어떻게 하냐???
그냥 ping테스트 정도 만으로도 arp테이블에 등록 됩니다.

샘플 소스에는 안들어가 있지만 arp명령을 실행 하기전에 ping테스트를 한번 하고
실행 시켜도 될것 같죠!! ^^;

오늘은 여기 까지.....
감사합니다.