2010년 4월 24일 토요일

자바(Java)에서 패킷 덤프는 어떤 방법으로 ?

윈도우 환경에서 패킷 캡쳐를 할때 기본적으로 설치하여 사용하는 것이 Winpcap 이다.
자바에서도 패킷 캡쳐를 하려면 이걸 그대로 이용하면 될 것인가? 자바기반의 라이브러리가 필요하다. 그리하여 자바에서 사용하기 위한 JPcap 을 소개하고자 한다. 당연히 실시간적으로 트래픽을 모니터링 할 수도 있으며, 일반적인 Pcap 과 비슷한 방법을 제공한다. 참고로, JPcap 도 libpcap/winpcap 을 기반으로 작성된 라이브러리이다.

아래 사이트를 방문하면 다운로드 및 좀더 세부 정보를 얻을 수 있다.

- http://jpcap.sourceforge.net/

JPcap 을 이용한 간단한 예제를 수행해 보았는데, 위 사이트에서 제공하는 코드 중 tcpdump.java
를 실행해 본 것이다.

일단 실행하면, 아래와 같이 덤프를 뜰 인터페이스를 지정하는 화면을 보여준다.


위 4가지 인터페이스 중 하나를 선택하여 실행하면 아래와 같이 패킷 정보를 확인할 수 있다. 자바를
조금이라도 겪어 본 분들이라면 어렵지 않게 실행할 수 있을 것이다.

참고로 코드도 함께 소개한다. 아래 코드는 위 사이트에서도 받을 수 있다. 자! 자바를 기반으로 한
패킷캡쳐가 필요하다면 JPcap 이 큰 도움을 줄 것이다.

[코드 : Tcpdump.java]

import jpcap.*;
import jpcap.packet.Packet;

class Tcpdump implements PacketReceiver {
public void receivePacket(Packet packet) {
System.out.println("PacketInside.com : JPCAP Example");
System.out.println(packet);
}

public static void main(String[] args) throws Exception {
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
if(args.length<1){
System.out.println("usage: java Tcpdump <select a number from the following>");
for (int i = 0; i < devices.length; i++) {
System.out.println(i+" :"+devices[i].name + "(" + devices[i].description+")");
System.out.println("    data link:"+devices[i].datalink_name + "("
+ devices[i].datalink_description+")");
System.out.print("    MAC address:");
for (byte b : devices[i].mac_address)
System.out.print(Integer.toHexString(b&0xff) + ":");
System.out.println();
for (NetworkInterfaceAddress a : devices[i].addresses)
System.out.println("    address:"+a.address + " " + a.subnet + " "
+ a.broadcast);
}
}else{
JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[Integer.parseInt(args[0])], 2000,

false, 20);
jpcap.loopPacket(-1, new Tcpdump());
}
}
}

댓글 1개:

  1. 또 다른 것을 하나 소개하자면 JNetPcap 이 있다. 자세한 정보는 다음 사이트에서 정보를 참고하세요.



    http://jnetpcap.com/

    답글삭제