Observe / Harden · Network capture

tcpdump: 캡처 범위와 pcap 재검토

패킷을 보았다는 사실과 통신 전체를 확인했다는 결론은 다릅니다. 관측 인터페이스, 선택한 필터, 기록 길이와 시간을 함께 남깁니다.

인터페이스와 질문을 먼저 고릅니다

자신이 관리하거나 캡처 권한을 받은 환경에서만 사용합니다. 인터페이스 이름, 대상 주소, 문제 발생 시각과 시간대를 적습니다. 아래 enp1s0과 192.0.2.10은 교체할 예시이며, 후자는 문서용 주소입니다. 파일 이름도 기존 자료를 덮어쓰지 않을 새 이름을 사용합니다.

관측 범위는 단계마다 좁아집니다
1. 관측 지점선택한 인터페이스에 도달한 트래픽
2. 캡처 필터주소·프로토콜·조건에 맞는 패킷
3. pcap 재검토저장된 범위 안에서 다시 읽기

저장하지 않은 패킷이나 잘린 바이트는 읽기 필터를 바꿔도 복원되지 않습니다.

인터페이스를 확인하고 작게 시작합니다

sudo tcpdump -D
sudo tcpdump -i enp1s0 -nn -c 20 -- 'ip and tcp port 443'

-D로 캡처 가능한 인터페이스를 확인합니다. -nn은 주소·서비스 이름 변환을 피하고, -c 20은 조건에 맞춰 처리한 패킷 수를 제한합니다. 20초 제한이 아닙니다. 일치하는 패킷이 없으면 계속 기다릴 수 있으므로 정한 관측 시간이 끝나면 Ctrl+C로 종료합니다.

sudo가 필요한지는 시스템의 캡처 권한 설정에 따라 다릅니다. 편의상 영구 권한을 넓히지 않습니다. any도 전 세계 트래픽을 보는 기능이 아니며, 개별 인터페이스 캡처와 링크 계층 형식·관측 범위가 같다고 가정하지 않습니다. 옵션은 설치 버전의 man tcpdump와 tcpdump 매뉴얼을 대조합니다.

필터는 질문이지 해석 옵션이 아닙니다

sudo tcpdump -i enp1s0 -nn -c 100 -- 'ip and host 192.0.2.10 and (tcp port 80 or tcp port 443)'
sudo tcpdump -i enp1s0 -nn -c 20 -- 'ip and tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'

첫 식은 해당 IPv4 주소와 TCP 80/443 포트를 함께 제한합니다. 두 번째는 SYN=1, ACK=0인 패킷을 선택하며, 다른 플래그가 모두 0이라는 뜻은 아닙니다. 이것만으로 연결 성공이나 정상 패킷을 증명하지 않습니다.

여기서는 IPv4로 범위를 명시했습니다. tcp[tcpflags] 같은 데이터 접근식을 IPv6에도 그대로 적용하지 않습니다. IPv6 확장 헤더와 캡처 링크 형식은 별도로 확인합니다. -T는 선택 필터가 아니라 이미 선택된 패킷의 해석 유형을 강제합니다. 괄호·비트 연산은 셸이 아닌 필터로 전달되도록 전체 식을 작은따옴표로 감쌉니다. pcap-filter의 식과 데이터 접근 제한

저장 파일을 다시 읽습니다

sudo tcpdump -i enp1s0 -nn -c 100 -w trace.pcap -- 'ip and host 192.0.2.10'
tcpdump -nn -tttt -r trace.pcap -- 'ip and tcp port 443'

-w는 화면 문장이 아닌 패킷 데이터를 저장하고, -r은 파일을 읽습니다. -tttt는 날짜를 포함한 시각 표시입니다. 재검토는 새 캡처가 아니며, 읽기 권한이 있는 파일을 여는 데 캡처용 관리자 권한을 붙일 필요는 없습니다.

한 패킷에서 저장할 길이를 -s로 줄이면 필요한 헤더나 본문도 잘릴 수 있습니다. 짧은 snaplen은 익명화를 보장하지 않습니다. pcap에는 주소뿐 아니라 비밀이 포함될 수 있으므로 접근·보관·공유 범위를 제한하고 원본과 분석용 사본을 구분합니다. -A로 ASCII를 표시해도 TLS 암호문이 복호화되는 것은 아닙니다.

출력이 없다는 결론의 범위를 적습니다

“이 시간, 이 인터페이스, 이 필터에서 관측하지 못했다”와 “패킷이 없었다”를 구별합니다. 주소·경로·프로토콜이 예상과 다르거나, 캡처가 늦게 시작됐거나, 캡처 과정에서 누락됐을 수 있습니다. 종료 시 통계도 함께 기록하며 캡처 메커니즘의 drop과 실제 링크에서의 손실을 동일시하지 않습니다.

수신 이후의 커널 흐름은 Ethernet DMA/NAPI, 사용자 공간의 연결 객체는 socket 수명, 애플리케이션 메시지 경계는 TCP framing과 backpressure에서 이어집니다.

출처와 검증 범위

출발 자료는 Hacking Articles의 tcpdump 자료입니다. 첨부의 비표준 대시, 옵션명과 플래그 설명을 그대로 복사하지 않고 위 tcpdump·pcap-filter 매뉴얼에 맞춰 목적별 예제로 구성했습니다. 원문 PDF와 터미널 화면은 재게시하지 않았습니다.

이 글의 명령은 매뉴얼과 대조한 예제이며 이 작업 환경에서 Linux 캡처 실행은 검증하지 않았습니다. 실제 네트워크를 캡처하거나 예시 출력값을 실측 결과로 만들지 않았습니다. 설치 버전과 승인된 시험 환경에서 필터와 결과를 확인해야 합니다.