우분투 tcpdump 실전 패킷 캡처 및 네트워크 트래픽 분석 가이드

개요

리눅스 환경에서 네트워크 트러블슈팅과 패킷 분석을 위해 필수적으로 사용되는 tcpdump 명령어의 핵심 사용법을 실습을 통해 익힙니다. 복잡한 man 페이지를 읽는 대신 기본 인터페이스 조회부터 실시간 트래픽 필터링 및 PCAP 파일 저장·분석까지 단계별 실무 예제로 학습합니다.

tcpdump 설치 및 사용 가능한 네트워크 인터페이스 확인

네트워크 패킷 캡처 및 트래픽 분석 실습을 위해 필요한 tcpdump와 curl 패키지를 설치합니다.

apt-get update -qq && apt-get install -y tcpdump curl

tcpdump --version 명령어를 실행하여 설치된 tcpdump 및 패킷 캡처 라이브러리인 libpcap의 버전을 확인합니다.
tcpdump는 네트워크 인터페이스를 통과하는 패킷을 실시간으로 캡처하고 프로토콜별 상세 트래픽을 분석하는 강력한 커맨드라인 도구입니다.
⚙️ [주요 옵션]

-i : 패킷을 캡처할 네트워크 인터페이스를 지정합니다.
-n : 호스트 주소를 도메인 이름 대신 IP 주소로 변환하지 않고 그대로 표시합니다.
-nn : 호스트 IP 주소뿐만 아니라 포트 번호도 서비스 이름 대신 숫자로 표시합니다.
-c : 지정한 개수만큼 패킷을 캡처한 후 자동으로 프로그램을 종료합니다.
-v : TTL, ID, 프로토콜 헤더 등 패킷 상세 정보를 자세히 출력하며, -vv나 -vvv로 상세 수준을 높일 수 있습니다.
-w : 캡처한 원시 패킷 데이터를 Wireshark 등에서 열 수 있는 pcap 파일로 저장합니다.
-r : 파일로 저장된 pcap 패킷 캡처 데이터를 읽어 화면에 출력합니다.
-A : 패킷의 페이로드 내용을 읽기 쉬운 ASCII 텍스트 형태로 출력합니다.
-X : 패킷 헤더와 페이로드를 16진수(Hex)와 ASCII 형태로 동시에 출력합니다.
-D : 캡처 가능한 시스템 내 모든 네트워크 인터페이스 목록을 확인합니다.

tcpdump –version

tcpdump -D 명령어는 시스템에서 패킷을 캡처할 수 있는 모든 네트워크 인터페이스 목록을 번호와 상태 정보와 함께 출력합니다.
결과 목록에서 실제 외부 통신을 담당하는 eth0, 모든 인터페이스를 동시에 감시할 수 있는 가상 장치인 any, 로컬 루프백 인터페이스 lo 등을 확인하여 향후 패킷 캡처 시 -i 옵션의 인자값으로 활용할 수 있습니다.

tcpdump -D

로컬 루프백 인터페이스 패킷 캡처 기본 실습

로컬 루프백 패킷 캡처 테스트에 필요한 ICMP 트래픽을 생성하기 위해 ping -c 4 127.0.0.1 > /dev/null 2>&1 & 명령어를 백그라운드로 실행합니다.

ping -c 4 127.0.0.1 > /dev/null 2>&1 &

tcpdump -i lo -c 4 -n 명령어는 로컬 루프백 인터페이스(lo)를 지정하여 도메인 이름 변환 없이 IP 주소 형태(-n)로 4개의 패킷(-c 4)을 캡처합니다.
실행 결과에서 127.0.0.1 상호 간에 송수신된 ICMP echo request 및 reply 패킷 4건이 타임스탬프, 시퀀스 번호, 패킷 길이 정보와 함께 정상적으로 수집된 것을 확인할 수 있습니다.

tcpdump -i lo -c 4 -n

프로토콜 및 포트 기반 실시간 트래픽 필터링

HTTPS 패킷 캡처 실습을 위한 443번 포트 트래픽을 발생시키기 위해 curl -s https://example.com > /dev/null 2>&1 & 명령어를 백그라운드로 실행합니다.

curl -s https://example.com > /dev/null 2>&1 &

tcpdump -i any -c 4 -nn 'tcp port 443' 명령어는 모든 네트워크 인터페이스(-i any)에서 도메인과 포트 번호를 숫자로 유지한 채(-nn) 443번 포트의 TCP 트래픽('tcp port 443')만 4개(-c 4) 캡처합니다.
실행 결과에서 외부 웹 서버(172.66.147.243.443)와 로컬 호스트(172.18.0.2) 간에 오고 간 HTTPS 통신 패킷의 TCP 플래그, 시퀀스 및 확인 응답(ACK) 번호, 데이터 길이가 선별적으로 수집된 것을 확인할 수 있습니다.

tcpdump -i any -c 4 -nn ’tcp port 443’

ICMP 트래픽 필터링 실습에 필요한 네트워크 패킷을 생성하기 위해 ping -c 2 8.8.8.8 > /dev/null 2>&1 & 명령어를 백그라운드로 실행합니다.

ping -c 2 8.8.8.8 > /dev/null 2>&1 &

tcpdump -i any -c 2 -n 'icmp' 명령어는 모든 네트워크 인터페이스(-i any)를 대상으로 도메인 변환 없이(-n) ICMP 프로토콜 패킷('icmp')만 2개(-c 2) 선별하여 캡처합니다.
실행 결과에서 로컬 시스템(172.18.0.2)이 외부 DNS 서버(8.8.8.8)와 주고받은 ICMP echo request 및 reply 패킷이 식별 번호(id), 시퀀스 번호(seq), 패킷 길이 정보와 함께 정상적으로 수집된 것을 확인할 수 있습니다.

tcpdump -i any -c 2 -n ‘icmp’

패킷 덤프 파일(PCAP) 저장 및 상세 패킷 내용 분석

패킷 덤프 저장 실습에 필요한 네트워크 트래픽을 생성하기 위해 ping -c 3 127.0.0.1 > /dev/null 2>&1 & 명령어를 백그라운드로 실행합니다.

ping -c 3 127.0.0.1 > /dev/null 2>&1 &

tcpdump -i lo -c 3 -w /tmp/traffic_sample.pcap 명령어는 로컬 루프백 인터페이스(lo)에서 3개의 패킷(-c 3)을 캡처하여 지정한 파일(/tmp/traffic_sample.pcap)에 원시 pcap 형식으로 저장합니다.
터미널 화면에 패킷 내용을 직접 출력하지 않고 바이너리 파일로 기록하므로 장기 트래픽 보관이나 Wireshark 등 외부 분석 도구와의 연계에 유용합니다.

tcpdump -i lo -c 3 -w /tmp/traffic_sample.pcap

tcpdump -r /tmp/traffic_sample.pcap -n -X 명령어는 저장된 덤프 파일(/tmp/traffic_sample.pcap)을 읽어와(-r) 도메인 변환 없이(-n) 패킷 헤더와 페이로드를 16진수 및 ASCII 텍스트 형태(-X)로 함께 출력합니다.
실행 결과에서 각 ICMP 패킷의 헤더 정보뿐만 아니라 페이로드 데이터가 16진수 바이트와 문자 형태로 나란히 표시되어 전송된 실제 데이터 내용을 정밀하게 분석할 수 있습니다.

tcpdump -r /tmp/traffic_sample.pcap -n -X

패킷 분석 실습을 마친 후 생성된 임시 캡처 파일을 시스템에서 삭제하기 위해 rm -f /tmp/traffic_sample.pcap 명령어를 실행합니다.

rm -f /tmp/traffic_sample.pcap

지금까지 우분투 환경에서 tcpdump를 활용한 실전 패킷 캡처 및 네트워크 트래픽 분석 방법을 간단하게 살펴보았습니다.
알려드린 주요 옵션과 필터링 규칙을 잘 활용하셔서 네트워크 문제 해결과 트러블슈팅에 유용하게 적용해 보시기 바랍니다.