SOCKS4 包含一个以零字节结尾的可变长度 USERID 字符串。服务器按其策略解释该标识符;协议不会在其后跟随 SOCKS5 用户名/密码子协商。

向文档地址 203.0.113.8 的 443 端口发起、USERID 为空的 SOCKS4 CONNECT 请求是:

04 01 01 bb cb 00 71 08 00

第九个字节 0x00 终止该空字段。它不是字符 0(其 ASCII 值为 0x30)。省略它会使 USERID 不完整。

服务器期望什么

当服务不要求标识符时,空标识符可能是合适的。如果服务要求特定标识符或其他访问机制,请遵循其文档化策略。所提供的名称只有在服务器验证它时才确立身份。

SOCKS4a 扩展了目标主机名的处理;它并不增加 SOCKS5 认证。需要 SOCKS5 账户的服务需要兼容的客户端和方法。把密码放进 SOCKS4 USERID 不能替代该交换,还可能泄露无关的凭据。

遇到拒绝时,请分别检查 SOCKS 版本、请求的目标和用户策略。

相关文章