Packet Capture Program 만들기

Linux환경에서 C를 이용해 raw socket을 이용한 tcpdump의 interface를 모방하는 패킷 캡쳐 프로그램 작성하는 것을 목표로 시작했습니다.


캡쳐할 정보는 IPv4(이더넷 타입이 0x0800 (ip헤더의 버전이 4)를 기반으로 2계층인 Ethernet 정보부터 패킷을 수집하여 앞에서부터 잘라내면서, Ethernet header | ip header | TCP/UDP/ICMP header | data(payload) 캡쳐 하는 프로그램을 작성해보았습니다.

응용계층의 http, dns와 네트워크 계층의 icmp에 대해서는 추가적으로 payload도 분석하는 프로그램입니다.


사용시 주의사항

외부의 컴퓨터를 패킷캡쳐를 시도하려면, 첫번째로 sudo ifconfig eth0 promisc을 통해 무차별 모드로 네트워크를 설정해줘야 합니다.

그 후에도 외부 컴퓨터는 패킷캡쳐가 진행이 되지 않는데 요즘 랜카드들은 보안문제 때문에 모니터링 모드를 지원하지 않기 때문에 따로 랜카드를 구매하거나 내컴퓨터의 패킷만 캡쳐하면서 공부목적으로 사용하는것이 좋습니다.


사용방법

repo를 clone하던지 소스코드를 복사하고 Makefile 이용하여 make로 컴파일 후 프로그램을 sudo권한으로 실행시키면 됩니다.

0. git clone https://github.com/gowoonsori/linux_packetCaptureProgram.git
1. make로 compile
2. sudo ./captureProgram 실행

요약내용은 command에 표시되며, 상세 분석내용은 자동으로 현재 날짜T현재시간.txt파일에 저장됩니다.


start 시 protocol port ip options 순으로 입력하여 실행.

  • protocol :
    • * (all ) : tcp / udp / icmp 프로토콜 캡쳐
    • tcp : tcp 프로토콜 캡쳐
    • udp : udp 프로토콜 캡쳐
    • icmp : icmp 프로토콜 캡쳐
  • port :
    • * (all) : 0~65535 모든 포트번호 캡쳐
    • 0~65535 입력 [ http : 80 / dns : 53 ]
  • ip :
    • * (all ) : 0.0.0.0 ~ 255.255.255.255 모든 ip주소 캡쳐
    • 0.0.0.0 ~ 255.255.255.255 입력 [ localhost : 127.0.0.1 ]
  • options :
    • s : 캡쳐 패킷 data 요약내용으로 출력
    • a : 캡쳐 패킷 data ascii로 출력
    • x : 캡쳐 패킷 data hex로 출력


start


소스 코드

Github으로 보러가기

📃 코드 ( 접기 / 펼치기 )