目录

  • 一、简介:
  • 二、安装
  • 三、语法
  • 四、开始抓包(管理员权限操作)
  • 五、抓包后使用Wireshark分析数据包
  • 六、停止抓包


一、简介:

tcpdump 是一款灵活、功能强大的抓包工具,能有效地帮助排查网络故障问题。

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

五、抓包后使用Wireshark分析数据包

tcpdump -w test.pcap抓包后,用Wireshark打开test.pcap文件分析

  • IP过滤:包括源IP或者目的IP
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
  • 协议过滤:
    tcp、udp、arp、icmp、http、smtp、ftp、dns、msnms、ip、ssl等

排除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模式过滤:
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)
  • expert.message是用来对info信息过滤,主要配合contains来使用

六、停止抓包

Ctrl+C