首页 > 解决方案 > 我错过了什么?Python 套接字问题

问题描述

我正在尝试编写一个客户端/服务器python3工具,它将来自多个客户端的数据转发到另一个目的地,加上双向通信,将数据(从一种方式)拆分为特定的字节块,彼此之间存在延迟。到目前为止,我实现了它,但有一些问题到最后我无法解决,我也不明白。我不是编程专家,所以我来这里寻求帮助!

到目前为止一切正常。 我正在使用 ncat,因为我需要它来使用该工具

第一个问题:如果我得到一个反向 shell,并输入一些引发错误的内容,套接字将不再响应。Ncat 无法正确处理 sterr,但我找到了解决问题的解决方法。事实是,解决方法在这种情况下不起作用:

第二个也是最后一个问题:如果我使用由 Ncat 提供和处理的加密,流量甚至不会转发到 ncat 服务器:

谁能如此温柔地帮助我修复代码?这是代码:

import socket
import os
import time
import sys
import ssl
from _thread import *
from scapy.all import *
from time import sleep

ServerSocket = socket.socket()
ServerSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
host = '127.0.0.1'
port = 1233
ThreadCount = 0         
try:
    ServerSocket.bind((host, port))
except socket.error as e:
    print(str(e))

print('Waitiing for a Connection..')
ServerSocket.listen(5)

def chunks(lst, n):
    "Yield successive n-sized chunks from lst"
    for i in range(0, len(lst), n):
        yield lst[i:i+n]

def threaded_client(connection):

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ss=StreamSocket(s,Raw)
    s.connect(("127.0.0.1", 10000))
    while True:

        ritorno = s.recv(2048)
        connection.send(ritorno)
        print(len(ritorno))

        data = connection.recv(2048)
        print(len(data))

        for chunk in chunks(data, 70):
            time.sleep(2)
            ss.send(Raw(chunk) )

        if not ritorno:
            break

        if not data:
            break


    s.close()
    connection.close()
    print("close")

while True:
    Client, address = ServerSocket.accept()
    print('Connected to: ' + address[0] + ':' + str(address[1]))
    start_new_thread(threaded_client, (Client, ))
    ThreadCount += 1
    print('Thread Number: ' + str(ThreadCount))

ServerSocket.close()

标签: pythonpython-3.xsocketssslportforwarding

解决方案


推荐阅读