0

我正在尝试通过 SOCKS4 代理连接到我的 HTTPS 服务器,但它似乎无法正常工作。

这是我的代码:

headers = "GET / HTTP/1.1\r\nHost: domain.com\r\n\r\n"
import socks
import ssl
conn = socks.socksocket()
conn.set_proxy(socks.SOCKS4, host, port)
conn.connect(("domain.com", 443))
conn = ssl.create_default_context().wrap_socket(conn, server_hostname="domain.com")
conn.send(headers.encode())

运行该代码后,我检查了我的网站日志,但没有任何反应。但是,如果我将connect()端口更改为 80,它就可以工作。

4

1 回答 1

0

在创建上下文之前,您正在与 HTTPS 服务器connect()socksTLS 端口建立 TCP 连接。ssl这很好,但是只有当你绕过它的方法被调用时SSLSocketwrap_socket()返回的才会自动调用do_handshake()协商 TLS 会话。connect()因此,您需要在返回do_handshake()之后和调用之前手动调用,例如:wrap_socket()send()

headers = "GET / HTTP/1.1\r\nHost: domain.com\r\n\r\n"
import socks
import ssl
conn = socks.socksocket()
conn.set_proxy(socks.SOCKS4, host, port)
conn.connect(("domain.com", 443))
conn = ssl.create_default_context().wrap_socket(conn, server_hostname="domain.com")
conn.do_handshake()
conn.send(headers.encode())
于 2021-11-21T02:44:47.943 回答