用简单的话来定义tcpdump,就是:dump the traffic on a network,对网络上的数据包进行截获的包分析工具。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
1、安装tcpdump

yum install tcpdump

2、列出本机所有的网卡接口

tcpdump -D

3、捕获特定网卡的数据包

tcpdump -i eth0

4、捕获具体数量的数据包

tcpdump -c 5 -i eth0

5、捕获的数据包保存到指定的文件

tcpdump -w 0001.pcap -i eth0

6、捕获的数据包显示IP而不是域名

tcpdump -n -i eth0

7、捕获指定协议的数据包

tcpdump -i eth0 tcp

8、捕获特定端口的数据包

tcpdump -i eth0 port 22

    dst port  22为目的端口为22;src port为源接口;port两目的和源接口。

9、捕获从指定IP过来的数据包

tcpdump -i eth0 src 192.168.0.2

10、捕获去往目的IP数据包

tcpdump -i eth0 dst 50.116.66.139

11、捕获HTTP请求的URL

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

12、捕获HTTP的POST请求的密码

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

13、以ASCII码的格式打印

tcpdump -A -i eth0

14、以ASCII码和十六进制打印

tcpdump -XX -i eth0

15、读取捕获的数据包文件

tcpdump -r 0001.pcap

16、抓取本地环路数据包

tcpdump -i lo udp    // 抓取UDP数据
tcpdump -i lo udp port 1234 // 抓取端口1234的UDP数据
tcpdump -i lo port 1234  // 抓取端口1234的数据

17、抓取特定类型的数据包:

tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'

    抓取所有经过网卡1的SYN类型数据包

tcpdump -i eth1 udp dst port 53

    抓取经过网卡1的所有DNS数据包(默认端口)

18、逻辑语句过滤

tcpdump -i eth0 '(( tcp) and ((dst net 172.16) and (not dst host 192.268.1.200)))'

抓取所有经过网卡1,目的网络是172.16,但目的主机不是192.168.1.200的TCP数据

19、宿主机抓包docker实例
在宿主机上监听指定Docker 实例的网络流量,需要首先找到在宿主机上与实例配对的网卡。再使用tcpdump 命令进行监听。

(1)进入到Docker实例中。

docker exec ‐it 1a /bin/bash

(2)容器中执行查看参数的命令。

cat /sys/class/net/eth0/iflink 135

(3)退出容器,在宿主机上找到对应数字的网卡

 bridge link show
 
133: veth54e9e5c state UP @(null): <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master docker0 state forwarding priority 32 cost 2 
135: veth98165f5 state UP @(null): <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master docker0 state forwarding priority 32 cost 2
 
也可以得到网卡名称: veth98165f5 , @if134 的意思是与134号网卡通过 Veth pair 技术连通网络。

(4)对docker网卡进行抓包,并将抓包结果写入到文件中,该文件可以在Windows上的wireshark解析。

# 将抓包写入文件后,控制台上将不再显示抓包数据。 
sudo tcpdump ‐i veth98165f5 ‐w veth98165f5.pcap
 
# 读入抓包的文件并解析显示 
sudo tcpdump ‐r veth98165f5.pcap
 
 # 通过组合键,将抓包写入到文件,同时控制台显示出来。 
 # tcpdump抓包,写入标准输出;tee获取标准输出的内容,写入文件,并输出到标准 输出;tcpdump从标准输入中获取数据并解析。
sudo tcpdump ‐i veth98165f5 ‐w ‐ | tee veth98165f5.pcap | tcpdump ‐r ‐
 
 
 # 带有过滤条件的抓包
sudo tcpdump ‐i veth98165f5 port not 13506 and port not 5391 and port not 1883