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



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

首先,我想首先说我可以在没有代理的情况下做到这一点,所以我知道我的代码在没有代理的情况下可以工作,但我需要代理。我也确定我的 CONNECT 请求有效,因为我在之后收到"200 连接已建立"。

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

在此之前,我尝试不指定 ssl 版本,但我得到了"错误的版本"。因此,在所有这些测试之后,我无法弄清楚要使用哪个 ssl 版本以及为什么,我也无法确认 sslv3 是否有效,因为我得到了上面所说的错误。我确信我的代理请求发光有效,但我也可能在这方面弄错了。

我的问题是我在这里会做错什么?特别是 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.1rnHost: site.comrnrn".encode())
#s = wrap_socket(s)
s.send("CONNECT site.com:443 HTTP/1.1rnHost: site.comrnrn".encode())
#s = wrap_socket(s)

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

最新更新