【问题标题】:Python sockets proxy wrong version of ssl and weird byte responsePython套接字代理错误版本的ssl和奇怪的字节响应
【发布时间】:2020-10-09 23:17:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: python python-3.x sockets ssl httprequest


    【解决方案1】:
    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 握手的一部分,这会导致握手失败并出现奇怪的错误。

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多