tcpdump
肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁 (qq.com)
-
option 可选参数:将在后边一一解释,
-
proto 类过滤器:根据协议进行过滤,可识别的关键词有:upd, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet
-
type 类过滤器:可识别的关键词有:host, net, port, portrange,这些词后边需要再接参数。
-
direction 类过滤器:根据数据流向进行过滤,可识别的关键字有:src, dst,同时你可以使用逻辑运算符进行组合,比如 src or dst
tcpdump 输出的内容虽然多,却很规律。
这里以我随便抓取的一个 tcp 包为例来看一下
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,更多标识符见下面
使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:
-
[S]
: SYN(开始连接) -
[P]
: PSH(推送数据) -
[F]
: FIN (结束连接) -
[R]
: RST(重置连接) -
[.]
: 没有 Flag,由于除了 SYN 包外所有的数据包都有ACK,所以一般这个标志也可表示 ACK