Linux 追踪 tcp包 它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump 则只有命令行。 可以用wireshark 读取tcpdump 生成的pcap文件,用wireshark的图形化界面分析tcpdump 结果数据。
原文: https://www.cnblogs.com/wongbingming/archive/2020/06/30/13212306.html
tcpdump host xxx
输出内容结构
下面以抓取的一个 tcp 包为例来看一下
18:37:30.127885 IP iZm5e23n3ueobwkjtfartxZ.51964 > 118.190.59.105.8090: Flags [.], ack 1725, win 260, options [nop,nop,TS val 1298055185 ecr 1298055185], length 0
- 第一列:时分秒毫秒 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 标识符
使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:
- [S] : SYN(开始连接)
- [P] : PSH(推送数据)
- [F] : FIN (结束连接)
- [R] : RST(重置连接)
- [.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)
常规过滤规则
基于IP地址过滤:host
使用 host 就可以指定 host ip 进行过滤
$ tcpdump host 192.168.10.100
数据包的 ip 可以再细分为源ip和目标ip两种
# 根据源ip进行过滤$ tcpdump -i eth2 src 192.168.10.100# 根据目标ip进行过滤$ tcpdump -i eth2 dst 192.168.10.200
基于网段进行过滤:net
若你的ip范围是一个网段,可以直接这样指定
tcpdump net 192.168.10.0/24
网段同样可以再细分为源网段和目标网段
# 根据源网段进行过滤$ tcpdump src net 192.168# 根据目标网段进行过滤$ tcpdump dst net 192.168
基于端口进行过滤:port
使用 port 就可以指定特定端口进行过滤
tcpdump port 8088
端口同样可以再细分为源端口,目标端口
# 根据源端口进行过滤$ tcpdump src port 8088# 根据目标端口进行过滤$ tcpdump dst port 8088
如果你想要同时指定两个端口你可以这样写
tcpdump port 80 or 8088
如果你的想抓取的不再是一两个端口,而是一个范围,一个一个指定就非常麻烦了,此时你可以这样指定一个端口段。
$ tcpdump portrange 8000-8080$ tcpdump src portrange 8000-8080$ tcpdump dst portrange 8000-8080
对于一些常见协议的默认端口,我们还可以直接使用协议名,而不用具体的端口号
比如 http == 80,https == 443 等
tcpdump tcp port http
