Pcap 설치/사용형식

2023. 9. 21. 16:21컴퓨터/컴퓨터 네트워크

PCAP(Packet capture)은 네트워크 상에서 패킷을 만들거나 잡을 때(capture) 사용되는 C언어 라이브러리입니다.

sniffing을 직접 해보고 싶어서 사용하려 보니 생각보다 헷갈려서 설치방법, 기본적인 사용 형식 (format)을 정리해 봅니다.

터미널에

sudo apt-get install libpcap-dev

를 입력해서 PCAP을 다운로드 받습니다.

저는 리눅스 터미널에서 다운로드 받았습니다.

 

아래는 PCAP의 기본적인 포맷사용을 순서대로 정리했습니다.

1. pcap_open_live로 네트워크 인터페이스를 열어줍니다.

#include <pcap.h>
pcap_t *handle;
char *dev = "eth0"; 

handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf);
if (handle == NULL) {
    fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf);
    return 1;
}
ip -br address

를 통해 "eht0"에 들어갈 네트워크 인터페이스 이름을 확인하고 입력해줍니다.

pcap_open_live는 NIC에서 "eht0"이름의 pcap session을 열어줍니다.

상대방(호스트)의 ip 주소를 확인하고 싶을 때는 dig 명령어를 사용합니다.

dig "ex)something.kr"

 

2. packet_handler 함수와 pcap_loop로 패킷을 capture 

void packet_handler(u_char *user_data, const struct pcap_pkthdr *pkthdr, const u_char *packet) {
    // Your packet handling logic here
}

pcap_loop(handle, 0, packet_handler, NULL);

chat gpt로 pcap sniffing format코드를 자세히 알아내었습니다.

 

3. handler 닫기

pcap_close(handle);

 

4. 컴파일하고 실행

gcc를 사용하여 컴파일 한 후 실행해 줍니다.

gcc your_program.c -o your_program -lpcap

**gcc와 vim 사용법은 추후에 정리하겠습닏

 

기본적인 pcap을 사용한 sniffing format은 아래와 같아집니다.

#include <pcap.h>
#include <stdio.h>

void packet_handler(u_char *user_data, const struct pcap_pkthdr *pkthdr, const u_char *packet) {
    static int packet_count = 0;

    printf("Packet #%d\n", ++packet_count);
    printf("Timestamp: %s", ctime((const time_t*)&pkthdr->ts.tv_sec)); // Convert timestamp to a human-readable format
    printf("Packet Length: %d bytes\n", pkthdr->len);

    // You can further analyze and print packet contents here
}

int main() {
    pcap_t *handle;
    char *dev = "eth0"; // Replace with your network interface name
    char errbuf[PCAP_ERRBUF_SIZE];

    handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf);
    if (handle == NULL) {
        fprintf(stderr, "Couldn't open device %s: %s\n", dev, errbuf);
        return 1;
    }

    pcap_loop(handle, 0, packet_handler, NULL);

    pcap_close(handle);

    return 0;
}

 packet을 sniffing할 수 있게 되었습니다.

packet의 상세한 세부사항을 출력하는 연습은 추후에 포스팅하도록 하겠습니다!

'컴퓨터 > 컴퓨터 네트워크' 카테고리의 다른 글

네트워크 개념 정리  (0) 2023.10.05
wireshark 실습  (0) 2023.09.21
socket programming  (0) 2023.09.21