Tcpdump 示例

特别实用的有关 tcpdump 的一些例子,翻译自 Tcpdump Examples

一、基础示例

1
sudo tcpdump -i eth0 -nn -s0 -v port 80
  • -i: 选择网卡
  • -nn: 不解析域名和端口
  • -s0: 捕获包大小,0 代表无限制
  • -v: 显示更多信息
  • port 80: 过滤 HTTP 端口 80 上的流量

显示 ASCII 文本

1
sudo tcpdump -A -s0 port 80

根据协议捕获

1
2
sudo tcpdump -i eth0 udp
sudo tcpdump -i eth0 proto 17

捕获目的地或来源是某个 IP 的流量

1
2
3
4
5
sudo tcpdump -i eth0 host 10.10.1.1
# 目的地是 10.10.1.20
sudo tcpdump -i eth0 dst 10.10.1.20
# 来源是 10.10.1.20
sudo tcpdump -i eth0 src 10.10.1.20

捕获结果写到某个文件中

1
sudo tcpdump -i eth0 -s0 -w test.pcap

行缓冲模式

方便使用 grep 进行过滤:

1
sudo tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'

组合

1
2
3
and or &&
or or ||
not or !

二、捕获 HTTP User Agent

1
sudo tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

三、捕获 HTTP GET 和 POST 请求包

捕获 GET 请求:

1
sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

捕获 POST 请求:

1
sudo tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

上述十六进制的数字分别代表的是 GET 和 POST 的ASCII 字符。

四、捕获 HTTP 请求 URL 包

1
sudo tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

五、捕获使用 POST 请求的 HTTP 密码

1
sudo tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

六、捕获来自服务器和客户端的 Cookies

1
sudo tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'

七、捕获所有的 ICMP 包

1
sudo tcpdump -n icmp

八、捕获不是常规 PING 类型的 ICMP 包

1
sudo tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

九、捕获 SMTP/POP3 邮件

1
sudo tcpdump -nn -l port 25 | grep -i 'MAIL FROM\|RCPT TO'

十、捕获 NTP 查询和响应

1
sudo tcpdump dst port 123

十一、捕获 SNMP 查询和响应

1
sudo tcpdump -n -s0  port 161 and udp

十二、捕获 FTP 认证和响应信息

1
sudo tcpdump -nn -v port ftp or ftp-data

十三、滚动捕获文件

1
tcpdump  -w /tmp/capture-%H.pcap -G 3600 -C 200

十四、捕获 IPV6 包

1
tcpdump -nn ip6 proto 6

十五、端口扫描

1
tcpdump -nn

十六、Example Filter Showing Nmap NSE Script Testing

1
tcpdump -nn port 80 | grep "GET /"

十七、捕获每一个非本地主机的开始和结束包

1
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'

十八、捕获 DNS 请求

1
sudo tcpdump -i wlp58s0 -s0 port 53

十九、只捕获 HTTP 包,忽略 TCP 包 (SYN/FIN/ACK)

1
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

二十、捕获然后在 Wireshark 中分析

1
ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - not port 22' | wireshark -k -i -

二十一、包最多的主机

1
sudo tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20

二十二、捕获明文密码

1
sudo tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -l -A | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '

二十三、DHCP 示例

1
sudo tcpdump -v -n port 67 or 68

推荐文章