■ 사용 예제
# 10.10.10.46에서 10.10.10.1로 향하는 25(SMTP)번 포트에 대한 트래픽을 내용까지 상세히 출력한다.
tcpdump -i eth0 -n -q -X "src host 10.10.10.46 and dst host 10.10.10.1 and port 25"
# gateway 10.10.10.17을 거치는 ftp에 관련된 패킷들을 출력
tcpdump 'gateway 10.10.10.17 and ( port ftp or ftp-data )'
# multicast 패킷들을 출력한다.
tcpdump 'ehter[0] & 1 = 0 and ip[16] >= 224'
# Echo request/reply가 아닌 ICMP 패킷들을 모두 출력한다.
tcpdump 'icmp[0] != 8 and icmp[0] != 0'
# 출발지 주소가 10.10.10.17이고 tcp port 80인 패킷
tcpdump -i ens33 src 10.10.10.17 and tcp port 22
# 목적지 주소가 10.10.10.40이고 목적지 포트가 22
tcpdump dst 10.10.10.40 and dst port 22
# 출발지 주소가 10.10.10.1이고 목적지 포트가 22 또는 3389가 아닌 것
tcpdump 'src 10.10.10.1 and (not dst port 22 or 3389)'
# SMTP / POP3 Email
tcpdump -nn -l port 25 | grep -i 'MAIL FROM\|RCPT TO'
# Troubleshooting NTP Query and Response
tcpdump dst port 123
# FTP Credentials and Commands
tcpdump -nn -v port ftp or ftp-data
# Extract HTTP User Agents
tcpdump -nn -A -s1500 -l | grep "User-Agent:"
# HTTP Get
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
# HTTP Post
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
# Extract HTTP Request URL's
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
# Cookies from Server and from Client
tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'
■ tcpdump options
-a : Network & Broadcast 주소들을 이름들로 바꾼다.
-c Number : 제시된 수의 패킷을 받은 후 종료한다.
-d : comile된 packet-matching code를 사람이 읽을 수 있도록 바꾸어 표준 출력으로 출력하고, 종료한다.
-dd : packet-matching code를 C program의 일부로 출력한다.
-ddd : packet-matching code를 숫자로 출력한다.
-e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.
-f : 외부의 internet address를 가급적 심볼로 출력한다. (Sun의 yp server와의 사용은 가급적 피하자)
-F file : filter 표현의 입력으로 파일을 받아들인다. 커맨드라인에 주어진 추가의 표현들은 모두 무시된다.
-i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지저되지 않으면 시스템의 인터페이스 리스트를 뒤져서 가장 낮은 번호를 가진 인터페이스를 선택한다. (이 때 loopback은 제외된다).
-l : 표준 출력으로 나가는 데이터들을 line buffering한다. 다른 프로그램에서 tcpdump로부터 데이터를 받고자 할 때, 유용하다.
-n : 모든 주소들을 번역하지 않는다(port,host address 등등)
-N : 호스트 이름을 출력할 때, 도메인을 찍지 않는다.
-O : packet-matching code optimizer를 실행하지 않는다. 이 옵션은 optimizer에 있는 버그를 찾을 때나 쓰인다.
-p : 인터페이스를 promiscuous mode로 두지 않는다.
-q : 프로토콜에 대한 정보를 덜 출력한다. 따라서 출력되는 라인이 좀 더 짧아진다.
-r file : 패킷들을 '-w'옵션으로 만들어진 파일로 부터 읽어 들인다. 파일에 "-" 가 사용되면 표준 입력을 통해서 받아들인다.
-s length: 패킷들로부터 추출하는 샘플을 default값인 68Byte외의 값으로 설정할 때 사용한다(SunOS의 NIT에서는 최소가 96Byte이다). 68Byte는 IP,ICMP, TCP, UDP등에 적절한 값이지만 Name Server나 NFS 패킷들의 경우에는 프로토콜의 정보들을 Truncation할 우려가 있다. 이 옵션을 수정할 때는 신중해야만 한다. 이유는 샘플 사이즈를 크게 잡으면 곧 패킷 하나하나를 처리하는데 시간이 더 걸릴 뿐만아니라 패킷 버퍼의 사이즈도 자연히 작아지게 되어 손실되는 패킷들이 발생할 수 있기 때문이다. 또, 작게 잡으면 그만큼의 정보를 잃게되는 것이다. 따라서 가급적 캡춰하고자 하는 프로토콜의 헤더 사이즈에 가깝게 잡아주어야 한다.
-T type : 조건식에 의해 선택된 패킷들을 명시된 형식으로 표시한다. type에는 다음과 같은 것들이 올 수 있다. rpc(Remote Procedure Call), rtp(Real-Time Applications protocol), rtcp(Real-Time Application control protocal), vat(Visual Audio Tool), wb(distributed White Board)
-S : TCP sequence번호를 상대적인 번호가 아닌 절대적인 번호로 출력한다.
-t : 출력되는 각각의 라인에 시간을 출력하지 않는다.
-tt : 출력되는 각각의 라인에 형식이 없는 시간들을 출력한다.
-v : 좀 더 많은 정보들을 출력한다.
-vv : '-v' 보다 좀 더 많은 정보들을 출력한다.
-w : 캡춰한 패킷들을 분석해서 출력하는 대신에 그대로 파일에 저장한다.
-x : 각각의 패킷을 헥사코드로 출력한다.