tcpkill:只有在建立连接后才能完成连接

时间:2017-06-15 08:05:32

标签: tcp google-compute-engine postman tcpdump

出于测试目的,我需要在启用Google Developer Tools的情况下从Postman发送POST请求到Google Cloud HTTP Load Balancer(跟踪网络活动)。

每个请求都应使用不同的连接。

所以,我想使用tcpkill实用程序:

$ tcpkill -9 "dst XXX.XXX.XXX.XXX and dst port 443"

但是,最终,这会导致在建立之前关闭每个连接。所以,邮差得到连接错误。

所以,问题是:如何在ESTABLISHED和POST请求被发送到服务器之后才完成连接?

先谢谢,同志们。

1 个答案:

答案 0 :(得分:2)

你不能用tcpkill这样做,因为这个程序需要流量来终止连接,并且不支持使用连接状态的过滤器。因此,如果在建立连接之前运行tcpkill,它们将在连接之前被终止;如果在建立连接后运行tcpkill,如果没有流量,则不会被杀死,因为tcpkill需要有效的序列号来发送RST。

您可以尝试killcx过滤与ss或netstat建立的连接,如下所示:

#!/bin/bash

dst=$1
port=$2

peer_addrs=$(ss -t state established dst ${dst} dport = :${port} | 
tail -n +2 | awk '{print $4}' | cut -d : -f 1)
for addr in ${peer_addrs}; do
    echo "killing ${addr}:${port}"
    killcx ${addr}:${port}" &
    sleep 2
    killall -9 killcx
done

你需要使用watch或类似的方法在循环中定期运行这个脚本,当然,这不会在建立连接后立即终止连接,但稍后会在循环找到连接时终止连接。