tcpdump 是一款灵活、功能强大的抓包工具,能有效地帮助排查网络故障问题。
在 Linux 中安装 tcpdump(centos)
$ sudo yum install -y tcpdump
$ which tcpdump
/usr/sbin/tcpdump
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数说明:
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件
#显示TCP包信息
tcpdcmp
#显示指定数量包
tcpdump -c 20
#精简版:显示指定数量包
tcpdump -c 10 -q
#列出可以抓包的网络接口
tcpdump -D
# any 可用于抓取所有活动的网络接口的数据包
tcpdump -i any
#抓包5个之后停止
tcpdump -i any -c 5
# 抓包5个并显示ip和端口号
tcpdump -i any -c5 -nn
#抓包后保存为Wireshark可以打开的文件,在第三方工具中分析
tcpdump -w test.pcap
tcpdump -w test.pcap抓包后,用Wireshark打开test.pcap文件分析
ip.src addr==192.168.0.208 or ip.src addr eq 192.168.0.208 显示来源IP
ip.dst addr==192.168.0.208 or ip.dst addr eq 192.168.0.208 显示目标IP
ip.src ==192.168.1.107 or ip.dst ==192.168.1.107
tcp.port eq 80 // 不管端口是来源的还是目标的都显示
tcp.port == 80
tcp.port eq 2722
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80 // 只显tcp协议的目标端口80
tcp.srcport == 80 // 只显tcp协议的来源端口80
过滤端口范围
tcp.port >= 1 and tcp.port <= 80
排除ssl包,如!ssl 或者 not ssl
udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7 指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
frame.len == 119 整个数据包长度,从eth开始到最后
http.request.method == “GET”
http.request.method == “POST”
http.request.uri == “/img/logo-edu.gif”
http contains “GET”
http contains “HTTP/1.”
// GET包包含某头字段
http.request.method == “GET” && http contains “Host: ”
http.request.method == “GET” && http contains “User-Agent: ”
// POST包包含某头字段
http.request.method == “POST” && http contains “Host: ”
http.request.method == “POST” && http contains “User-Agent: ”
// 响应包包含某头字段
http contains “HTTP/1.1 200 OK” && http contains “Content-Type: ”
http contains “HTTP/1.0 200 OK” && http contains “Content-Type: ”
连接符 and / or
表达式:
!(arp.src==192.168.1.1) and !(arp.dst.proto_ipv4==192.168.1.243)
Ctrl+C