문서 보기이전 판역링크맨 위로 이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요. {{tag>[linux cli network packet capture pcap tcpdump]}} ====== tcpdump ====== ''tcpdump''는 ''libpcap''을 사용해 네트워크 인터페이스의 패킷을 캡처하거나 저장된 capture file을 읽는 CLI 분석 도구다. 캡처 대상을 BPF capture filter로 제한할 수 있다. ===== Installation ===== ==== Debian / Ubuntu ==== <code bash> sudo apt update sudo apt install tcpdump </code> ==== RHEL / Fedora ==== <code bash> sudo dnf install tcpdump </code> ==== macOS ==== macOS에는 ''/usr/sbin/tcpdump''가 기본 제공된다. Apple이 제공하는 버전을 먼저 사용하고 다음 명령으로 확인한다. <code bash> /usr/sbin/tcpdump --version </code> 공식 Homebrew ''tcpdump'' formula와 Windows용 ''winget'' package는 확인되지 않았다. tcpdump upstream은 Windows build에 Npcap과 Visual Studio/CMake가 필요하다고 안내한다. Windows에서 일반적인 packet capture가 목적이면 [[linux:cli:tshark:ko|TShark]] 또는 Wireshark를 고려한다. ==== Verification ==== <code bash> tcpdump --version </code> ===== Usage ===== <code bash> 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' </code> * ''<color #c3c3c3>**tcpdump**</color> <color #22b14c>[OPTIONS]</color> <color #7092be>[EXPRESSION]</color>'' <note warning> 실시간 패킷 캡처에는 보통 root 권한 또는 별도 capture capability가 필요하다. 캡처 파일에는 인증 정보, session token, 개인 정보 등 민감한 payload가 포함될 수 있으므로 필요한 인터페이스·host·port·시간만 제한해 캡처하고 접근 권한과 보관 기간을 관리한다. </note> ===== Options ===== * ''<color #22b14c>**-D**</color>'': 캡처 가능한 **인터페이스 목록**을 출력한다. * ''<color #22b14c>**-i**</color> <color #7092be>INTERFACE</color>'': 패킷을 캡처할 **인터페이스를 지정**한다. Linux의 ''any''는 모든 일반 인터페이스를 뜻한다. * ''<color #22b14c>**-c**</color> <color #7092be>COUNT</color>'': 지정한 수의 패킷을 처리한 뒤 종료한다. * ''<color #22b14c>**-n**</color>'': **주소를** **hostname으로 변환하지 않는다**. * ''<color #22b14c>**-nn**</color>'': **hostname 변환과 service name 변환을 모두 끈다.** * ''<color #22b14c>**-s**</color> <color #7092be>SNAPLEN</color>'': 각 패킷에서 캡처할 byte 수를 지정한다. ''-s 0''은 현재 버전에서 전체 패킷을 캡처한다. * ''<color #22b14c>**-w**</color> <color #7092be>FILE</color>'': raw packet을 capture file에 저장한다. * ''<color #22b14c>**-r**</color> <color #7092be>FILE</color>'': 저장된 capture file을 읽는다. * ''<color #22b14c>**-A**</color>'': **packet payload를 ASCII로 출력한다.** * ''<color #22b14c>**-X**</color>'': packet payload를 hex와 ASCII로 출력한다. * ''<color #22b14c>**-e**</color>'': link-layer header를 함께 출력한다. * ''<color #22b14c>**-q**</color>'': protocol 상세 출력을 줄인다. * ''<color #22b14c>**-v**</color>'', ''<color #22b14c>**-vv**</color>'', ''<color #22b14c>**-vvv**</color>'': 출력 상세도를 단계적으로 높인다. * ''<color #22b14c>**-Q**</color> <color #7092be>in|out|inout</color>'': 지원하는 플랫폼에서 capture 방향을 제한한다. * ''<color #22b14c>**-G**</color> <color #7092be>SECONDS</color>'': 지정한 시간마다 새 output file로 전환한다. * ''<color #22b14c>**-C**</color> <color #7092be>FILE_SIZE</color>'': file 크기가 기준에 도달하면 다음 output file로 전환한다. * ''<color #22b14c>**-W**</color> <color #7092be>FILE_COUNT</color>'': rotation에서 유지할 file 수를 제한한다. ===== Capture Filters ===== tcpdump의 마지막 ''EXPRESSION''은 pcap/BPF capture filter다. ''and'', ''or'', ''not''과 괄호로 조건을 조합할 수 있다. shell이 특수 문자를 해석하지 않도록 filter 전체를 작은따옴표로 감싸는 편이 안전하다. * ''<color #7092be>src host IP_OR_NAME</color>'': 출발지를 지정한다. * ''<color #7092be>dst host IP_OR_NAME</color>'': 목적지를 지정한다. * ''<color #7092be>host IP_OR_NAME</color>'': 출발지 또는 목적지를 지정한다. * ''<color #7092be>src port PORT</color>'': 출발지 port를 지정한다. * ''<color #7092be>dst port PORT</color>'': 목적지 port를 지정한다. * ''<color #7092be>port PORT</color>'': 출발지 또는 목적지 port를 지정한다. * ''<color #7092be>tcp</color>'', ''<color #7092be>udp</color>'', ''<color #7092be>icmp</color>'', ''<color #7092be>ip6</color>'': protocol을 지정한다. * ''<color #7092be>net NETWORK</color>'': network prefix를 지정한다. ===== Examples ===== ==== 인터페이스 확인 ==== <code bash> tcpdump -D </code> ==== 패킷 수와 조건 제한 ==== <code bash> sudo tcpdump -i eth0 -nn -c 100 'tcp port 443' sudo tcpdump -i any -nn 'host 192.0.2.10 and not port 22' </code> ==== 파일 저장과 읽기 ==== <code bash> 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 </code> ''-w''는 사람이 읽는 text가 아니라 raw packet을 저장한다. text 보고서가 필요하면 capture file을 ''-r''로 다시 읽어 표준 출력을 별도 파일로 redirect한다. ==== 방향 필터 ==== <code bash> sudo tcpdump -i enp4s0 -Q out 'dst host example.com' </code> ''-Q'' 지원 여부와 사용할 수 있는 값은 OS와 capture backend에 따라 다르다. ==== 크기와 개수를 제한한 rotation ==== <code bash> sudo tcpdump -i eth0 -nn -s 0 -C 100 -W 10 -w 'capture.pcap' </code> ===== 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에 따라 다르다. * ''any'' interface는 주로 Linux에서 제공되며 일반 physical interface와 link-layer header가 다를 수 있다. * tcpdump capture filter와 Wireshark/TShark display filter는 문법과 적용 시점이 다르다. ===== Help ===== ++++ tcpdump --help | <code text> tcpdump version 4.9.3 libpcap version 1.9.1 (with TPACKET_V3) OpenSSL 1.1.1k FIPS 25 Mar 2021 Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ] [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ] [ -Q in|out|inout ] [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ] [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ expression ] </code> ++++ ===== See Also ===== * [[linux:cli:tshark:ko|tshark]] * [[https://github.com/the-tcpdump-group/tcpdump|tcpdump upstream repository]] * [[https://www.tcpdump.org/manpages/pcap-filter.7.html|pcap-filter manual]] * [[https://www.wireshark.org/|Wireshark]] — tcpdump capture file을 GUI로 분석할 수 있다. ===== History ===== * codex:: 2026-08-11 기존 명령과 filter 기록을 보존하고 설치, option, capture file, rotation, 보안 및 문제 해결 내용을 확장했다. {{indexmenu>.#1|js}} /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/linux/cli/tcpdump/ko.txt 마지막으로 수정됨: 2026/08/11 03:56저자 writer