总结五种断开TCP连接的方式
1.防火墙规则
可以设置iptables规则禁掉某个或者某些端口,但是对已建立的TCP连接无效,只是会让TCP收不到包。上层业务要是对长时间收不到数据有超时出来也可以实现断开连接功能
关闭端口
【iptable】
sudo iptables -A INPUT -p tcp --dport $PORT -j DROP
sudo iptables -A OUTPUT -p tcp --dport $PORT -j DROP
//规则分INPUT/OUTPUT
2.gdb挂载进程
命令行关闭端口或者tcp连接
- 定位进程
netstat -antp
//获得端口对应的进程pid
tsh@ubuntu:~$ netstat -antp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.229.128:10001 0.0.0.0:* LISTEN 1573/server
tcp 0 0 192.168.229.128:43178 192.168.229.128:10001 ESTABLISHED 1583/client
tcp 0 0 192.168.229.128:10001 192.168.229.128:43178 ESTABLISHED 1573/server
- 获得进程中的文件描述符fd
lsof -np pid
//获得相应端口连接的文件描述符 (FD这列就是文件描述符)
tsh@ubuntu:~$ lsof -np 1583
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
client 1583 tsh cwd DIR 8,1 4096 920909 /home/tsh/codeTest/TCP_Server_Clinet/clinet
client 1583 tsh rtd DIR 8,1 4096 2 /
client 1583 tsh txt REG 8,1 13648 920223 /home/tsh/codeTest/TCP_Server_Clinet/clinet/client
client 1583 tsh mem REG 8,1 1868984 2103006 /lib/x86_64-linux-gnu/libc-2.23.so
client 1583 tsh mem REG 8,1 162632 2103004 /lib/x86_64-linux-gnu/ld-2.23.so
client 1583 tsh 0u CHR 136,9 0t0 12 /dev/pts/9
client 1583 tsh 1u CHR 136,9 0t0 12 /dev/pts/9
client 1583 tsh 2u CHR 136,9 0t0 12 /dev/pts/9
client 1583 tsh 3u IPv4 24777 0t0 TCP 192.168.229.128:43178->192.168.229.128:10001 (ESTABLISHED)
- gdb挂载到对应进程上
gdb -p pid
//挂载到进程上,这里可能需要root权限
- 关闭socket
gdb挂载上去之后执行:
call close(fd)
//fd就是上面lsof命令查询的fd
- 退出gdb
quit
//退出gdb
3.tcpkill工具
这个一个命令行的工具
tcpkill是dsniff工具集中的,安装用一下命令即可:
sudo apt-get install dsniff
使用说明
修改说明:原本的tcpkill只能关闭活跃的tcp连接,修改后非活跃的也能关闭
在Ubuntu下编译说明:
修改makefile文件,修改下面这两行:
原始:
LDFLAGS = -lpcap -lnet -lpthread
${CC} ${CFLAGS} ${LDFLAGS} -o $@ $^
修改后:
LDFLAGS = -lnet -lpthread -lpcap
${CC} ${CFLAGS} -o $@ $^ ${LDFLAGS}
原因:
这是因为Ubuntu对链接库查找顺序导致的问题,centos下可能没有这个问题。
4.killcx脚本
这是一个perl脚本,需要三个模块
官网下载
说明和使用介绍
三个依赖模块安装:要以root用户安装,不然会找不到依赖库,因为killcx是以root身份运行的
使用说明
5.kill掉TCP连接所在的进程
通过杀掉进程的方式
- sudo netstat -ap | grep :<port_number>
获得进程pid - kill -9
杀掉进程
总结
以上5种方式都需要ROOT权限下才能实现,这是一个弊端。

本文总结了五种断开TCP连接的方式,包括利用iptables设置防火墙规则、使用gdb挂载进程关闭socket、借助tcpkill工具、运行killcx脚本以及直接kill掉TCP连接所在进程。每种方法都有其适用场景,但都需要ROOT权限。
4132

被折叠的 条评论
为什么被折叠?



