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 握手的一部分,这会导致握手失败并出现奇怪的错误.
我正在尝试通过套接字连接到 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 握手的一部分,这会导致握手失败并出现奇怪的错误.