如何在Linux上断开任意TCP / IP连接?

时间:2011-06-03 12:27:58

标签: linux tcp

是否有任何命令可用于破坏某些程序的现有TCP / IP连接?

操作系统是否知道TCP连接中有什么内容,或操作系统是否只看到本地套接字上的TCP传输,并且不知道哪个请求被提供给哪个套接字?

例如,如果Firefox向某个服务器的端口80发送请求并等待答案。是否有可能找到Firefox监听端口并欺骗Firefox显示ERR_CONNECTION_REFUSED或类似的东西。

我想要一个不会阻止数据流并让应用程序以这种方式处理这种情况的解决方案,而是关闭套接字或TCP / IP连接(这应该是可能的,因为套接字是操作系统的东西负责我认为?连接是一个OS属性还是应用程序做的事情?)所以应用程序会立即做出反应。

3 个答案:

答案 0 :(得分:3)

使用tcpkill

答案 1 :(得分:2)

<强>刀具

Cutter会将数据包发送到TCP / IP连接的两端以关闭连接。它旨在用于Linux路由器以断开不需要的连接。

网站:http://www.digitage.co.uk/digitage/software/linux-security/cutter

Debian有一个包:https://packages.debian.org/stable/cutter

答案 2 :(得分:0)

我对此的看法是使用`iproute2框架。

通过规则创建一个blockhole / unreachable bucket路由表(在我的示例表id 33中)并给它高prio:

# ip rule add from all lookup 33 prio 1

现在找到您要阻止的连接。在我的情况下,我使用Chromium连接到google.com:

# ss -n -e -p | grep "chrom" | grep "173.194.*:443"
ESTAB      0      0               10.211.55.4:46710         173.194.35.2:443    timer: (keepalive,38sec,0) users:(("chromium-browse",8488,106)) uid:1000 ino:38318 sk:f6a4f800
ESTAB      0      0               10.211.55.4:49288        173.194.35.18:443    timer:(keepalive,34sec,0) users:(("chromium-browse",8488,109)) uid:1000 ino:38047 sk:f6a4cb00

所以,让我们将173.194.0.0/16添加到表33并刷新缓存:

# ip route add unreachable 173.194.0.0/16 table 33
# ip route flush cache

现在尝试在浏览器中连接到google.com,您的浏览器中会显示ERR_CONNECTION_REFUSED

要抬起你自我封锁的面纱,你可以简单地冲洗水桶:

# ip route flush table 33

当然,如果您需要更细粒度的区分,可以使用tc和u32分类符来标记确切的IP:PORT组合(以及其他数据包方面)并向存储桶添加fw规则(未测试的):

# tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \
    match ip src 173.194.0.0/16 match ip dport 443 classid :1
# ip rule add fwmark 1 table 33 prio 1 realms 3/4