我目前正在根据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
时,我可以放一个释放的锁。