代理在SSL连接下无法正常工作
我正在尝试使用tor、socksipy和ssl来代理一个ssl连接。我的客户端代码如下:
import socks, ssl
s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", 9050)
ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
ssl_sock.connect(('127.0.0.1', 443))
服务器只接受连接,并打印getpeername
。
无论我给它一个有效的代理还是无效的代理,peer名称总是显示为127.0.0.1。这意味着客户端不会报错,它会照样连接。
我该如何让它通过代理连接呢?
1 个回答
-1
我终于搞明白了,所以我把这个答案留在这里,方便以后参考。
第一个问题是我试着连接到 127.0.0.1
。因为请求是通过代理发送的,代理会尝试连接到 127.0.0.1
,这就意味着它在连接自己,而不是连接到我的电脑。为了让请求能正确到达我的电脑,我需要配置我的路由器,把443端口的请求转发到我的笔记本电脑上,然后把 127.0.0.1
替换成我路由器的IP地址。
解决了这个问题后,我发现 socksipy 和 ssl 的配合不是很好。我必须在包装之前先调用 connect
方法来连接套接字,否则会出现握手失败的情况。代码变成了:
import socks, ssl
s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", 9050)
s.connect(('127.0.0.1', 443))
ssl_sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
之后,一切都正常工作了。