Как подключиться к серверу сокетов HTTPS через прокси-сервер SOCKS4
Я пытаюсь подключиться к своему HTTPS-серверу через прокси-сервер SOCKS4, но мне кажется, что он не работает.
Вот мой код:
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, заработало.
1 ответ
Вы находитесь в
socks
TCP-соединение с TLS-портом HTTPS-сервера перед созданием
ssl
контекст. Что хорошо, однако
SSLSocket
который возвращает, будет автоматически вызывать для согласования сеанса 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())