You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统下如何查看并重置/终止跨设备TCP连接并实现Python自动化

网关侧查看并重置跨主机TCP连接解决方案

前置依赖安装

首先在VM1(网关)上执行以下命令安装所需工具:

sudo apt update && sudo apt install -y conntrack dsniff coreutils
  • conntrack:Netfilter连接跟踪工具,可查看所有流经网关的转发连接
  • dsniff:包含tcpkill工具,用于发送TCP RST包终止连接
  • coreutils:自带timeout命令,解决tcpkill长期占用终端的问题

查看VM2与VM3之间的转发TCP连接

netstat/ss仅能识别本机的TCP连接,无法查看网关转发的第三方流量,使用conntrack查询:

  • 查看所有流经网关的TCP连接:
    sudo conntrack -L -p tcp
  • 过滤VM3到VM2的SSH连接(替换为你实际的IP地址):
    sudo conntrack -L -p tcp --src [VM3_IP] --dst [VM2_IP] --dport 22
    返回结果中可直接获取连接的源端口、目的端口、连接状态等四元组信息。

无阻塞终止目标TCP连接

使用timeout命令限定tcpkill的运行时长,无需手动Ctrl+C退出:

sudo timeout 3s tcpkill -i [VM1承接内网流量的网卡名] host [VM3_IP] and host [VM2_IP] and port 22
  • 3s为运行时长,通常1~3秒足够发送RST包终止连接,超时后进程自动退出
  • 网卡名可通过ip a命令查询,通常为eth0、ens33等

Python3自动化集成方案

你可以直接将上述命令封装到Python脚本中,使用subprocess模块调用即可,参考实现:

import subprocess
import sys

def kill_ssh_connection(vm3_ip, vm2_ip, port=22, interface="eth0"):
    # 先查询连接是否存在
    check_cmd = f"sudo conntrack -L -p tcp --src {vm3_ip} --dst {vm2_ip} --dport {port} 2>/dev/null | wc -l"
    conn_count = int(subprocess.getoutput(check_cmd))
    if conn_count == 0:
        print("未找到目标SSH连接")
        return False
    # 执行连接终止
    kill_cmd = f"sudo timeout 3s tcpkill -i {interface} host {vm3_ip} and host {vm2_ip} and port {port} >/dev/null 2>&1"
    subprocess.run(kill_cmd, shell=True)
    print("目标连接已终止")
    return True

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("用法: python3 kill_tcp.py [VM3_IP] [VM2_IP] [网卡名]")
        sys.exit(1)
    kill_ssh_connection(sys.argv[1], sys.argv[2], interface=sys.argv[3])

保存为kill_tcp.py后,直接运行sudo python3 kill_tcp.py [VM3_IP] [VM2_IP] [网卡名]即可完成单命令操作。

可选轻量方案(无需tcpkill)

如果你不想依赖外部工具,可以用Python的scapy库构造TCP RST包主动发送,同样可以实现连接终止的效果。

内容的提问来源于stack exchange,提问作者Andy Garcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:54:01