[英]Close established TCP connection on Linux
我无法找到我将尝试实现的简单事情的答案:一旦与我的 linux 服务器建立了 tcp 连接,假设 ssh / tcp 22 或 x11 / tcp 6000 显示 -> 如何在没有的情况下关闭此连接终止进程(sshd / x11 显示服务器)。 我也看到了一些使用 iptables 的建议,但它对我不起作用,连接在 netstat -an 中仍然可见。 如果有人能指出我正确的方向,那就太好了。
到目前为止我尝试过的
tcpkill: kills the process, not good for me
iptables: does not close the established connection, but prevent further connections.
感谢 DJ
好的,我发现至少有一个可行的解决方案(killcx)。 也许我们将能够找到一个更简单的解决方案。 另外,我看到了来自“ zb”的评论-谢谢-也许也可以,但是我找不到有效的语法,因为该工具似乎确实有用,但很复杂。 因此,这里有一个示例,说明如何使用对我有用的1.解决方案:
netstat -anp | grep 22
output: tcp 0 0 192.168.0.82:22 192.168.0.77:33597 VERBUNDEN 25258/0
iptables -A INPUT -j DROP -s 192.168.0.77 (to prevent reconnect)
perl killcx.pl 192.168.0.77:33597 (to kill the tcp connection)
您可以在以下位置找到killcx: http ://killcx.sourceforge.net/它将“窃取”来自外部主机(192.168.0.77)的连接并关闭它。 因此,该解决方案效果很好,但是如果您承受压力,则设置起来很复杂。 以下是必需的软件包:
apt-get install libnetpacket-perl libnet-pcap-perl libnet-rawip-perl
wget http://killcx.sourceforge.net/killcx.txt -O killcx.pl
但是,有一个更简单的解决方案会很好。
tcpkill 不起作用,因为它只会杀死任何新连接,它不会杀死现有的已建立连接
继承人如何删除已建立的 TCP 连接
找到进程的 PID 和客户端连接的 IP,假设你在 serverA 上,有人从 serverB 连接
root@A> netstat -tulpan | grep SSH | grep服务器B
应该看到类似的东西,
tcp 0 0 <serverA IP>:<port> <serverB>:<port> ESTABLISHED 221955/sshd
使用 lsof 实用程序使用父 PID 获取此连接的文件描述符
root@A> lsof -np 221995 | grep serverB IP
应该看到这样的东西
sshd 221955 <user> 17u IPv4 2857516568 0t0 TCP <serverA IP>:<port>-><serverB IP>:<port> (ESTABLISHED)
获取文件描述符编号(第 4 列)= 17u
使用 GDB 关闭此连接,无需杀死 sshd
root@A> gdb -p 211955 --batch -ex 'call shutdown(17u, 2)'
应该看到类似的东西,
0x00007f0b138c0b40 in __read_nocancel () from /usr/lib64/libc.so.6
$1 = 0
[Inferior 1 (process 211955) detached]
现在应该关闭 TCP 连接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.