使用HTTP隧道中的套接字

时间:2019-05-08 16:55:29

标签: python multithreading sockets python-multithreading http-tunneling

我目前正在根据MITM做一些HTTP tunnel

为此,我从BaseHTTPRequestHandler实现了do_CONNECT方法,如下所示:

def do_CONNECT(self):
    address = self.path.split(":", 1)
    address[1] = int(address[1]) or 443
    try:
        coServ = socket.create_connection(address, timeout=self.timeout)
    except Exception as e:
        self.send_error(502)
        return
    self.send_response(200, "Connection Established")
    self.end_headers()

    my_function(self.connection, coServ)

    # VERY IMPORTANT to avoid looping
    self.close_connection = True

当前,my_function在套接字上完成它需要做的一切(转发消息),然后do_CONNECT返回,TCPServer .close_request从客户端关闭套接字( self.connection)。一切都按预期进行。

我通过ThreadingHTTPServer为RequestHandler服务。

我想使用套接字,尤其是来自客户端的套接字,来自另一个线程的套接字。问题是,如果my_function仅存储self.connection,那么它将由TCPServer关闭。然后,我必须等待my_function,但这只会使一个线程空闲。此外,我必须决定何时关闭该线程

有没有人有更好的解决方案,例如轻松禁用套接字关闭或复制套接字?

我想这最终不是一件坏事,因为当我想关闭连接并完成do_CONNECT时,我可以放一个释放的锁。

0 个答案:

没有答案