Доброго времени суток.
Я исследовал поведение библиотеки requests с использованием прокси socks5, мониторя трафик через wireshark.
По сути вся работа requests с socks5 сводится к библиотеке python-socks.
Собственно, к чему возник вопрос, я использовал прокси с login:password аутентификацией.
Как только клиент авторизовался с socks5 сервером, он передаёт ему запрос на подключение к ip:port или же домен целиком, в ответ на это сообщение socks5-сервер должен установить соединение с конечным сервером и выделить новый ip:port, на котором будет висеть подключение, которое будет передавать всё на конечный сервер.
И на этом этапе возникло интересное разногласие. Судуя по пакетам из wireshark, python-socks, не производит переподключение на выданный новый порт, а в этом же открытом подключении отправляет ClientHello и уже ведет общение с конечным сервером, хотя по сути это противоречит rfc1928 или есть все же документ, который это регулирует?
Так же в тестах python-socks, находится подтверждение подомному варианту использования. *
КЛАЦ*
Как видно, используется тоже подключение (сокет).
КОД...
sock: socket.socket = proxy.connect(
dest_host=dest_host, dest_port=url.port, timeout=timeout
)
if url.scheme == 'https':
assert ssl_context is not None
sock = ssl_context.wrap_socket(sock=sock, server_hostname=url.host)
request = 'GET {rel_url} HTTP/1.1\r\nHost: {host}\r\nConnection: close\r\n\r\n'
request = request.format(rel_url=url.path_qs, host=url.host)
request = request.encode('ascii')
sock.sendall(request)
status_code = read_status_code(sock)
sock.close()
Почему так?