TCPDUMP란?

  • 명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어

  • 사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와줌

  • 다음 내용들을 확인할 수 있음

    • 특정 이더넷을 거쳐가는 모든 패킷의 헤드를 캡쳐

    • 특정 이더넷을 거쳐가는 패킷 전체를 캡쳐

    • 이 시스템과 원격지의 대상호스트 사이에 송수신되는 패킷 헤더 또는 패킷 전체 캡쳐

    • 이 시스템과 원격지 대상 호스트 간의 모든 패킷들 가운데 특정 포트번호(혹은, 특정 서비스)로 송수신되는 패킷 헤더 혹은 패킷 전체를 캡쳐

    • 패킷을 캡쳐하여 특정 파일에 저장할 수 있으며 저장된 파일 내용 확인은 –r 옵션을 사용



설치

$ yum install -y tcpdump



사용법

  • tcpdump [ -AdDefIKlLnNOpqRStuUvxX ][ -B buffer_size ][ -c count ][ -C file_size ][ -G rotate_seconds ][ -F file ][ -i interface ][ -m module ][ -M secret ][ -r file ][ -s snaplen ][ -T type ][ -w file ][ -W filecount ][ -E spi@ipaddr algo:secret,… ][ -y datalinktype ][ -z postrotate-command ][ -Z user ]

  • 옵션

    • -A : 패킷의 내용을 화면에 ASCII로 보여줌

    • -B : 운영 체제가 캡쳐하는 버퍼 크기를 buffer_size로 바꿈

    • -c : 주어진 수의 패킷을 받은 후 종료

    • -C : 방금 받은 패킷을 저장파일로 만들기 전에 파일이 file_size보다 큰지 체크
      만약 크다면, 현재 저장파일을 닫고 새로 하나를 엶.
      저장된 파일의 이름은 –w 기호를 이용해 1부터 시작해 하나씩 늘어남.(1,048,576 바이트가 아니라 1,000,000,000바이트이다.)

    • -d : 컴파일된 packet-matching code를 사람이 읽을 수 있는 표준형으로 바꾼 후 멈춤

    • -dd : packet-matching code를 C 프로그램의 일부로 표현

    • -ddd : packet-matching 코드를 십진수로 표현

    • -D : tcpdump가 패킷을 잡을 수 있는 시스템 상에 가능한 네트워크 인터페이스 목록을 출력
      각각의 네트워크 인터페이스에는 번호와 인터페이스 이름이 매겨져 있어야 하고 그에 해당하는 설명이 덧붙여져 있어야 함
      이 기능은 tcpdump가 오래된 버전일 경우에 지원되지 않을 수 있음

    • -e : 링크 레벨 헤더를 각각 덤프라인에 출력

    • -f : 외부 IPv4 주소를 되도록 심볼(상징적)이 아닌 숫자로서 표현

    • -F : 파일을 필터식(filter expression)으로 입력
      추가적으로 명령창에 입력된 식은 무시

    • -G : 이 옵션을 지정하면 덤프 파일을 -w 옵션으로 매 초마다 회전해 회전된 덤프파일을 저장
      저장된 파일은 -w 옵션으로 strftime으로 시간 정보가 정의 되어 이름에 포함되어야 함
      만약 시간 형식이 저장되지 않으면 매번 새로운 파일은 원래 있던 파일에 덮어 씌워짐
      만약 -C 옵션과 함께 쓰인다면 이름은 ‘file'형식으로 저장

    • -i : 인터페이스를 정함
      정해지지 않았으면 tcpdump는 시스템 인터페이스 목록에서 가장 낮은 숫자를 선택

    • -I : 인터페이스를 “monitor mode”로 놓음
      이는 IEEE 802.11 와이파이 인터페이스에서만 작동되고 몇몇 운영 체제에서만 지원



TCPDUMP 예제

  • tcpdump -i eth0
    → 인터페이스 eth0 을 보여줌

  • tcpdump -w tcpdump.log
    → 결과를 파일로 저장, txt 가 아닌 bin 형식으로 저장됨

  • tcpdump -r tcpdump.log
    → 저장한 파일을 읽음

  • tcpdump -i eth0 -c 10
    → 카운터 10개만 보여줌

  • tcpdump -i eth0 tcp port 80
    → tcp 80 포트로 통신하는 패킷 보여줌

  • tcpdump -i eth0 tcp port 80
    → tcp 80 포트로 통신하는 패킷 보여줌

  • tcpdump -i eth0 src 192.168.0.1
    → source ip가 192.168.0.1인 패킷 보여줌

  • tcpdump -i eth0 dst 192.168.0.1
    → dest ip가 192.168.0.1인 패킷 보여줌

  • and 옵션으로 여러가지 조건의 조합 가능

    • tcpdump -i eth0 src 192.168.0.1 and tcp port 80
      → source ip가 192.168.0.1이면서 tcp port 80인 패킷 보여줌
  • tcpdump -i eth0 dst 192.168.0.1
    → dst ip가 192.168.0.1인 패킷 보여줌

  • tcpdump host 192.168.0.1
    → host를 지정하면, 이 ip로 들어오거나 나가는 양방향 패킷 모두 보여줌

  • tcpdump src 192.168.0.1
    → host 중에서 src가 192.168.0.1인 것만 지정

  • tcpdump dst 192.168.0.1
    → host 중에서 dst가 192.168.0.1인 것만 지정

  • tcpdump net 192.168.0.1/24
    → CIDR 포맷으로 지정할 수 있음

  • tcpdump tcp
    → TCP 인것만

  • tcpdump udp
    → UDP 인것만

  • tcpdump port 3389
    → 포트 양뱡항으로 3389인 것.

  • tcpdump src port 3389
    →src 포트가 3389인 것.

  • tcpdump dst port 3389
    →dst 포트가 3389인 것.

  • combine : and ( && ) , or ( || ) , not ( ! ) 으로 여러가지를 조합해서 사용 가능

    • tcpdump udp and src port 53
      → UDP이고 src 포트가 53인 것

    • tcpdump src x.x.x.x and not dst port 22
      → src ip가 x.x.x.x 이고 dst 포트가 22가 아닌 것

  • grouping : ( )

    • tcpdump ‘src x.x.x.x and ( dst port 3389 or 22 )’
      → src ip가 x.x.x.x이고 ( dst 포트가 3389 또는 22 )인 것
      → 여기서는 ‘ ‘ 가 반드시 있어야 함
  • 개인적으로 자주 쓰는 조합

    • tcpdump -l -i eth0 -A -s 0 ‘ip src ip주소’ -w 파일명.pcap

    • tcpdump -l -i any -A -s 0 ‘tcp dst port 포트번호’ -w 파일명.pcap

    • tcpdump -l -i eth1 host 도메인 -w 파일명.pcap

    • tcpdump -l -i any -A -s 0 ‘ip src ip주소1 or dst ip주소2’ -w 파일명.pcap