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

Red Black Tree

Red Black Tree

BST (이진 탐색 트리)를 기반으로 둔 Tree. Tree의 Rebalancing 방법 중 하나로 balanced한 트리이다. 각 노드는 값(key)말고도 색을 갖고 있으며, 색은 레드 or 블랙 2종류이다. 1. Red Black Tree가 갖는 특성 Root Property : 루트(root)노드는 블랙(black)이다. External Property : 모든 외부 노드 (external node)는 블랙이다. Depth Property : 모든 단말 노드(leaf n...

Read More
변수

변수

1. 변수 선언 1) 기본 방법 var a int var a int = 10 var b,c,d int = 1,2,3 //동시에 여러개 변수 선언도 가능하다. var키워드로 변수를 선언하고 변수명 다음 데이터 타입을 명시해주어야 하고, 선언만 하고 초기화를 해주지 않으면 go는 Zero value를 할당한다. Note Zero Value 숫자 = 0 bool = false string = "" 2) 타입 추론 var a = 10 var q,w,e = 1, true, "#" //동시에 여러개 변수 선언을 할때 다른...

Read More
GraphQL 서버 구축하기

GraphQL 서버 구축하기

이번에 버스 공공api를 이용해 현재 gps를 기반으로한 승차 예약 시스템 프로젝트를 진행중에 있는데, 이때의 구축과정기를 작성하려고 한다. 1. Spring boot에 GraphQL적용 이유 우선, nodeJS를 이용하면 조금 더 편하게 구현할 수 있었을 텐데 그것이 아닌 Spring boot를 이용해서 GraphQL을 사용하는 이유가 프로젝트를 진행하면서 처...

Read More