如何在 Debian Stretch 的代码中粗暴地中断远程网络连接

How to brutally interrupt remote network connections in code on Debian Stretch

我正在 Beaglebone 上进行 Python 通信 class 运行,它连接到/重新连接到我的可用服务器列表中的远程主机。

为了测试重新连接,我一直在物理上从路由器上拔下 LAN 插头以模拟中断。 我想在代码中执行此操作以进行扩展测试。 本质上,我想创建一个名为 kill_internet(timeout) 的方法,它将拉出地毯,然后在超时结束时恢复连接。

要求:

  1. 必须中断已建立的套接字连接。
  2. 断开连接一定是残酷和丑陋的——没有机会关闭套接字 优雅地.

最后 - 我希望 LAN 连接不会中断,这样我可以继续从我的 PC 通过 SSH 监控测试。不是真正的要求,因为我以后总是可以重新连接并读取日志文件。

Service Networking stop 将满足 #1 但不确定它有多残酷。 我考虑过 UFW (iptables) 出站规则,但这可能不会阻止已建立的连接和对 #2 的同样关注。

我想我可以构建一个硬件 2 端口设备来在硬件级别执行此操作,但这很难。

知道如何进行吗?

谢谢 比尔

在您的设置中执行此操作的最佳方法是以您能想到的多种不同方式在您的远程服务器上为 reject/deny 您的客户端创建和拆除防火墙规则。例如:

  1. 主动拒绝连接请求(客户端容易处理)。
  2. 使用重置数据包在流中丢弃连接(同样,易于处理)。
  3. 突然停止响应来自客户端 IP、连接中的数据包。这模拟了您不拥有的网络部分的电缆切断,这是客户端最难处理的,因为您必须考虑什么是合理的超时。

如果您使用的是 Linux,可以编写 iptables 脚本来实施这些规则。

我偶然发现了一个简单的硬件解决方案,花了我 22 美元。 亚马逊以 10-15 美元的价格出售这些 USB 控制的继电器 - 寻找 UsbRelay2。有了这个,我可以很容易地从代码中触发继电器。要暴力中断以太网,我所要做的就是切断以太网集线器或交换机的电源。我得到了一个 10 美元的 5 端口开关,它从墙上的疣上运行 5V。我切断了一根 5v 电源线并 运行 通过继电器。触发继电器会切断开关的电源。因为它是所有 5V 接线都是安全的,不需要外壳。拼凑起来花了整整3分钟。