Python 套接字代理错误的 ssl 版本和奇怪的字节响应

Python sockets proxy wrong version of ssl and weird byte response

我正在尝试通过套接字连接到 https 代理 python。

首先,我想首先说我可以在没有代理的情况下很好地完成这项工作,所以我知道我的代码没有它们也能正常工作,但我需要代理。我也确信我的 CONNECT 请求有效,因为之后我收到了“200 connection established”。

这意味着我的 ssl 部分已关闭,特别是在我的代码的 wrap_socket function/portion 中。我试过不使用 ssl(我认为它行不通,但我只是想我可以试试),它向我发送了一个奇怪的十六进制响应,在搜索它时,我发现这是因为“格式错误的 http 请求” ”。这对我来说没有意义,所以我一直尝试使用不同版本的 ssl,包括 tlsv1,最后我尝试了 sslv3。这显然在我的计算机和其他计算机上搞砸了,因为我得到一个 s = wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3) AttributeError: module 'ssl' has no attribute 'PROTOCOL_SSLv3'”””错误。

在此之前,我尝试不指定 ssl 版本,但我得到了“错误的版本”。所以,在所有这些测试之后,我无法弄清楚要使用哪个 ssl 版本以及为什么,我也无法确认 sslv3 是否有效,因为我收到了上面所说的错误。我确信我的 proxy-request-glow 有效,但我也可能在那个领域犯了错误。

我的问题是我在这里做错了什么?特别是 ssl 部分。

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try: s.connect((proxy.split(":")[0], int(proxy.split(":")[1]))) #connect to proxy
    except:
        self.proxy_errors+=1
        return

    s.send("CONNECT site.com:443 HTTP/1.1\r\nHost: site.com\r\n\r\n".encode())

    #s = wrap_socket(s)
s.send("CONNECT site.com:443 HTTP/1.1\r\nHost: site.com\r\n\r\n".encode())

#s = wrap_socket(s)

基于此代码片段,您将发送一个 CONNECT 请求,然后立即尝试将套接字升级到 TLS。但是您首先需要读取来自代理的响应(即 HTTP/1.1 200 ...。否则,对 CONNECT 请求的纯文本响应将被视为 TLS 握手的一部分,这会导致握手失败并出现奇怪的错误.