[每天记录一个问题,记录十年 Blog]
1、tcpdump抓包:
A. tcpdump官网:首页 |TCPDUMP & LIBPCAP
B. 官方手册:tcpdump(1) 手册页 |TCPDUMP & LIBPCAP
C. 安装tcpdump:
sudo dnf install tcpdump
tcpdump -V
2、启动tcpdump抓包:
tcpdump -i any host 10.144.74.143 and port 5060 -s 0 -w /home/user/zhuabao/jingan_20250613.pacp -v
-i any:所有网卡
host 10.144.74.143:指定主机IP
port 5060:指定端口
-s -0:完整报文抓取
-w a.pacp:抓包存为文件
-v:显示报文信息
3、tcodump命令格式:
tcpdump [选项] [协议] [方向] [类型] [过滤表达式]
tcpdump [option] [proto] [dir] [type]
主要选项
-i [接口]:指定监听的网络接口(如 eth0),默认选择首个活动接口
-c [数量]:抓取指定数量的包后停止(如 -c 100 抓100个包)
-w [文件]:将抓包数据保存到文件(如 -w capture.pcap),支持后续用 Wireshark 分析
-r [文件]:读取保存的抓包文件(如 -r capture.pcap)
-s [长度]:设置抓取每个包的字节数(-s 0 抓完整报文)
-n:禁用域名解析,直接显示 IP 地址 ;-nn 同时禁用端口解析
-e:显示数据链路层信息(如 MAC 地址)
-X:以十六进制和 ASCII 显示报文内容
-v / -vv / -vvv:递增显示更详细的报文信息(如 TTL、协议头)
对比:
无 标准 显示基本信息:时间、源/目标、端口、标志、序列号等 快速浏览流量,查看连接的基本情况
-v 详细 增加IP/TCP/UDP头部关键字段(TTL, ID, 长度,分片,选项等) 一般性网络问题排查,如分析 TTL、分片等
-vv 更详细 增加 更深层的协议解码(如SSL/TLS握手细节) 分析复杂的协议交互,如加密连接建立过程
-vvv 最详细 增加 最详尽的字段和应用数据打印 深度调试、协议分析、需要查看完整会话数据的场景
协议:
过滤表达式
协议过滤:直接指定协议名(如 tcp、udp、icmp)
地址过滤:
host [IP]:抓取与指定 IP 相关的流量(如 host 192.168.1.1)
src / dst:限定源或目的地址(如 src host 192.168.1.1)
端口过滤:
port [端口]:抓取指定端口的流量(如 port 80)
portrange [范围]:指定端口范围(如 portrange 8000-8080)
逻辑运算符:
and / or / not:组合条件(如 tcp and port 80)
():优先级分组(如 (src net 192.168.0.0/24 or dst host 10.0.0.1))
基于IP地址过滤:host
tcpdump host 192.168.10.100 #指定 host ip 进行过滤
tcpdump -i eth2 src 192.168.10.100 #根据源ip进行过滤
tcpdump -i eth2 dst 192.168.10.200 #根据目标ip进行过滤
基于网段进行过滤:net
tcpdump net 192.168.10.0/24 #ip范围是一个网段
tcpdump src net 192.168 #根据源网段进行过滤
tcpdump dst net 192.168 #根据目标网段进行过滤
基于端口进行过滤:port
tcpdump port 8088 #指定特定端口进行过滤
tcpdump src port 8088 #根据源端口进行过滤
tcpdump dst port 8088 #根据目标端口进行过滤
tcpdump port 80 or port 8088 #同时指定两个端口,简写tcpdump port 80 or 8088
基于端口段进行过滤:portrange
tcpdump portrange 8000-8080
tcpdump src portrange 8000-8080
tcpdump dst portrange 8000-8080
tcpdump tcp port http #一些常见协议的默认端口,可以直接使用协议名,而不用具体的端口号,如 http == 80,https == 443 等
基于协议进行过滤:proto
tcpdump icmp #protocol 可选值:tcp, udp, icmp, http,ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui
基本IP协议的版本进行过滤:ipv4、ipv6
ipv4:
tcpdump 'ip proto tcp' 或者 tcpdump ip proto 6 #数字 6 表示的是 tcp 在ip报文中的编号
tcpdump 'ip protochain tcp' 或者 tcpdump ip protochain 6
ipv6:
tcpdump 'ip6 proto tcp' 或者 tcpdump ip6 proto 6 #数字 6 表示的是 tcp 在ip报文中的编号
tcpdump 'ip6 protochain tcp' 或者 tcpdump ip6 protochain 6
两点需要注意:
1、跟在 proto 和 protochain 后面的如果是 tcp, udp, icmp ,那么过滤器需要用引号包含,这是因为 tcp,udp, icmp 是 tcpdump 的关键字
2、proto 后面跟的 <protocol> 的关键词是固定的,只能是 ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui 这里面的其中一个。
而 protochain 后面跟的 protocol 要求就没有那么严格,它可以是任意词,只要 tcpdump 的 IP 报文头部里的 protocol 字段为 <protocol> 就能匹配上。(猜测版)
理论上来讲,下面两种写法效果是一样的
tcpdump 'ip && tcp' 与 tcpdump 'ip proto tcp'
同样的,这两种写法也是一样的
tcpdump 'ip6 && tcp' 与 tcpdump 'ip6 proto tcp'
4、tcpdump输出:
21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [P.], seq 49:97, ack 106048, win 4723, length 48
第一列:时分秒毫秒 21:26:49.013621
第二列:网络协议 IP
第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而15605 是端口号
第四列:箭头 >, 表示数据流向
第五列:接收方的ip地址+端口号,其中 172.20.20.2 是 ip,而5920 是端口号
第六列:冒号
第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多Flags 标识符:
[S] : SYN(开始连接)
[P] : PSH(推送数据)
[F] : FIN (结束连接)
[R] : RST(重置连接)
[.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)


