Ternick
@Ternick

Почему библиотека python-socks при подключении к socsk5 не использует выданный ip:port?

Доброго времени суток.

Я исследовал поведение библиотеки 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()


Почему так?
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
по сути это противоречит rfc1928

хорошо бы , если бы Вы процитировали место в RFC поторое противоречит
www.codenet.ru/webmast/socks51.php

думаю, что есть некоторое непонимание ввиду не полной разжевываемости в RFC основных терминов, подразумевается что читающие их и так знают

на деле же все просто - SOCKS сервер эмулирует соединение как от браузера, для этого и выделяется порт, ну и исходящий IP если он другой, к SOCKS клиенту это не имеет и не может иметь никакого отношения - сами подумайте, куда ему переключаться если на том IP закрыты все входящие ?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы