Linux 追踪 tcp包 它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump 则只有命令行。 可以用wireshark 读取tcpdump 生成的pcap文件,用wireshark的图形化界面分析tcpdump 结果数据。

原文: https://www.cnblogs.com/wongbingming/archive/2020/06/30/13212306.html
tcpdump host xxx
image.png

输出内容结构

下面以抓取的一个 tcp 包为例来看一下

  1. 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
  1. 第一列:时分秒毫秒 21:26:49.013621
  2. 第二列:网络协议 IP
  3. 第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而15605 是端口号
  4. 第四列:箭头 >, 表示数据流向
  5. 第五列:接收方的ip地址+端口号,其中 172.20.20.2 是 ip,而5920 是端口号
  6. 第六列:冒号
  7. 第七列:数据包内容,包括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两种

  1. # 根据源ip进行过滤
  2. $ tcpdump -i eth2 src 192.168.10.100
  3. # 根据目标ip进行过滤
  4. $ tcpdump -i eth2 dst 192.168.10.200

基于网段进行过滤:net

若你的ip范围是一个网段,可以直接这样指定

  1. tcpdump net 192.168.10.0/24

网段同样可以再细分为源网段和目标网段

  1. # 根据源网段进行过滤
  2. $ tcpdump src net 192.168
  3. # 根据目标网段进行过滤
  4. $ tcpdump dst net 192.168

基于端口进行过滤:port

使用 port 就可以指定特定端口进行过滤

  1. tcpdump port 8088

端口同样可以再细分为源端口,目标端口

  1. # 根据源端口进行过滤
  2. $ tcpdump src port 8088
  3. # 根据目标端口进行过滤
  4. $ tcpdump dst port 8088

如果你想要同时指定两个端口你可以这样写

  1. tcpdump port 80 or 8088

如果你的想抓取的不再是一两个端口,而是一个范围,一个一个指定就非常麻烦了,此时你可以这样指定一个端口段。

  1. $ tcpdump portrange 8000-8080
  2. $ tcpdump src portrange 8000-8080
  3. $ tcpdump dst portrange 8000-8080

对于一些常见协议的默认端口,我们还可以直接使用协议名,而不用具体的端口号
比如 http == 80,https == 443 等

  1. tcpdump tcp port http