Linux

[바미] tcpdump를사용하여 패킷 캡쳐하기.

Bami 2023. 1. 10. 14:41
728x90
반응형

안녕하세요. 요즘 udp 관련 패킷을 확인할 일이 생겨 tcpdump에 대해 공부하게 되었고, 공부한 내용들을 정리하여 올려봅니다.

tcpdump란?

tcpdump는 CLI 환경에서 실행하는 일반적인 패킷 가로채기 소프트웨어 입니다.

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

tcpdump 명령어 사용법

tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
        [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
        [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
        [ -P in|out|inout ]
        [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
        [ -W filecount ]
        [ -E spi@ipaddr algo:secret,...  ]
        [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
        [ expression ]

네트워크 프로토콜(TCP/IP), 네트워크 인터페이스에 대한 기본적인 지식이 있어야 사용법을 이해할 수 있습니다.

tcpdump를 원하는 인터페이스나 포트를 지정하여 조건에 만족하는 패킷들을 출력해주는 명령어(프로그램)이죠.

 

tcpdump 명령어 옵션

자주 사용하는 옵션만 정리해보았습니다.

 

옵션 설명
-A Print each packet (minus its link level header) in ASCII. Handy for capturing web pages.
-C 캡쳐한 패킷을 저장할 때, file_size만큼의 크기로 갱신한다. -w flag로 지정된 파일명을 이용해 1부터 하나씩 늘어난다. file_size의 기본 크기는 MB(1,000,000 bytes)
-D tcpdump로 패킷을 캡쳐할 수 있는 네트워크 인터페이스 목록을 출력해준다. 이 옵션으로 출력된 인터페이스들을 -i 옵션을 통해 지정할 수 있다.
-f 외부 IPv4 주소를 되도록 숫자로 표현한다.
-G 캡쳐한 패킷을 저장할 때, rotate_seconds만큼의 주기로 갱신한다. -w flag로 지정된 파일명을 이용해 strftime(3)에 정의된 time format으로 지정할 수 있다.
-i 캡쳐할 네트워크 인터페이스를 지정한다. 따로 지정하지 않으면 시스템 인터페이스 목록에서 가장 낮은 숫자를 골라 캡쳐한다.(loopback 제외)
-nn 대중적인 프로토콜과 포트번호를 이름으로 변환하지 않고 숫자 그대로 보여준다.
-tttt 캡쳐한 각 패킷 행에 날짜 기본 형식으로 timestamp를 출력한다.
-vvv 패킷의 모든 정보를 보여준다(TTL 포함)
-w 캡쳐한 패킷을 파일(.pcap)로 저장한다.
-Z 저장한 파일의 권한을 root 권한이 아닌 다른 User로 주고 싶을 때 사용한다.

더 자세한 옵션은 공식문서인 tcpdump(8) - Linux man page를 참고해주세요.

tcpdump 조건식(expression)

옵션의 가장 마지막인 조건식([ expression ])은 어떤 패킷들을 dump할지 선택하는데 사용됩니다.

 

(조건식들은 몇 개의 primitives로 이루어져 있는데, pcap-filter(7) - Linux man page에 자세한 내용이 나와있습니다.)

 

여기선 많이 사용하는 host, port 에 대해서만 적어놓았습니다.

옵션 설명
host dst(목적지), src(출발지)와 관계 없이 지정된 host 정보를 가진 패킷만 캡쳐한다.
port dst(목적지), src(출발지)와 관계 없이 지정된 port 정보를 가진 패킷만 캡쳐한다.
  dst, src를 따로 지정해줄 수도 있다.

tcpdump 명령어 사용 예시

제가 실제 사용한 명령어 예시로는

  • (root 접속 후)
    tcpdump -i ens5 udp port 7799 -XX -q -vv -nn

저장한 .pcap 파일 보는 방법

  • 와이어샤크(WireShark)를 지원하는 OS라면 와이어샤크를 설치 후 pcap 파일을 실행하면 볼 수 있습니다.
  • CLI 환경에서는 아래 커맨드로 확인 가능합니다.
    • tcpdump -qns 0 -A -r [pcap 파일 경로]

참고 자료

728x90
반응형