본문 바로가기

리눅스

[draft] tcpdump 명령어

tcpdump 명령어

tcpdump는 Linux/Unix 환경에서 네트워크 패킷을 캡처하고 분석하기 위한 명령줄 기반 네트워크 분석 도구입니다.

네트워크 인터페이스를 통해 송수신되는 패킷을 실시간으로 확인하거나 파일로 저장하여 분석할 수 있으며 네트워크 장애 분석, 보안 분석, 트래픽 확인 등에 널리 사용됩니다.

 

주요 기능

  • 네트워크 패킷 실시간 모니터링
  • 특정 IP 또는 포트 패킷 필터링
  • 패킷을 파일로 저장 후 분석
  • 프로토콜 기반 패킷 분석

1. tcpdump 기본 문법

tcpdump [options] [expression]
  • options : 캡처 동작을 제어하는 옵션
  • expression : 특정 패킷만 캡처하기 위한 필터

자주 사용하는 필터 표현식

  • host : 특정 IP 주소 패킷 캡처
  • port : 특정 포트 패킷 캡처
  • tcp : TCP 패킷만 캡처
  • udp : UDP 패킷만 캡처
  • src : 출발지 기준 필터
  • dst : 목적지 기준 필터
  • and/or/ not : 논리 연산

2. 기본 패킷 캡처

tcpdump를 실행하면 기본적으로 시스템의 첫 번째 네트워크 인터페이스에서 패킷을 캡처합니다.

sudo tcpdump

모든 패킷을 실시간으로 터미널에 출력합니다.

3. 네트워크 인터페이스 지정

특정 인터페이스에서 패킷을 캡처하려면 -i 옵션을 사용합니다.

sudo tcpdump -i eth1

또는

sudo tcpdump -i enp0s3

현재 시스템의 인터페이스 목록 확인

tcpdump -D

4. 캡처할 패킷 수 제한

무제한으로 패킷을 캡처하면 디스크 사용량이 증가할 수 있으므로 -c 옵션으로 개수를 제한할 수 있습니다.

sudo tcpdump -c 10

10개의 패킷을 캡처한 후 자동 종료됩니다.

5. 특정 포트 패킷 캡처

특정 포트의 패킷만 캡처합니다.

sudo tcpdump port 80

또는

sudo tcpdump port 443

6. 특정 호스트 패킷 캡처

특정 IP 주소의 패킷만 캡처합니다.

sudo tcpdump host 192.168.0.1

7. 복합 필터 사용

여러 조건을 결합하여 패킷을 필터링할 수 있습니다.

 

특정 호스트 + 특정 포트 + TCP

sudo tcpdump host 192.168.0.1 and port 80 and tcp

특정 조건 제외

sudo tcpdump not (host 192.168.0.1 and port 80 and tcp)

8. 패킷을 파일로 저장

캡처한 패킷을 파일로 저장하면 Wireshark 등 분석 도구로 확인할 수 있습니다.

sudo tcpdump -w capture.pcap

특정 인터페이스에서 저장

sudo tcpdump -i enp0s3 -w capture.pcap

9. 저장된 패킷 파일 분석

이미 캡처된 .pcap 파일을 분석할 수 있습니다.

tcpdump -r capture.pcap

상세 출력

tcpdump -qns 0 -X -r capture.pcap

옵션 설명

  • -q : 간략한 출력
  • -n : IP 주소를 DNS 변환하지 않음
  • -s 0 : 전체 패킷 캡처
  • -X : HEX + ASCII 형태 출력

10 자주 사용하는 tcpdump 옵션

  • -i : 네트워크 인터페이스 지정
  • -c : 캡처할 패킷 개수 제한
  • -n : IP 주소를 DNS로 변환하지 않음
  • -nn : IP 및 포트를 모두 숫자로 출력
  • -s : 캡처할 패킷 크기 지정
  • -vvv : 상세 출력
  • -X : HEX + ASCII 출력
  • -w : 패킷 파일 저장
  • -r : 저장된 패킷 파일 읽기

11. 패킷 캡처 자동 스크립트 예제

패킷을 일정 개수만 캡처하여 파일로 저장하는 스크립트 예제입니다.

vim cap.sh
#!/bin/bash

tcpdump -c 10000 -s 1560 -vvv -x -nn -i enp0s3 port 53 \
-w ${HOSTNAME}-$(date +%Y%m%d%H%M%S).cap

스크립트 설명

  • -c 10000 : 10,000 패킷 캡처
  • -s 1560 : 패킷 캡처 크기 지정
  • -vvv : 매우 상세한 출력
  • -x : HEX 형식 출력
  • -nn : DNS 변환 비활성화
  • -i enp0s3 : 캡처 인터페이스
  • port 53 : DNS 트래픽 캡처

실행 권한 부여

chmod +x cap.sh

스크립트 실행

./cap.sh

12. 실무에서 자주 사용하는 tcpdump 예제

HTTP 트래픽 확인

tcpdump -i eth0 port 80

DNS 트래픽 확인

tcpdump -i eth0 port 53

특정 서버 트래픽 확인

tcpdump host 192.168.0.100

특정 목적지 트래픽 확인

tcpdump dst host 192.168.0.100

SSH 접속 확인

tcpdump port 22