首页 > 解决方案 > 在 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_connsocks套接字,则似乎请求实际上不是通过代理发送的。例如,如果我捕获我的网络流量,我可以在“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))

我的程序有问题吗?

标签: sslsocks

解决方案


推荐阅读