tcpdump

2021-02-03, updated 2021-09-12

tcpdump能够分析网络行为,性能和应用产生或接收网络流量。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息,从而使用户能够进一步找出问题的根源。

也可以使用 tcpdump 的实现特定目的,例如在路由器和网关之间拦截并显示其他用户或计算机通信。通过cpdump分析非加密的流量,如Telnet或HTTP的数据包,查看登录的用户名、密码、网址、正在浏览的网站内容,或任何其他信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

有很多用户喜欢使用柏克莱数据包过滤器来限制 tcpdump 产生的数据包数量,这样BPF会只把“感兴趣”的数据包到上层软件,可以避免从操作系统内核向用户态复制其他数据包,降低抓包的CPU的负担以及所需的缓冲区空间,从而减少丢包率。

参数

监听指定端口的数据包

tcp

1
tcpdump tcp port 22

udp

1
tcpdump udp port 53

过滤主机

  1. 抓取所有经过enp0s3,目的或源地址是 192.168.1.101 的网络数据
1
tcpdump -i enp0s3 host 192.168.1.101 
  1. 指定源地址
1
tcpdump -i enp0s3 src host 192.168.1.101
  1. 指定目的地址
1
tcpdump -i enp0s3 dst host 192.168.1.101
  1. 截获主机192.168.1.101 和主机192.168.1.102 或192.168.1.103的通信
1
tcpdump -i enp0s3 host 192.168.1.101 and \(192.168.1.102 or 192.168.1.103 \)
  1. 如果想要获取主机192.168.1.101除了和主机192.168.1.102之外所有主机通信的ip包,使用命令:
1
tcpdump ip host 192.168.1.101 and !192.168.1.102

dhcp包抓取

1
tcpdump -i eth0 -c 8 -s 0 -w /mnt/sdcard/dhcp.pcap 'udp and port 67 and port 68' &

dhcp使用的是udp 67和68端口

常用表达式

非 : ! or “not” (without the quotes) 且 : && or “and” 或 : || or “or”

  1. 抓取目的地址是192.168.1.254或192.168.1.200端口是80的TCP数据
1
tcpdump  '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

当然上也可以像之前的加上指定网卡 -i enp0s3

1
tcpdump -i enp0s3 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
  1. 抓取目标MAC地址是00:01:02:03:04:05的ICMP数据
1
tcpdump  '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

可以加上具体网卡

  1. 抓取目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
1
tcpdump  '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
words: 935 tags: tcpdump