네트워크 및 보안/pcap 파일 분석기 만들기 with C언어

[pcap 파일 분석기 만들기 wich C언어] 5. 패킷 분석기 예광탄 - ARP 프로토콜 스택 분석

언제나휴일 2016. 5. 23. 10:54
반응형

5. 패킷 분석기 예광탄 - ARP 프로토콜 스택 분석



안녕하세요. 언제나 휴일, 언휴예요.


이전 게시글에서는 pcap 파일의 IPv4 프로토콜 스택 분석하는 부분을 추가했어요. 현재까지 PCAP 파일 포멧 분석 및 ethernet 프로토콜 스택과 IPv4 프로토콜 분석하였습니다.


이번에는 ARP 프로토콜 스택 헤더를 분석하여 콘솔 화면에 출력하는 부분을 추가합시다.


빨간색 테두리 안에 출력 내용이 ARP 프로토콜 스택 정보입니다.

[pcap 파일 분석기 만들기 wich C언어] 5. 패킷 분석기 예광탄 - ARP 프로토콜 스택 분석



먼저 ARP 프로토콜 스택 헤더를 구조체로 정의하는 부분을 ehpacket.h 파일에 추가합시다.


 

typedef struct _arphdr

{

하드웨어 타입(16비트)와 프로토콜 타입(16비트)와 하드웨어 길이(8비트), 프로토콜 길이(8비트), operation code(16비트)로 시작합니다.

    ushort hwtype; //hardware type

    ushort prototype;//protocol type

    uchar hlen;//h/w length

    uchar plen;//protocol length

    ushort opcode; //operation code

송신자의 H/W 주소와 프로토콜 주소가 오는데 이 부분은 가변적인 길이를 갖습니다. 여기에서는 ethernet과 IPv4일 때에만 분석을 제공할 것이며 이 때는 ethernet 주소는 6바이트, IPv4 주소 길이 4바이트입니다.

    uchar sender_mac[MAC_ADDR_LEN];

    uint sender_address;

목적지의 H/W주소와 프로토콜 주소도 마찬가지입니다.

    uchar target_mac[MAC_ADDR_LEN];

    uint target_address;

}arphdr;



소스 파일에 ARP 프로토콜 스택 헤더를 분석하여 콘솔 화면에 출력하는 ViewARP 함수를 구현합시다.



void ViewARP(char *buf)

{

    arphdr *arphd = (arphdr *)buf;

    printf("\n===========  ARP Header ==============\n");

먼저 하드웨어 타입을 출력합니다. network byte order를 host byte order로 변경하여 출력하세요.

    printf("h/w type: %u", ntohs(arphd->hwtype));

ethernet은 하드웨어 타입이 1입니다.

    if (ntohs(arphd->hwtype) == 1)

    {

        printf("  Ethernet");

    }

프로토콜 타입을 출력합니다. byte order를 변환하여 출력하세요.

    printf("\nprotocol type:%#x", ntohs(arphd->prototype));


IPv4는 프로토콜 타입이 0x800입니다.

    if (ntohs(arphd->prototype) == 0x800)

    {

        IN_ADDR addr;

        printf("  IP\n");

OP 코드를 출력하세요.

        printf("\n opcode: %d ", ntohs(arphd->opcode));


발신지 MAC 주소와 IPv4 주소를 출력하세요.        

        printf("sender mac:0x");

        ViewMac(arphd->sender_mac);

        addr.s_addr = arphd->sender_address;

        printf("\nsender ip: %s\n", inet_ntoa(addr));


목적지 MAC 주소와 IPv4 주소를 출력하세요.       

        printf("target mac:0x");

        ViewMac(arphd->target_mac);

        addr.s_addr = arphd->target_address;

        printf("\ntarget ip: %s\n", inet_ntoa(addr));

    }

}


앞으로 남은 프로토콜 스택 헤더를 분석하는 것도 결국 이미 약속한 프로토콜 스택에 맞게 데이터 값을 확인하여 사용자가 보기 편하게 보여주는 작업이 기본입니다.


물론 네트워크 보안을 위해 이러한 기본적인 분석 이외에 수상한 트래픽을 빠르게 파악할 수 있게 효과적인 분석 기능을 추가하는 작업을 통해 기능 강화 및 품질 수준을 높여야겠죠.


다음에는 ICMPv4 프로토콜 스택 헤더를 분석하는 작업을 할게요. 그럼 다음에 봐요.


오늘도 모두 행복한 하루~



테스트에 사용한 PCAP 파일(ARP 트래픽이 있는 pcap 파일이면 다른 파일이어도 상관없습니다.)

demoarp.pcap


헤더 파일 및 소스 파일

ehpacket.h

Program.c





반응형