โ† All cheat sheets

tcpdump

Authorized use only. Offensive reference for systems you own or are explicitly permitted to test. You are responsible for staying within the law.

BASIC USAGE#

tcpdump                          # Capture on default interface
tcpdump -i eth0                  # Capture on specific interface
tcpdump -i any                   # Capture on all interfaces
tcpdump -D                       # List available interfaces
tcpdump -c 100                   # Capture 100 packets
tcpdump -n                       # Don't resolve hostnames
tcpdump -nn                      # Don't resolve hostnames or ports
tcpdump -v                       # Verbose output
tcpdump -vv                      # More verbose
tcpdump -vvv                     # Maximum verbosity

WRITE/READ FILES#

tcpdump -w capture.pcap          # Write to file
tcpdump -r capture.pcap          # Read from file
tcpdump -w capture.pcap -G 3600  # Rotate file every hour
tcpdump -w capture.pcap -C 100   # Rotate file every 100MB
tcpdump -w 'capture_%Y%m%d.pcap' # Use date in filename

OUTPUT OPTIONS#

tcpdump -A                       # ASCII output
tcpdump -X                       # Hex and ASCII output
tcpdump -XX                      # Hex/ASCII with Ethernet header
tcpdump -q                       # Quick/quiet output
tcpdump -t                       # No timestamp
tcpdump -tt                      # Unix timestamp
tcpdump -ttt                     # Delta timestamp
tcpdump -tttt                    # Date and time

FILTERING BY HOST#

tcpdump host 192.168.1.1
tcpdump src host 192.168.1.1
tcpdump dst host 192.168.1.1
tcpdump host 192.168.1.1 or host 192.168.1.2
tcpdump not host 192.168.1.1

# By network
tcpdump net 192.168.1.0/24
tcpdump src net 192.168.1.0/24
tcpdump dst net 10.0.0.0/8

FILTERING BY PORT#

tcpdump port 80
tcpdump src port 80
tcpdump dst port 80
tcpdump port 80 or port 443
tcpdump portrange 1-1024
tcpdump not port 22

# Named ports
tcpdump port http
tcpdump port https
tcpdump port ssh
tcpdump port dns
tcpdump port ftp

FILTERING BY PROTOCOL#

tcpdump tcp
tcpdump udp
tcpdump icmp
tcpdump ip
tcpdump ip6
tcpdump arp

# Protocol and port
tcpdump tcp port 80
tcpdump udp port 53

TCP FLAGS#

tcpdump 'tcp[tcpflags] & tcp-syn != 0'     # SYN packets
tcpdump 'tcp[tcpflags] & tcp-ack != 0'     # ACK packets
tcpdump 'tcp[tcpflags] & tcp-fin != 0'     # FIN packets
tcpdump 'tcp[tcpflags] & tcp-rst != 0'     # RST packets
tcpdump 'tcp[tcpflags] & tcp-push != 0'    # PSH packets
tcpdump 'tcp[tcpflags] == tcp-syn'         # Only SYN
tcpdump 'tcp[tcpflags] == tcp-syn|tcp-ack' # SYN-ACK

# Three-way handshake
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'

COMPLEX FILTERS#

# HTTP traffic
tcpdump -s0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

# HTTP GET requests
tcpdump -s0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

# HTTP POST requests
tcpdump -s0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

# DNS queries
tcpdump -vvv -s0 port 53

# SMTP
tcpdump tcp port 25

# SSH connections
tcpdump 'tcp port 22 and tcp[tcpflags] & tcp-syn != 0'

PACKET SIZE#

tcpdump -s 0                     # Capture full packets
tcpdump -s 96                    # Capture first 96 bytes
tcpdump less 64                  # Packets smaller than 64 bytes
tcpdump greater 256              # Packets larger than 256 bytes

LOGICAL OPERATORS#

tcpdump host 10.0.0.1 and port 80
tcpdump host 10.0.0.1 or host 10.0.0.2
tcpdump not port 22
tcpdump host 10.0.0.1 and \(port 80 or port 443\)
tcpdump 'host 10.0.0.1 and (port 80 or port 443)'

USEFUL EXAMPLES#

# Capture HTTP traffic
tcpdump -i eth0 -nn -s0 -A tcp port 80

# Capture HTTPS handshakes
tcpdump -i eth0 -nn tcp port 443 and 'tcp[tcpflags] & tcp-syn != 0'

# Capture DNS traffic
tcpdump -i eth0 -nn port 53

# Capture traffic to/from specific host
tcpdump -i eth0 -nn host 192.168.1.100

# Capture all non-SSH traffic
tcpdump -i eth0 -nn not port 22

# Capture ICMP (ping)
tcpdump -i eth0 -nn icmp

# Capture traffic on specific subnet
tcpdump -i eth0 -nn net 192.168.1.0/24

# Capture ARP
tcpdump -i eth0 -nn arp

# Capture DHCP
tcpdump -i eth0 -nn port 67 or port 68

# Top talkers (with post-processing)
tcpdump -nn -c 1000 | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn | head

# Capture SYN flood
tcpdump 'tcp[tcpflags] == tcp-syn'

# Find SSH brute force
tcpdump 'tcp port 22 and tcp[tcpflags] & tcp-syn != 0' -c 1000

# Capture passwords (unencrypted)
tcpdump -A -i eth0 'port http or port ftp or port smtp or port pop3 or port imap'

SECURITY ANALYSIS#

# Detect port scanning
tcpdump -i eth0 'tcp[tcpflags] == tcp-syn' and not src host <your-ip>

# Detect ping sweep
tcpdump -i eth0 icmp[icmptype] == 8

# Capture all traffic from suspicious host
tcpdump -i eth0 -w suspicious.pcap host <suspicious-ip>

# DNS exfiltration detection
tcpdump -i eth0 'udp port 53 and udp[10] & 0x80 = 0' -vv

OUTPUT PARSING#

# Extract source IPs
tcpdump -nn -r capture.pcap | awk '{print $3}' | cut -d. -f1-4 | sort -u

# Extract destination IPs
tcpdump -nn -r capture.pcap | awk '{print $5}' | cut -d. -f1-4 | sort -u

# Count packets per IP
tcpdump -nn -r capture.pcap | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn

# Extract HTTP hosts
tcpdump -nn -A -r capture.pcap 'tcp port 80' | grep -oE 'Host: [^ ]+' | sort -u

PERFORMANCE#

# Buffer size
tcpdump -B 4096                  # Set buffer size to 4MB

# Kernel filter (faster)
tcpdump -d filter                # Show compiled filter

# Non-promiscuous mode
tcpdump -p                       # Don't put interface in promisc mode

BEST PRACTICES#

- Always use -nn to avoid DNS lookups
- Use -s0 to capture full packets when needed
- Write to pcap for later analysis
- Use specific filters to reduce capture size
- Be careful with -A on production systems
- Consider disk space when capturing long-term
- Use -c to limit capture size

COMPARISON: TCPDUMP VS TSHARK#

tcpdump    - Lightweight, available everywhere
tshark     - Wireshark CLI, better dissection
Both can write pcap files for Wireshark analysis

COMMON ISSUES#

# Permission denied
sudo tcpdump ...

# Interface not found
tcpdump -D                       # List interfaces
ip link show                     # Check interface names

# Dropped packets
tcpdump -i eth0 ... 2>&1 | tail  # Check stats
tcpdump -B 8192 ...              # Increase buffer