Hello! 欢迎来到盒子萌!

wireshark抓包


avatar
dspirit 2025-01-16 41

[每天记录一个问题,记录十年 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)

参考:全网最详细的 tcpdump 使用指南 – 王一白 – 博客园

相关阅读