Почему прокси-сервер, используемый python-socks, не выполняет переподключение на новый порт после авторизации с клиентом, как требует стандарт SOCKS5? Используется ли какой-либо документ, который регулирует это поведение?
Нет информации о конкретной библиотеке "python-socks", так как существует несколько разных реализаций SOCKS прокси-серверов для Python. Однако, в общем случае можно предположить, что если библиотека не использует предоставленный ip:port для подключения к SOCKS5 прокси-серверу, то возможно указаны некорректные параметры или имеется ошибка в коде. Относительно вопроса о переподключении на новый порт после авторизации, прокси-сервер SOCKS5 не обязан выполнять эту операцию. В протоколе SOCKS5 переподключение на новый порт требуется только в случаем, когда клиент запрашивает у прокси-сервера создание исходящего UDP-соединения. В остальных случаях прокси-сервер SOCKS5 устанавливает TCP-соединение с удаленным сервером и пересылает данные между клиентом и сервером без изменения порта соединения. Регламентирующий поведение SOCKS5 протокол описан в RFC 1928. Если библиотека выполняет SOCKS5 протокол, она вероятно будет соответствовать описанным в RFC требованиям.
Практически, это нарушает стандарт RFC1928. Было бы полезно, если бы вы указали место в RFC, которое это противоречит. (ссылка на www.codenet.ru/webmast/socks51.php) Возможно, возникает путаница из-за недостатка ясности в основных терминах RFC. Предполагается, что читатель уже знаком с ними. Однако, на самом деле все просто: SOCKS-сервер эмулирует соединение от браузера, используя для этого порт и, при необходимости, другой IP-адрес. Это абсолютно не связано с SOCKS-клиентом. Представьте, куда SOCKS-клиент может переключиться, если все входящие соединения закрыты на этом IP-адресе?