ssl - 在 socks5 套接字上的 Python3 ssl wrap_socket
问题描述
我正在尝试使用ssl
模块建立 ssl 连接(出于某种原因,我必须使用这种低级方法),并使用socks
模块使其通过代理服务器(例如socks5h://127.0.0.1:12345
下面)。但是,我无法让请求通过代理服务器。
ssl
我已经有一个使用模块连接的工作程序:
import socket
import ssl
import socks
cli_context = ssl.create_default_context()
cli_conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn = cli_context.wrap_socket(cli_conn, server_hostname='bing.com')
conn.connect(('bing.com', 443))
但是,如果我更改cli_conn
为socks
套接字,则似乎请求实际上不是通过代理发送的。例如,如果我捕获我的网络流量,我可以在“bing.com”上看到 DNS 解析。如果我删除wrap_socket
线路并调用cli_conn.connect
,请求(正确)通过代理。
import socket
import ssl
import socks
cli_context = ssl.create_default_context()
cli_conn = socks.socksocket(socket.AF_INET, socket.SOCK_STREAM)
cli_conn.set_proxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 12345, True)
conn = cli_context.wrap_socket(cli_conn, server_hostname='bing.com')
conn.connect(('bing.com', 443))
我的程序有问题吗?