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권한으로 실행시키면 됩니다.

  1. git clone https://github.com/gowoonsori/linux_packetCaptureProgram.git
  2. make로 compile
  3. 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로 출력

alter-text

소스 코드

Github으로 보러가기

Tags :

Related Posts

2020년을 보내며

2020년을 보내며

2019년도에 했던 2020년 다짐으로 3학년 복학을 하면서 웹 개발 전반적으로 공부도하면서 학점관리와 토익, 토이 프로젝트를 진행하고자 했었다. 진행한 프로젝트 my-tech : 군휴학과 일반휴학포함 3년 휴학후에 다시 시작하는 컴퓨터과학 공부로써 기초부터 다시 공부하고 기록하기 위한 repository이고, 기본적인 markdown문법을 익히기 위해 md파일로 작성하였으며, git공부를 위해 블로그가 아닌 repo를 이용하여 기록한 글이다....

Read More
Google Analytics 추가하기

Google Analytics 추가하기

개인마다 선택한 Theme에 이미 구글 애널리틱스 삽입 코드가 포함되어 있어 config.toml 파일에 추적코드만 삽입하면 되는 경우가 대부분일 것이다. 이 부분은 선택한 theme 문서를 잘 확인해보고 만약에 없다면 아래와 같은 방법으로 추가해줄 수 있다. 1. Google Analytics 추적 코드 발급 구글 애널리틱스를 추가하기 위해서는 당연히 구글의 애널리틱스에 가입을 먼저 해야 한다. 가입을 하고 나면 계정과 속성을 등록해야 한다....

Read More
어노테이션

어노테이션

  • Java
  • 2021년 1월 31일

메서드를 오버라이딩 할때 사용했던 @Override와 같이 @ 기호를 사용하는 문법 요소로 Java5부터 등장했다. 단어의 의미인 주석과는 비슷하지만 다른 역할로써 사용되는데 메서드/클래스 등에 의미를 단순히 컴파일러에게 알려주기 위한 표식이 아닌 컴파일타임 이나 런타임에 해석될 수 있다. 1) 장점 기존의 자바는 선언적 프로그래밍방식으로 개발을 하면서 각 계층별 설정 데이터들을 XML에 명시했었는데 서비스의 규모가 클 수록 설정양이 많아지고 도메인 처리의 데이터들이 분산되어 있어 수정이 힘들었다....

Read More