linux 使用bash命令关闭TCP连接

在进程中关闭tcp连接比较简单,直接调用socket的API即可关闭,或不发送心跳机制。

有时候为了测试异常环境,在不断网的情况下,如何使用bash命令关闭TCP的连接呢?

下面谈两种使用bash命令关闭tcp连接的方法:

tcpkill命令

  1. 先安装dsniff包:sudo apt install dsniff

  2. 下载地址:http://pkgs.repoforge.org/dsniff/

  3. 验证是否安装成功:
    在这里插入图片描述

  4. 限制tcp连接:
    在这里插入图片描述

  5. 详细说明:
    在这里插入图片描述

  6. 简单示例:

sudo tcpkill -i ens -9 host 127.0.0.1
sudo tcpkill -i ens -9 port 8021
  1. 原理

tcpkill的工作原理,实际上就是通过双向fake tcp rst包重置目标连接双方的网络连接,之所以tcpkill不会马上中断目标tcp连接,是因为伪造tcp rst包时,需要填入正确的sequence number,这需要通过拦截双方的tcp通信才能实时得到。所以运行tcpkill后,只有目标连接有新tcp包发送/接受才会导致tcp连接中断。

iptables命令

iptables是一个非常强大的命令,这里仅仅讲一下如何禁用和启动tcp连接

禁用/启用

iptables -A OUTPUT -d 39.156.69.79 -p tcp --dport 443 -j REJECT #禁用

iptables -R OUTPUT 1 -d 39.156.69.79 -p tcp --dport 443 -j ACCEPT #启用
iptables -I OUTPUT 1 -d 39.156.69.79 -p tcp --dport 443 -j ACCEPT

查看规则

iptables -S OUTPUT

清除规则

iptables -F (flush 清除所有的已定规则)
iptables -X (delete 删除所有用户“自定义”的链(tables))
iptables -Z (zero 将所有的chain的计数与流量统计都归零)

猜你喜欢

转载自blog.csdn.net/lianshaohua/article/details/112313702