使用 socks4 时的认证方式

Posted

技术标签:

【中文标题】使用 socks4 时的认证方式【英文标题】:authentication method when using socks4 【发布时间】:2012-01-30 15:11:16 【问题描述】:

我有一个 socks4 服务器,用于将来自不同类型应用程序(http、ftp 等)的请求代理到它们的目的地。

我知道 socks4 没有定义应用程序以任何方式进行身份验证的方式(它仅在客户端连接到服务器时指定一个 可选 用户名,但您似乎无法告诉客户端应该发送该信息以便服务器中继请求)

有没有办法通过常规应用协议(http、ftp 等)理解的 socks4 实现某种身份验证?

【问题讨论】:

【参考方案1】:

了解SOCKS protocol 的工作原理。

SOCKS v4/4a 响应的第二个字节是一个状态值,指示客户端的请求是被接受还是被拒绝(以及为什么)。在这种情况下,您可能需要使用状态值0x5C(请求失败,因为客户端未运行identd 或无法从服务器访问)和0x5D(请求失败,因为客户端的identd 无法确认请求中的用户 ID 字符串)。这将使请求的用户名字段必须包含有效且可识别的值。当然,这不是真正的身份验证,因为客户端可以运行 ident 服务器来报告它想要的任何内容。

否则,请改用 SOCKS v5,它支持真正的服务器端身份验证。

【讨论】:

感谢您的回报。我还看到,服务器可以指定这些错误代码,以便客户端使用“正确的身份验证”重试问题是客户端似乎忽略了这些错误代码:尝试使用 IE 和聊天客户端 - > 他们没有打扰要求用户更改用户名。 你不能强迫客户端做某事,你只能报告服务器需要什么。在 SOCKS v4/4a 中,没有真正的用户名 persay,它更多的是客户端机器标识符,这就是为什么它是可选的。 SOCKS v4/4a 服务器可以拒绝不允许连接到它的机器,但这与身份验证不同。 Hense SOCKS v5. 是的,这就是问题所在。服务器可以拒绝请求,但应用程序用户最终会得到非功能性服务,而根本不知道会发生什么。在 Internet Explorer 的情况下,您不能强制浏览器发送其他凭据。 被接受为答案,因为没有解决所描述的问题。 Socks4 没有定义真正的认证机制。

以上是关于使用 socks4 时的认证方式的主要内容,如果未能解决你的问题,请参考以下文章

公有云API的认证方式:Token认证和AK/SK认证

SIP 认证方式

ios开发使用Basic Auth 认证方式

一个简单的MariaDB认证插件demo

mysql8认证方式不兼容的问题

[接口测试_B] 11 requests的身份认证方式(文末附有系列文章)