O campo USERID do SOCKS4 no fio
Explica o campo USERID do SOCKS4 e por que sua interpretação depende do servidor, e não da autenticação por nome de usuário/senha do SOCKS5.
O SOCKS4 inclui uma string USERID de comprimento variável terminada por um byte zero. O servidor interpreta esse identificador conforme sua política; o protocolo não o segue com uma subnegociação de nome de usuário/senha do SOCKS5.
Uma solicitação SOCKS4 CONNECT para o endereço de documentação 203.0.113.8, porta 443, com USERID vazio é:
04 01 01 bb cb 00 71 08 00
O nono byte, 0x00, encerra o campo vazio. Não é o caractere 0, cujo valor ASCII é 0x30. Omiti-lo deixa o USERID incompleto.
O que o servidor espera
Um identificador vazio pode ser adequado quando o serviço não exige nenhum. Se ele exige um identificador específico ou outro mecanismo de acesso, siga sua política documentada. Um nome fornecido estabelece identidade somente se o servidor o validar.
O SOCKS4a amplia o tratamento do nome do host de destino; não adiciona autenticação SOCKS5. Um serviço que exige uma conta SOCKS5 precisa de um cliente e método compatíveis. Colocar uma senha no USERID do SOCKS4 não substitui essa troca e pode revelar uma credencial não relacionada.
Em caso de rejeição, verifique separadamente a versão do SOCKS, o destino solicitado e a política do usuário.