tcpdump 是一个强大的网络抓包工具,在分析服务之间调用时非常有用。可以将网络中传送的数据包抓取下来进行分析。tcpdump 提供灵活的抓取策略,支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来去掉不想要的信息。
一、tcpdump 命令选项
- -A 以ASCII编码打印每个报文(不包括链路层的头),这对分析网页来说很方便
- -c 最大抓取报文数
- -C 用于判断用 -w 选项将报文写入的文件的大小是否超过这个值,如果超过了就新建文件(文件名后缀是1、2、3依次增加)
- -D 列出当前主机的所有网卡编号和名称,可以用于选项 -i
- -e 打印链路层的头
- -i 监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 2.2 内核及之后的版本支持 any 网卡,用于指代任意网卡
- -l 如果没有使用 -w 选项,就可以将报文打印到 标准输出终端(此时这是默认)
- -r 读取已经抓取到的报文文件
- -S 打印 tcp 的序列号的绝对值,而不是相对值
- -w 将抓取的报文写入到文件
二、tcpdump 表达式
主要有 3 种类型的表达式:
- Type(类型)选项包括 host 、net和 port
- Direction(方向)选项包括 src 和 dst 以及它们的组合
- Proto(协议)包括 tcp 、udp 、ICMP 和 ah 等
三、高级用法
逻辑运算
- AND(and 或 &)
- OR(or 或 ||)
- EXCEPT (not 或 !)
四、tcpdump示例
指定网络接口:
tcpdump -i ens33
通过端口过滤:
tcpdump port 8082
通过IP过滤:
tcpdump host 10.44.99.77
通过网络接口&端口&IP过滤:
tcpdump -i ens33 port 8082 and host 10.44.99.77
通过源地址和目标地址进行过滤:
tcpdump src 10.44.99.77
通过子网进行过滤:
tcpdump net 10.44.99.77/32
端口范围
tcpdump portrange 21-23