出于测试目的,我需要在启用Google Developer Tools的情况下从Postman发送POST请求到Google Cloud HTTP Load Balancer(跟踪网络活动)。
每个请求都应使用不同的连接。
所以,我想使用tcpkill
实用程序:
$ tcpkill -9 "dst XXX.XXX.XXX.XXX and dst port 443"
但是,最终,这会导致在建立之前关闭每个连接。所以,邮差得到连接错误。
所以,问题是:如何在ESTABLISHED和POST请求被发送到服务器之后才完成连接?
先谢谢,同志们。
答案 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或类似的方法在循环中定期运行这个脚本,当然,这不会在建立连接后立即终止连接,但稍后会在循环找到连接时终止连接。