문서의 이전 판입니다!
tcpdump
tcpdump는 libpcap을 사용해 네트워크 인터페이스의 패킷을 캡처하거나 저장된 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'
tcpdump [OPTIONS] [EXPRESSION]
Options
-D: 캡처 가능한 인터페이스 목록을 출력한다.-i INTERFACE: 패킷을 캡처할 인터페이스를 지정한다. Linux의any는 모든 일반 인터페이스를 뜻한다.-c COUNT: 지정한 수의 패킷을 처리한 뒤 종료한다.-n: 주소를 hostname으로 변환하지 않는다.-nn: hostname 변환과 service name 변환을 모두 끈다.-s SNAPLEN: 각 패킷에서 캡처할 byte 수를 지정한다.-s 0은 현재 버전에서 전체 패킷을 캡처한다.-w FILE: raw packet을 capture file에 저장한다.-r FILE: 저장된 capture file을 읽는다.-A: packet payload를 ASCII로 출력한다.-X: packet payload를 hex와 ASCII로 출력한다.-e: link-layer header를 함께 출력한다.-q: protocol 상세 출력을 줄인다.-v,-vv,-vvv: 출력 상세도를 단계적으로 높인다.-Q in|out|inout: 지원하는 플랫폼에서 capture 방향을 제한한다.-G SECONDS: 지정한 시간마다 새 output file로 전환한다.-C FILE_SIZE: file 크기가 기준에 도달하면 다음 output file로 전환한다.-W FILE_COUNT: rotation에서 유지할 file 수를 제한한다.
Capture Filters
tcpdump의 마지막 EXPRESSION은 pcap/BPF capture filter다. and, or, not과 괄호로 조건을 조합할 수 있다. shell이 특수 문자를 해석하지 않도록 filter 전체를 작은따옴표로 감싸는 편이 안전하다.
src host IP_OR_NAME: 출발지를 지정한다.dst host IP_OR_NAME: 목적지를 지정한다.host IP_OR_NAME: 출발지 또는 목적지를 지정한다.src port PORT: 출발지 port를 지정한다.dst port PORT: 목적지 port를 지정한다.port PORT: 출발지 또는 목적지 port를 지정한다.tcp,udp,icmp,ip6: protocol을 지정한다.net NETWORK: network prefix를 지정한다.
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 구성을 사용하고, 실행 파일에 광범위한 권한을 임의로 부여하지 않는다.
패킷이 보이지 않음
tcpdump -D로 실제 interface 이름을 확인한다.- container, namespace, VPN, bridge 환경에서는 traffic이 통과하는 namespace와 interface에서 실행했는지 확인한다.
- DNS와 service name 조회가 원인 분석을 방해하면
-nn을 사용한다. - 먼저 좁은 filter를 제거해 traffic 존재를 확인한 뒤 조건을 단계적으로 추가한다.
저장 파일이 너무 큼
capture filter, -c, -G, -C, -W를 조합해 시간·크기·파일 수를 제한한다. rotation 후 command를 실행하는 -z에는 임의 입력을 넣지 않는다.
Compatibility
- capture 가능한 link type,
-Q방향 제한, timestamp 기능은 OS와 libpcap backend에 따라 다르다. anyinterface는 주로 Linux에서 제공되며 일반 physical interface와 link-layer header가 다를 수 있다.- tcpdump capture filter와 Wireshark/TShark display filter는 문법과 적용 시점이 다르다.
Help
See Also
- Wireshark — tcpdump capture file을 GUI로 분석할 수 있다.
History
- codex:: 2026-08-11 기존 명령과 filter 기록을 보존하고 설치, option, capture file, rotation, 보안 및 문제 해결 내용을 확장했다.