如何使用控制台终止/中断所有 tcp 连接?

如何使用控制台终止/中断所有 tcp 连接?

是否可以通过按一下按钮来中断所有 TCP 活动,而不是追捕个别活动?我的意思是只杀死连接本身(建立、同步、等待等——只是让它们消失),而不是杀死建立这些连接的进程(如果它自己退出也没关系),并且不重新启动任何网络成分

答案1

您可以关闭网络接口 - 这将中断所有连接,而不仅仅是 TCP 连接。并且,严格来说,不会“重新启动”任何“网络组件”(如 DHCP 客户端)。

如果您再次启动接口,并确保获取(或设置)相同的 IP,未超时的连接甚至会恢复。

答案2

你可以使用一个iptables规则。像这样的东西:

$ sudo iptables -A INPUT -p tcp -m --cstate ESTABLISHED -j REJECT

tcpkill(套餐的一部分dsniff

$ sudo tcpkill -i INTERFACE -9 TCPDUMP_FILTER

请注意,在这两种情况下,您都需要在它们启动之前拥有流量。如果您正在ssh运行会话并且运行如下命令:

$ sudo tcpkill -i INTERFACE -9 port 22

在这两种情况下,只有当存在传入/传出流量时,连接才会被真正终止(即使是保活数据包也可以)。否则它们将被中断(不再有流量流经它们)。

如果您使用 IPv6,tcpkill您也需要中断这些。

关于删除/添加接口的注意事项

删除接口并使用相同的 IP 重新创建它并不是一个解决方案,因为它最终可能什么也不做。您可以通过这个简单的设置来检查:

$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example

现在,在两个终端上创建一个服务器:

(terminal-1) $ nc -l -s 192.0.2.1 -p 9999

和一个客户:

(terminal-2) $ nc 192.0.2.1 9999

在任一侧(客户端/服务器)写一点并查看它的工作情况。

现在删除接口:

$ sudo ip link del example

在两侧再写一些内容(您会注意到数据不流动),然后等待,例如两分钟,然后重新创建链接:

$ sleep 120
$ sudo ip tuntap add mode tun example
$ sudo ip address add 192.0.2.1 dev example

输入一些东西。或者再等待一段时间,您将看到连接恢复,没有数据丢失。

根据您的服务器/客户端(它们可能正在侦听接口事件并自行断开连接),删除/重新创建接口的结果可能至少是:

  • 没有什么
  • 干净的退出
  • 不干净的出口

相关内容