기본적인 환경셋팅과 jpcap을 이용한 랜카드 디바이스 정보의 출력을  해보겠습니다.


1. java & eclipse를 설치합니다. 
이부분은 넘어가겠습니다

2. jpcap을 설치합니다

여기로 가시면 운영체제 별로 다운하실 수 있습니다. 
저는 우분투이므로 패키지형태로 설치하였습니다.
패키지 열어보시면 아시겠지만    /usr/java/packages/lib/ext/jpcap.jar 이렇게 위치하고있으며,
 import java.*;과 import java.packet.*;         
을 추가하시면 됩니다.

3. 그럼 eclipse에서 프로로젝트, 패키지, 클래스(저는 클래스 이름은 ToolMain 으로 하였습니다) 생성하시고 

ToolMain.java ======================================================

package Tool;

import jpcap.*;
import jpcap.packet.*;
public class ToolMain
{
public static void main(String[] args) 
       {
//for save each inteface information
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
//for each network interface
for (int i = 0; i < devices.length; i++) 
 {
               //print out its name and description
 System.out.println(i+": "+devices[i].name + "(" + devices[i].description+")");

              //print out its datalink name and description
 System.out.println(" datalink: "+devices[i].datalink_name + "(" + devices[i].datalink_description+")");

             //print out its MAC address
System.out.print(" MAC address:");
 
   for (byte b : devices[i].mac_address)
        System.out.print(Integer.toHexString(b&0xff) + ":");
  
System.out.println();

 //print out its IP address, subnet mask and broadcast address
 for (NetworkInterfaceAddress a : devices[i].addresses)
  System.out.println(" address:"+a.address + " " + a.subnet + " "+ a.broadcast);
}

}
}
==========================

위의 내용을 복사하고 실행합니다. 혹시 import jpcap.*;  이나 import jpcap.pcap.*;에서 오류가 발생한다면 
'run configuration'에서 'Source Lookup Path' 의 'default'에 jpcap.jar - /usr/java/packegs/lib/ext가 추가되어있는지 확인해 보시고
또한
'project'에 'properties'가셔서 'java compiler'에 Errors/Warnings에 보시면 우측 상단에 Configure Workspace Settings..이라는 부분이 보이실겁니다. 거기 클릭하셔서  중간에 Edprecated and restricted API에 Frobidden reference(access rules) 를 Ignore로 바꾸어주세요.


앞으로 우리가 사용하게 될 라이브러리는 JPcap입니다. 윈도우의 winpcap 자바버전이라고 생각하시면 됩니다.
앞으로 제가 디바이스드라이버 및 프로그램을 구현하여 랜카드에 접근하고 오고 패킷을 캡쳐 및 보내려고  하면  엄청나게 공부가 되겠지만, 시간도 오래걸리고  이 글을 쓰는 목적에도 벗어나게 됩니다. 
네트워크 상에서 패킷을 이용한 공격방어 알고리즘을 구현하고 툴을 제작함으로써  보안 공부 가 목적이기 때문에 JPcap 라이브러리를 이용하여 패킷의 receive & sending을 처리하도록 하겠습니다.

 사용할 JPcap관련 소스는 http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/download.html    에  tutorial 에 나와있습니다. 참고하시기 바랍니다.

             ===============
//for save each inteface information
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
 ===============

이 부분은 JPcap 라이브러리를 이용해서 PC의 네트워크 인터페이스에 접근하여 devices에 저장합니다

NewtorkInterface는 다음과 같이 정의되어있으며, 해당 정보가 저장되게 됩니다.

==================

public NetworkInterface(java.lang.String name
 java.lang.String description
 boolean loopback
 java.lang.
String datalink_name
 java.lang.String datalink_descriptionclass, 
 byte[] mac
NetworkInterfaceAddress [] addresses)

==================


name: 인터페이스 이름(eth0)
description: 인터페이스 설명("3com... or null")
loopback : 해당인터페이스가 루프백이면 TRUE
datalink_name : 데이터 전송방식?..연결방식 뭐... ethernet tokenring...이런거
datalink_description : 설명 (null)
mac : 인터페이스 mac 주소
address : ip,subnet,broadcast주소 


NetworkInterfaceAddress[] addresses 부분에서 NetworkInterfaceAddress부분을 살펴보면 다음과 같습니다
=================

public NetworkInterfaceAddress(      byte[] address,
 byte[] subnet, 
 byte[] broadcast, 
 byte[] destination)

================

각각 직관적으로 아실 내용들이고, 마지막에 
destination 은 보통의 경우 null값이므로 표시되지 않지만 P2P connection을 하는 경우에 적용되는 것으로 확인됩니다.

 나머지 아래 부분 설명은 생략하겠습니다. 단순 출력이라.....

이렇게 하시면 
0: eth0(null)
 datalink: EN10MB(Ethernet)
 MAC address:f4:6d:4:e:f5:aa:
 address:/210.109.3.123 /255.255.255.192 /210.109.3.127
 address:/fe80:0:0:0:f66d:4ff:fe0e:f5aa /ffff:ffff:ffff:ffff:0:0:0:0 null

1....
;;;
2...

이런식으로 출력되시는걸 확인 하 실 수 있으실겁니다. 
여기서 선택되어진 정보(네트워크 인터페이스)를 가지고 차후 하게될 패킷 보내고 캡쳐하는데 쓰게됩니다. 

오늘은 여기까지 하겠습니다.
조금이나마 JPcap에 대한 생소함이 사라지셨으면 좋겠네요.

앞으로는 class 별로 소스 하나하나를 생성하여 관리하도록 하겠습니다. 
Swing을 이용해서 그래픽적으로 출력하는 부분을 하게될것이며 , 
그거와 동시에 JPcap  capture와 sending에 대한 부분을 조금 더 알아보도록 하겠습니다. 

'프로그래밍 > jpcap programming' 카테고리의 다른 글

ARP 이해 및 공격방어  (0) 2011.06.02
Jpcap을 이용한 패킷 보내기 2  (0) 2011.06.02
Jpcap을 이용한 패킷 보내기 1  (0) 2011.06.02
JPCAP 패킷 캡쳐  (0) 2011.06.02
eclipse java소스 자동정렬  (0) 2011.05.23
AND