安装
yum install tcpdump
重要参数
-
基本使用:
-
-i <interface>: 指定要监听的网络接口,默认监听第一块网卡。tcpdump -i ens33 -
-c <number>: 捕获指定数量的数据包后停止。tcpdump -i ens33 -c3 -
-C限制文件大小,单位:MB。tcpdump -i eth0 -C 5 -w mycapture当文件
mycapture达到5MB后,创建一个新文件mycapture-1、mycapture-2依次递增 -
-W限制文件的个数tcpdump -i eth0 -C 10 -W 3 -w mycapture表示当文件大小为10MB时,会创建新文件,最多创建3个文件。
-
-n: 不进行DNS反向查找,即不将IP地址转换为主机名。提高速度。 -
-nn: 除了不进行DNS查找,也不解析端口号为服务名。 -
-N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
-
-v: 显示更详细的输出信息。 -
-vv: 显示非常详细的输出信息。 -
-vvv: 显示极其详细的输出信息。 -
-l: 输出结果到标准输出,便于管道操作。 -
-e: 在输出中显示链路层头部。 -
-s <snaplen>: 设置数据包的捕获最大长度。单位:字节tcpdump -i eth0 -s 1000表示捕获1000字节以下的数据包,1000字节以上数据包无法捕获
-
-t不输出时间戳。IP 192.168.1.100.54321 > 192.168.1.1.80: Flags [P.], seq 12345, ack 67890, win 292, options [nop,nop,TS val 123456789 sec 12345], length 100 -
-tt输出时间戳,但是会省略掉毫秒部分。16:34:42 IP 192.168.1.100.54321 > 192.168.1.1.80: Flags [P.], seq 12345, ack 67890, win 292, options [nop,nop,TS val 123456789 sec 12345], length 100 -
-tttt: 时间戳显示为毫秒精度(默认),还有和第一个数据包的时间差。16:34:42.123456 0.000000 IP 192.168.1.100.54321 > 192.168.1.1.80: Flags [P.], seq 12345, ack 67890, win 292, options [nop,nop,TS val 123456789 sec 12345], length 100 -
-r从文件中读取数据tcpdump -r 文件名 -
-w把捕获到的数据包写入文件tcpdump -i ens33 -w 文件名 -
-Q限制出站还是入站,tcpdump -Q in表示入站,tcpdump -Q out表示出战。 -
-q输出信息只显示协议、源地址、目标地址以及数据包长度16:34:42.123456 IP 192.168.1.100 > 192.168.1.1: 100
-
-F <filename>: 从文件读取过滤表达式。tcpdump -i eth0 -F filters.txt -w output.pcap读取文件,过滤,并写入文件。
-
-T <type>: 尝试以特定的格式打印数据包负载。
-
过滤
net过滤
捕获所有内网的数据包:
tcpdump net 192.168.1.0/24
tcpdump src net 192.168.1.0/24
tcpdump dst net 192.168.1.0/24
等价于
tcpdump net 192.168.1.0/255.255.255.0
host过滤
tcpdump net 192.168.1.254
tcpdump src net 192.168.1.254
tcpdump dst net 192.168.1.254
端口过滤
tcpdump tcp port 8080
tcpdump src tcp port 8080
tcpdump dst tcp port 8080
范围端口
tcpdump portrange 8000-9000
tcpdump src portrange 8000-9000
tcpdump dst portrange 8000-9000
对于一些常见协议的默认端口,可以直接使用协议名
tcpdump tcp port http
tcpdump tcp port ssh
基于协议过滤
tcpdump icmp #ping 用的是icmp协议
tcpdump ip
tcpdump tcp
tcpdump udp
注意:http、https、ssh、dns这些是应用层协议,要使用端口号过滤
tcpdump port http
根据tcp包大小过滤
抓取包大小小于32bytes的数据包
tcpdump less 32
抓取包大小大于1000bytes的数据包
tcpdump greater 1000
捕获所有HTTP请求:
tcpdump -i eth0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
-
0x47455420 十六进制数 ASCII字符是“GET ”
- 0x47 十进制 71 'G'
- 0x45 十进制69 'E'
- 0x54 十进制84 'T'
- 0x20 十进制是32 ' ' (空格)
逻辑运算符
or
tcpducmp port 80 or 22
and
tcpdump tcp port 53 and udp port 53
not
tcpdump not tcp port 22