![如何使用 tcpkill 实用程序终止 TCP 连接](https://linux22.com/image/562705/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20tcpkill%20%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%BB%88%E6%AD%A2%20TCP%20%E8%BF%9E%E6%8E%A5.png)
我正在尝试使用 终止已建立的 TCP 连接tcpkill
。该连接是开放的 HTTPS 连接。它在 netstat 上显示为:
tcp 0 0 X.X.X.X:55601 X.X.X.X:https ESTABLISHED
因此,根据手册页,我输入:
$ tcpkill -i eth1 -9 port 443
tcpkill 实用程序输出:
tcpkill: listening on eth1 [port 443]
...然后就挂了。等了大约 15 分钟后,我不确定这里发生了什么。
难道我做错了什么?
答案1
要使 tcpkill 工作(即制作具有正确序列号和源端口的重置数据包),必须有流量。如果没有其他任何内容打印出来,则表示没有流量。要验证,您可以运行tcpdump -i eth1 port 443
。
答案2
我必须终止一个没有流量的已建立连接(JVM 上的调试会话)。
tcpkill
正如@Mark Wagner 的回答所解释的那样,无法做到这一点,但是killcx
1.0.3 (关联)做到了(Ubuntu 10.04)。
它是一个依赖于一些库的 perl 脚本。
编辑
在无法通过两者组合终止的连接上执行killcx
了以下操作:tcpkill
killcx
说连接如果从LOCAL:PORTL
到REMOTE:PORTR
- 在终端启动 tcpkill:
tcpkill port PORTL
。Tcpkill 将开始监听流量 - 在第二个终端启动 killcx:
killcx REMOTE:PORTR
答案3
我发现我需要指定本地(源)端口,而不是远程端口,即。
$ sudo netstat -np | grep myclient
tcp 0 0 x.x.x.x:46844 y.y.y.y:https ESTABLISHED 1234/myclient
$ sudo tcpkill -i eth0 port 46844
tcpkill: listening on eth0 [port 46844]
... [output which shows tcpkill working, once there is traffic] ...
因此,就你的情况而言,应该是:
$ tcpkill -i eth1 -9 port 55601