Поле USERID в SOCKS4
Объясняет поле USERID в SOCKS4 и почему его интерпретация зависит от сервера, а не от аутентификации по имени пользователя и паролю SOCKS5.
SOCKS4 содержит строку USERID переменной длины, завершаемую нулевым байтом. Сервер интерпретирует этот идентификатор согласно своей политике; протокол не сопровождает его субпереговорами имени пользователя и пароля SOCKS5.
Запрос SOCKS4 CONNECT к адресу документации 203.0.113.8, порт 443, с пустым USERID выглядит так:
04 01 01 bb cb 00 71 08 00
Девятый байт 0x00 завершает пустое поле. Это не символ 0, значение ASCII которого равно 0x30. Если его опустить, USERID останется незавершённым.
Чего ожидает сервер
Пустой идентификатор может быть уместен, когда служба его не требует. Если она требует определённый идентификатор или другой механизм доступа, следуйте её документированной политике. Предоставленное имя устанавливает личность только в том случае, если сервер его проверяет.
SOCKS4a расширяет обработку имени хоста назначения; он не добавляет аутентификацию SOCKS5. Службе, требующей учётную запись SOCKS5, нужны совместимый клиент и метод. Помещение пароля в USERID SOCKS4 не может заменить этот обмен и может раскрыть посторонние учётные данные.
При отказе проверьте отдельно версию SOCKS, запрошенное назначение и пользовательскую политику.