在进程中关闭tcp连接比较简单,直接调用socket的API即可关闭,或不发送心跳机制。
有时候为了测试异常环境,在不断网的情况下,如何使用bash命令关闭TCP的连接呢?
下面谈两种使用bash命令关闭tcp连接的方法:
tcpkill命令
-
先安装dsniff包:sudo apt install dsniff
-
下载地址:http://pkgs.repoforge.org/dsniff/
-
验证是否安装成功:
-
限制tcp连接:
-
详细说明:
-
简单示例:
sudo tcpkill -i ens -9 host 127.0.0.1
sudo tcpkill -i ens -9 port 8021
- 原理
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的计数与流量统计都归零)