목차

, , , , , ,

tcpdump

tcpdumplibpcap을 사용해 네트워크 인터페이스의 패킷을 캡처하거나 저장된 capture file을 읽는 CLI 분석 도구다. 캡처 대상을 BPF capture filter로 제한할 수 있다.

Installation

Debian / Ubuntu

sudo apt update
sudo apt install tcpdump

RHEL / Fedora

sudo dnf install tcpdump

macOS

macOS에는 /usr/sbin/tcpdump가 기본 제공된다. Apple이 제공하는 버전을 먼저 사용하고 다음 명령으로 확인한다.

/usr/sbin/tcpdump --version

공식 Homebrew tcpdump formula와 Windows용 winget package는 확인되지 않았다. tcpdump upstream은 Windows build에 Npcap과 Visual Studio/CMake가 필요하다고 안내한다. Windows에서 일반적인 packet capture가 목적이면 TShark 또는 Wireshark를 고려한다.

Verification

tcpdump --version

Usage

tcpdump -i eth0 tcp port 80
tcpdump -i any port 80
tcpdump -qns 0 -A -r packet.pcap
tcpdump -i enp4s0 -Q out 'dst host example.com'
실시간 패킷 캡처에는 보통 root 권한 또는 별도 capture capability가 필요하다. 캡처 파일에는 인증 정보, session token, 개인 정보 등 민감한 payload가 포함될 수 있으므로 필요한 인터페이스·host·port·시간만 제한해 캡처하고 접근 권한과 보관 기간을 관리한다.

Options

Capture Filters

tcpdump의 마지막 EXPRESSION은 pcap/BPF capture filter다. and, or, not과 괄호로 조건을 조합할 수 있다. shell이 특수 문자를 해석하지 않도록 filter 전체를 작은따옴표로 감싸는 편이 안전하다.

Examples

인터페이스 확인

tcpdump -D

패킷 수와 조건 제한

sudo tcpdump -i eth0 -nn -c 100 'tcp port 443'
sudo tcpdump -i any -nn 'host 192.0.2.10 and not port 22'

파일 저장과 읽기

sudo tcpdump -i eth0 -nn -s 0 -c 1000 -w packet.pcap 'port 53'
tcpdump -nn -r packet.pcap
tcpdump -qns 0 -A -r packet.pcap

-w는 사람이 읽는 text가 아니라 raw packet을 저장한다. text 보고서가 필요하면 capture file을 -r로 다시 읽어 표준 출력을 별도 파일로 redirect한다.

방향 필터

sudo tcpdump -i enp4s0 -Q out 'dst host example.com'

-Q 지원 여부와 사용할 수 있는 값은 OS와 capture backend에 따라 다르다.

크기와 개수를 제한한 rotation

sudo tcpdump -i eth0 -nn -s 0 -C 100 -W 10 -w 'capture.pcap'

Troubleshooting

권한 오류

root로 실행하기 전에 조직의 packet capture 정책을 확인한다. 지속적인 비root capture가 필요하면 배포판의 전용 group 또는 최소 capability 구성을 사용하고, 실행 파일에 광범위한 권한을 임의로 부여하지 않는다.

패킷이 보이지 않음

저장 파일이 너무 큼

capture filter, -c, -G, -C, -W를 조합해 시간·크기·파일 수를 제한한다. rotation 후 command를 실행하는 -z에는 임의 입력을 넣지 않는다.

Compatibility

Help

tcpdump --help

See Also

History