tcpdump 常用用法

简要记录下tcpdump用法

监控某个ip上的某个端口的流量

tcpdump  -i enp0s25  tcp port 5432 -nn -S

各个参数作用

-i enp0s25 指定抓包的网卡是enp0s25

-nn  显示ip地址和数字端口 ,如果只 -n 则显示ip,但是端口为services文件中的服务名

如果一个n也不指定,则显示域名以及服务名

port 抓取该端口中的信息

-S TCP的seq以及ack显示绝对值

更详细的参数信息可以参考

Linux系统 tcpdump 抓包命令使用教程 - 知乎

https://www.cnblogs.com/wongbingming/p/13212306.html

客户端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 0

SYN=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 0


ACK=1 ack=504220912(上一步的seq+1),完成这步后服务器端状态也变成了ESTABLISHED

16:38:20.117243 IP 192.168.100.182.7109 > 192.168.100.51.5432: Flags [.], ack 504220912, win 8212, length 0


tcp结束链接,由于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

借用网络上的两个图

                                                图1 ,三次握手连接图

                                                          图2 四次挥手关闭连接图

当然这个图是客户端先发起关闭链接请求,跟实际测试例子不同,因此仅仅为了参考使用。

当然上述过程也可以使用cisco packet tracer等网络模拟工具查看,具体如何在cisco packet tracer上模拟http协议,进行抓包,可以查看网络,本文中不在介绍,抓取完成内容如下:

1.  完成界面

2-4步为三次握手链接,对应图一的三个步骤

2. 客户端发起链接,发送SYN,SYN置位以及syn和ack给服务器

3. 服务器接收到SYN后的回复信息

ACK=上一步seq+1, 同时随机生成seq,  SYN+ACK置位

4. 服务器回复客户端

ack=seq(上一步)+1

同时只有ACK置位

后续5-7步骤为四次挥手断开链接

5.

对应图2 中的第一步

6. 对应上面图2的第2,3步

服务器把ACK和FIN合并一步发送了,所以ACK和FIN都置位了(tcp的延迟确认机制,具体可以参考TCP中断可以用3次挥手吗? - 知乎

7. 对应上图2中的第四步

RST位

关于tcp标志位可以参考

TCP标志位详解(TCP Flag)-CSDN博客

telnet服务器上一个没有监听进程的端口,并且端口没有被防火墙DROP或者REJECT(服务器正常状态)

服务器上抓取置位RST的包

tcpdump -i enp0s25  "tcp[tcpflags] & tcp-rst != 0" -nn

telnet 192.168.100.138 5433

服务器回复给客户端的都是RST标志
13:38:39.291773 IP 192.168.100.138.5433 > 192.168.100.182.13288: Flags [R.], seq 0, ack 739931968, win 0, length 0
13:38:39.799136 IP 192.168.100.138.5433 > 192.168.100.182.13288: Flags [R.], seq 0, ack 739931968, win 0, length 0
13:38:40.307957 IP 192.168.100.138.5433 > 192.168.100.182.13288: Flags [R.], seq 0, ack 739931968, win 0, length 0
13:38:40.817424 IP 192.168.100.138.5433 > 192.168.100.182.13288: Flags [R.], seq 0, ack 739931968, win 0, length 0
13:38:41.326290 IP 192.168.100.138.5433 > 192.168.100.182.13288: Flags [R.], seq 0, ack 739931968, win 0, length 

由于客户端很快就能收到服务器的回复,所以针对这种情况客户端很快就会报connection refused.

禁止444端口传出RST标志位置位的数据,这样客户只能等待
iptables -t filter -I OUTPUT -p tcp --sport 444  --tcp-flags SYN,ACK,FIN,RST ACK,RST -j DROP

另外一种情况:

端口被防火墙DROP或者REJECT了

这种情况下,服务器端之后收到SYN标志位的数据(TCP第一次握手的数据),内核不会回复任何的信息,因此客户端内核会重复几次链接请求,因此客户端时间等待比较长。

例子:

curl 192.168.100.51:444
curl: (28) Failed to connect to 192.168.100.51 port 444 after 21013 ms: Timed out

tcpdump -i em1 -nn tcp port 444
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em1, link-type EN10MB (Ethernet), capture size 262144 bytes
10:49:40.026594 IP 192.168.100.182.5736 > 192.168.100.51.444: Flags [S], seq 2445456492, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
10:49:41.035866 IP 192.168.100.182.5736 > 192.168.100.51.444: Flags [S], seq 2445456492, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
10:49:43.035775 IP 192.168.100.182.5736 > 192.168.100.51.444: Flags [S], seq 2445456492, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
10:49:47.036702 IP 192.168.100.182.5736 > 192.168.100.51.444: Flags [S], seq 2445456492, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
10:49:55.038645 IP 192.168.100.182.5736 > 192.168.100.51.444: Flags [S], seq 2445456492, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0



当然linux操作系统上可以通过降低重传次数,来减少客户端等待的时间
net.ipv4.tcp_syn_retries=1

sysctl -p
vm.max_map_count = 655360
vm.swappiness = 1
kernel.sem = 50100 128256000 50100 2560
net.ipv4.tcp_syn_retries = 1



具体可以查看
https://blog.csdn.net/GAGA__CHEN/article/details/127808835

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值