I'm trying to use tor, socksipy and ssl to proxy a ssl connection. My client looks like this:
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))
The server just accepts connections and prints getpeername
.
The peer name is always 127.0.0.1. It doesn't even matter if I give it a non-valid proxy. The client won't complain, it will connect anyway.
How do I make it connect through the proxy?
I managed to figure it out so I will leave the answer here for future reference.
The first problem was that I tried to connect to
127.0.0.1
. As the request was proxied, the proxy would try to connect to127.0.0.1
, so it would try to connect to itself, not to me. I had to configure my router to forward requests on port 443 to my laptop and then I replaced127.0.0.1
with my routers IP.After that was out of the way, I found out that socksipy doesn't play very well with ssl. I had to call
connect
on the socket before wrapping it, otherwise I'd get a handshake failure. The code became:After that, everything was working fine.