简要记录下tcpdump用法
监控某个ip上的某个端口的流量
tcpdump -i enp0s25 tcp port 5432 -nn -S
各个参数作用
-i enp0s25 指定抓包的网卡是enp0s3
-nn 显示ip地址和数字端口 ,如果只 -n 则显示ip,但是端口为services文件中的服务名
如果一个n也不指定,则显示域名以及服务名
port 抓取该端口中的信息
-S TCP的seq以及ack显示绝对值
客户端telnet 192.186.100.138 命令下,服务器端显示如下
tcp三步握手SYN=1 seq=3967800135
客户端处于SYN_SEND状态
16:38:20.116860 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [S], seq 3967800135, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0SYN=1 ACK=1 seq=504220911(随机值) ack=3967800136(上一步seq+1), 服务器端处于SYN_RCVD,这步完成后客户端的状态为ESTABLISHED
16:38:20.116915 IP 192.168.100.51.5432 > 192.168.100.182.7109: Flags [S.], seq 504220911, ack 3967800136, win 65535, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0ACK=1 ack=504220912(上一步的seq+1),完成这步后服务器端状态也变成了ESTABLISHED16:38:20.117243 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [.], ack 504220912, win 8212, length 0tcp结束链接,由于tcp属于全双工通讯,所以关闭实际上分为4步骤,此例子由于使用telnet链接的5432端口的pg服务,因此服务器端超时后,服务器端主动关闭链接,因此前两步为关闭服务器
服务器发起断开链接FIN=1 ACK=1 seq=504220912 完成后服务器状态为FIN_WAIT_1,客户端状态为CLOSE_WAIT
16:39:20.118195 IP 192.168.100.51.5432 > 192.168.100.182.7109: Flags [F.], seq 504220912, ack 3967800136, win 1024, length 0客户端回复ACK=1 ack=504220913(上一步seq+1),完成后服务器的状态为FIN_WAIT_2, 客户端状态为LAST_ACK
16:39:20.118419 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [.], ack 504220913, win 8212, length 0
此时服务器端已经不能再发送应用数据给客户端了,但是客户端是可以发送数据给服务器端的,因此现在的状态处于半双工状态后两步是关闭客户端客户端发送断开链接请求FIN=1 ACK=1 ack=504220913(上一步的ack) seq=3967800136(随机),此时服务器端状态为TIME_WAIT
16:39:20.118551 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [F.], seq 3967800136, ack 504220913, win 8212, length 0服务器端回复请求ACK=1 ack=3967800137 (上一步seq+1), 此时客户端的状态为CLOSED,服务器的状态TIME_WAIT等待2MSL时间后变成CLOSED
16:39:20.118575 IP 192.168.100.51.5432 > 192.168.100.182.7109: Flags [.], ack 3967800137, win 1024, length 0
借用网络上的一个图
当然这个图是客户端先发起关闭链接请求,跟实际测试例子不同,因此仅仅为了参考使用。