如何kill一条TCP连接?

原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。

简介

如果你的程序写得有毛病,打开了很多TCP连接,但一直没有关闭,即常见的连接泄露场景,你可能想要在排查问题的过程中,先临时kill一波泄露的连接。
又比如你要验证程序在遇到网络错误时的自愈能力,想手动kill掉一些正常TCP连接,看程序是否能自动重连并恢复运行。

这些场景,都需要手动kill一部分TCP连接,那在Linux下有哪些kill连接的方法呢?

kill活跃的TCP连接

使用ngrep或tcpkill命令可以杀死活跃状态的TCP连接,用法如下:

ngrep杀死连接
$ sudo ngrep -d any -K3 '' 'port 54690'

安装tcpkill,及使用其杀死连接
$ sudo apt install dsniff
$ sudo tcpkill -i any 'port 45308'

如何kill一条TCP连接?
如上所示,可以发现在杀死连接时,ngrep和tcpkill都向连接方发送了RST包。

实现原理

学过《计算机网络》的同学都知道,TCP协议是通过FIN包与ACK包来做四次挥手,从而断开TCP连接的,这是正常的TCP断连过程,但TCP协议中还有RST包,这种包用于异常情况下断开连接,Linux在收到RST包后,会直接关闭本端的Socket连接,而不需要经历四次挥手过程。

而上面的ngrep与tcpkill命令,正是通过给对方发送RST包,从而实现杀死TCP连接的。但要发送一个正确的RST包,需要知道TCP连接交互时所使用的序列号(seq),因为乱序的包会被TCP直接丢弃,所以ngrep和tcpkill还会监听网卡上交互的包,以找到指定连接所使用的序列号seq。

所以,ngrep与tcpkill只能kill有流量的活跃TCP连接,对于空闲连接就无法处理了。

kill空闲的TCP连接

对于空闲状态的TCP连接,可以用ss或hping3命令来处理,如下:

使用ss杀死连接

通过ss命令的-K选项可以用来kill连接,如下:

安装ss命令
$ sudo apt install iproute2

使用ss杀死目标端口为65987的连接
$ sudo ss -K dport = 65987

注意,使用这个功能需要你的内核版本>=4.9,且打开了 CONFIG_INET_DIAG_DESTROY选项,因此某些情况下可能无法使用。

使用hping3杀死连接

如果无法使用ss命令,则可以考虑使用hping3命令来kill连接,hping3命令可以发任何类型的TCP包,因此只要模拟tcpkill的原理即可,如下:

  1. 通过发送SYN包来获取seq

上面提到了,TCP协议会直接丢弃乱序的数据包,但是对于SYN包却区别对待了,如果你随便发一个SYN包给已连接状态的Socket,它会回复一个ACK,并携带有正确的seq序列号,如下:

第一个参数,表示发送包的目标ip地址
-a:设置包的源ip地址
-s:设置包的源端口
-p:设置包的目标端口
--syn:表示发SYN包
-V:verbose output,使hping3输出序列号seq
-c:设置发包数量
$ sudo hping3 172.26.79.103 -a 192.168.18.230 -s 8080 -p 45316 --syn -V -c 1
using eth0, addr: 172.26.79.103, MTU: 1500
HPING 172.26.79.103 (eth0 172.26.79.103): S set, 40 headers + 0 data bytes
len=40 ip=172.26.79.103 ttl=64 DF id=16518 tos=0 iplen=40
sport=45316 flags=A seq=0 win=502 rtt=13.4 ms
seq=1179666991 ack=1833836153 sum=2acf urp=0

可以在输出中找到, ack=1833836153即是对方回复的序列号,我们用在后面的发RST包中。

  1. 使用seq发RST包

`bash
–rst:表示发RST包
–win:设置TCP窗口大小
–setseq:设置包的seq序列包
$ sudo hping3 172.26.79.103 -a 192.168.18.230 -s 8080 -p 45316 –rst –win 0 –setseq 1833836153 -c 1
HPING 172.26.79.103 (eth0 172.26.79.103): R set, 40 headers + 0 data bytes

Original: https://www.cnblogs.com/codelogs/p/16838850.html
Author: 扣钉日记
Title: 如何kill一条TCP连接?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714955/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • windows下的Sonarqube+Sonar-Scanner简单入门配置

    参考:https://blog.csdn.net/weixin_40496191/article/details/120250953https://www.cnblogs.com/…

    技术杂谈 2023年7月24日
    081
  • 期末求加分

    信2005-3班 20203910 陈振辉 和王建民老师度过了一个愉快的学期,期末希望成绩能加分,申请理由如下: 1.在第一次课上动手又动脑中,第一阶段班级达到前15名提交要求。 …

    技术杂谈 2023年6月21日
    053
  • 改Bug的经验

    如果修复某个Bug花了很长时间,这时候就要问问自己为什么,怎么做才吸取经验教训,在类似的问题上不再出问题,以及采用的方法,使用的工具是否还有改进的地方;当所有问题都解决之后,一定要…

    技术杂谈 2023年7月25日
    083
  • 「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之EXCEL数据导出(十三)

    基于Vue和Quasar的前端SPA项目实战之数据导出(十三) 回顾 通过之前一篇文章基于Vue和Quasar的前端SPA项目实战之数据导入(九)的介绍,通过配置的方式可以零代码实…

    技术杂谈 2023年7月24日
    082
  • 阿里云视频点播

    参考示例:https://help.aliyun.com/document_detail/53406.html 注意点:有一个依赖包是下载不来的,我们需要手动下载并解压(其他包也是…

    技术杂谈 2023年6月21日
    0108
  • 虚拟环境搭建

    虚拟环境搭建 我们进行开发的时候虚拟环境搭建尤为重要,我们如果需要的python解释器模块版本不一样可以采用这个办法 pycharm中搭建 命令创建虚拟环境 比如centos没有图…

    技术杂谈 2023年6月21日
    091
  • Spring5新特性—Log4j2

    Spring5新特性—Log4j2 Spring5新特性—Log4j2 创建一个Maven项目,导入依赖 org.apache.logging.log4j log4j-core 2…

    技术杂谈 2023年6月21日
    080
  • [学习笔记]Java对象和类

    Java是一种面向对象语言(Object-oriented Programming,OOP); 面向对象编程 面向对象编程与面向过程编程不同,面向过程编程将模型分解为达到最终结果所…

    技术杂谈 2023年7月24日
    080
  • MyBatisPlus 入门教程,这篇很赞

    在之前的文章中我们经常使用MybatisPlus进行增删改查,可能有些小伙伴对mybatisplus不是很熟悉,今天特意出了一般入门级的教程,我自己也是一边学习一边写的,有什么地方…

    技术杂谈 2023年6月21日
    0142
  • Do the JSON keys have to be surrounded by quotes?(转载)

    Or should I always use the following syntax? (And if so, why?) I haven’t really foun…

    技术杂谈 2023年5月31日
    096
  • Typora-设置插入图片居左

    Typora 默认插入的图片是居中显示的,可以使用下列方法修改。 设置路径:文件–>偏好设置–>外观–>打开主题文件夹 选择使…

    技术杂谈 2023年6月1日
    092
  • C# class模板文件路径

    文件路径:D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\ItemTempla…

    技术杂谈 2023年5月30日
    093
  • 时序攻击(timing attack)

    时序攻击属于侧信道攻击/旁路攻击(Side Channel Attack),侧信道攻击是指利用信道外的信息,比如加解密的速度/加解密时芯片引脚的电压/密文传输的流量和途径等进行攻击…

    技术杂谈 2023年5月31日
    055
  • Nginx配置中遇到到的问题和解决方案

    关于Nginx配置中遇到到的问题和解决方案 整理知识,学习笔记 Nginx配置别名(alias)及PHP解析 Nginx配置别名(alias)及PHP解析。 语法规则: locat…

    技术杂谈 2023年7月11日
    086
  • 关于提问

    A 和 B 对话如下: A: xx 产品,一个月一个版本,只包含一个小功能,培训销售的工作跟不上怎么办?培训工作跟不上,研发做的功能前端都不知道,那做了有什么用?为什么不规划成大版…

    技术杂谈 2023年7月11日
    087
  • AxWebBrowser,WebBrowser

    利用2005的WebBrowser我暂时无法得到postData,不知道各位TX有没好办法,记得告知。 所以暂时使用AxWebBrowser, 下面是利用2005的WebBrows…

    技术杂谈 2023年7月10日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球