1. 주요 옵션 설명
-A: ASCII 형식으로 패킷 출력, 링크 계층 헤더는 최소화됨.<br>
-c: 지정된 수의 패킷을 수집한 후 종료.<br>
-C: 파일 크기가 지정된 크기(메가바이트 단위)를 초과하면 기존 파일 닫고 새 파일 생성.<br>
-d: 일치하는 패킷에 대한 코드를 사람이 이해할 수 있는 어셈블리 형식으로 출력.<br>
-dd: 일치하는 패킷에 대한 코드를 C 언어 구문 형태로 출력.<br>
-ddd: 일치하는 패킷에 대한 코드를 10진수로 출력.<br>
-D: 시스템에서 사용 가능한 모든 네트워크 인터페이스 목록 출력.<br>
-e: 출력 라인에 데이터링크 계층 헤더 정보 포함.<br>
-E: IPsec ESP 패킷을 암호화 해제 (spi@ipaddr algo:secret 형식).<br>
-f: 외부 인터넷 주소를 숫자 형식으로 표시.<br>
-F: 지정된 파일에서 필터 표현식을 읽고 명령줄의 표현식 무시.<br>
-i: 감시할 네트워크 인터페이스 지정.<br>
-l: 표준 출력을 버퍼링된 줄 단위로 변경하여 파일로 리다이렉션 가능.<br>
-L: 인터페이스에서 사용 가능한 데이터링크 유형 목록 출력.<br>
-m: MIB 모듈 정의를 파일로부터 로드 (복수 가능).<br>
-M: TCP-MD5 옵션이 있을 경우 공유 키를 사용해 검증.<br>
-b: 데이터링크 계층 프로토콜 선택 (ip, arp, rarp, ipx 등).<br>
-n: 네트워크 주소를 이름으로 변환하지 않음.<br>
-nn: 포트 이름을 변환하지 않음.<br>
-N: 호스트명에서 도메인 부분 생략.<br>
-t: 각 라인에 시간 스탬프 미출력.<br>
-O: 패킷 매칭 코드 최적화 비활성화.<br>
-P: 네트워크 인터페이스를 믹스드 모드로 설정하지 않음.<br>
-q: 간결한 출력, 적은 양의 프로토콜 정보만 표시.<br>
-r: 지정된 파일에서 패킷 읽기 (w 옵션으로 저장된 파일).<br>
-S: TCP 시퀀스 번호를 절대값으로 출력.<br>
-s: 패킷의 처음부터 지정된 길이만큼만 읽음 (기본 68바이트).<br>
-T: 수신된 패킷을 특정 프로토콜 타입으로 해석 (rpc, snmp 등).<br>
-tt: 비포맷된 시간 스탬프 출력.<br>
-ttt: 현재 라인과 이전 라인 사이의 시간 차이 출력.<br>
-tttt: date 명령어의 기본 형식으로 시간 스탬프 출력.<br>
-u: NFS 핸들 출력 (디코딩되지 않은 상태).<br>
-v: 약간 더 상세한 정보 출력 (예: TTL, 서비스 유형).<br>
-vv: 자세한 패킷 정보 출력.<br>
-w: 패킷을 분석하지 않고 파일에 직접 쓰기.
2. 필터 표현식 키워드
타입 키워드
host: 특정 호스트 (예: host 210.27.48.2)<br>
net: 특정 네트워크 (예: net 202.0.0.0)<br>
port: 특정 포트 (예: port 23)
방향 키워드
src: 소스 주소 (예: src 210.27.48.2)<br>
dst: 목적지 주소 (예: dst net 202.0.0.0)<br>
src or dst (기본값)<br>
src and dst
프로토콜 키워드 (기본값: 모든 프로토콜)
fddi<br>
ip<br>
arp<br>
rarp<br>
tcp<br>
udp
기타 키워드
gateway<br>
broadcast<br>
less<br>
greater
연산자
논리 부정: ! 또는 not<br>
논리 곱: && 또는 and<br>
논리 합: || 또는 or
3. 필터 표현식 요소
dst host <주소>: IPv4/IPv6 패킷의 목적지가 <주소>일 때 참.<br>
src host <주소>: 패킷의 원본이 <주소>일 때 참.<br>
host <주소>: 원본 또는 목적지가 <주소>일 때 참.<br>
ether dst <주소>: 이더넷 목적지 주소가 <주소>일 때 참.<br>
ether src <주소>: 이더넷 원본 주소가 <주소>일 때 참.<br>
ether host <주소>: 이더넷 원본 또는 목적지 주소가 <주소>일 때 참.<br>
gateway <주소>: 게이트웨이 주소가 <주소>일 때 참 (이더넷 주소 기반).<br>
dst net <네트워크>: 목적지 네트워크가 <네트워크>일 때 참.<br>
src net <네트워크>: 원본 네트워크가 <네트워크>일 때 참.<br>
net <네트워크>: 원본 또는 목적지 네트워크가 <네트워크>일 때 참.<br>
net <네트워크> mask <마스크>: 네트워크 마스크와 일치할 때 참.<br>
net <네트워크>/<길이>: 네트워크 접두사 길이가 <길이>일 때 참.<br>
dst port <포트>: 목적지 포트가 <포트>일 때 참.<br>
src port <포트>: 원본 포트가 <포트>일 때 참.<br>
port <포트>: 원본 또는 목적지 포트가 <포트>일 때 참.<br>
dst portrange <시작-끝>: 목적지 포트 범위 내일 때 참.<br>
src portrange <시작-끝>: 원본 포트 범위 내일 때 참.<br>
portrange <시작-끝>: 원본 또는 목적지 포트 범위 내일 때 참.<br>
ip proto <프로토콜>: IPv4 패킷의 프로토콜이 <프로토콜>일 때 참.<br>
ip6 proto <프로토콜>: IPv6 패킷의 프로토콜이 <프로토콜>일 때 참.<br>
ip6 protochain <프로토콜>: IPv6 패킷의 프로토콜 체인에 <프로토콜> 포함.<br>
ip protochain <프로토콜>: IPv4 패킷의 프로토콜 체인에 <프로토콜> 포함.<br>
ether broadcast: 이더넷 브로드캐스트 패킷일 때 참.<br>
ip broadcast: IPv4 브로드캐스트 패킷일 때 참.<br>
ether multicast: 이더넷 멀티캐스트 패킷일 때 참.<br>
ip multicast: IPv4 멀티캐스트 패킷일 때 참.<br>
ip6 multicast: IPv6 멀티캐스트 패킷일 때 참.<br>
ether proto <프로토콜>: 이더넷 프로토콜이 <프로토콜>일 때 참.<br>
vlan [ID]: IEEE 802.1Q VLAN 패킷일 때 참.<br>
mpls [레이블]: MPLS 패킷일 때 참.<br>
pppoed: PPPoE Discovery 패킷일 때 참.<br>
pppoes: PPPoE Session 패킷일 때 참.<br>
l1, l2, iih, lsp, snp, csnp, psnp: IS-IS PDU 타입.<br>
vpi <번호>, vci <번호>: ATM VPI/VCI 값 확인.<br>
llc: ATM LLC 헤더 포함 패킷.<br>
oamf4s, oamf4e, oamf4, oam: ATM OAM F4 신호 패킷.<br>
metac, bcc, sc, ilmic, connectmsg, metaconnect: ATM 특수 신호 패킷.<br>
expr relop expr: 연산식 비교 (>, <, <=, =, !=).
4. 실용적인 예제
# eth1 인터페이스에서 패킷 감시
tcpdump -i eth1
# 특정 호스트의 통신 패킷
tcpdump host sundown
tcpdump host 210.27.48.1
tcpdump host helios and (hot or ace)
# 특정 네트워크 패킷
tcpdump net ucb-ether
tcpdump 'gateway snup and (port ftp or ftp-data)'
tcpdump 'ip and not net localnet'
# 특정 프로토콜 및 포트
tcpdump tcp port 23 and host 210.27.48.1
tcpdump udp port 123
# 조건 복합 필터
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
tcpdump 'gateway snup and ip[2:2] > 576'
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
# 파일로 저장 및 분석
tcpdump -i eth1 -t -s 0 -c 100 -w ./target.cap \
'tcp and dst port ! 22 and src net 192.168.1.0/24'
tcpdump -i any host 10.240.121.45 and port 6379 \
-s 120 -G 1200 -w host_%Y_%m_%d_%H_%M_%S.pcap &
5. tcpdump vs Wireshark
Linux에서 패킷을 캡처하고, Windows에서 Wireshark로 분석하는 조합은 매우 효과적입니다. tcpdump는 명령행 기반으로 고성능 캡처가 가능하며, Wireshark는 그 결과물을 시각적으로 분석할 수 있게 합니다.