Как подключиться к серверу сокетов 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 ответ

Вы находитесь в socksTCP-соединение с 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())
Другие вопросы по тегам