tcpkill:仅在建立连接后才完成连接

tcpkill: finish connections only after they're ESTABLISHED

出于测试目的,我需要从启用了 Google 开发人员工具(跟踪网络 activity)的 Postman 向 Google 云 HTTP 负载均衡器发送 POST 请求。

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

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

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

但是,最终,这会导致在建立之前关闭每个连接。因此,Postman 收到连接错误。

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

先谢谢战友们

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

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

#!/bin/bash

dst=
port=

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

您将需要 运行 使用 watch 或类似工具在循环中周期性地 运行 这个脚本,当然,这不会在连接建立后立即终止连接,而是稍后在循环找到连接。