跳到主要内容

3. 基于 TCP 的客户端程序 (Procedure for TCP-based clients)

当基于 TCP 的客户端希望建立到只能通过防火墙访问的对象的连接时 (此判断由实现决定), 它必须在 SOCKS 服务器系统上打开到适当 SOCKS 端口的 TCP 连接。SOCKS 服务通常位于 TCP 端口 1080。如果连接请求成功, 客户端进入要使用的认证方法的协商, 使用所选方法进行认证, 然后发送中继请求。SOCKS 服务器评估请求, 并建立适当的连接或拒绝它。

客户端连接到服务器, 并发送版本标识符/方法选择消息:

                +----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1 to 255 |
+----+----------+----------+

VER 字段对于此版本的协议设置为 X'05'。NMETHODS 字段包含 METHODS 字段中出现的方法标识符八位字节的数量。

服务器从 METHODS 中给出的方法之一中选择, 并发送 METHOD 选择消息:

                      +----+--------+
|VER | METHOD |
+----+--------+
| 1 | 1 |
+----+--------+

如果所选 METHOD 为 X'FF', 则客户端列出的方法均不可接受, 客户端必须 (MUST) 关闭连接。

当前为 METHOD 定义的值为:

  • X'00' 不需要认证 (NO AUTHENTICATION REQUIRED)
  • X'01' GSSAPI
  • X'02' 用户名/密码 (USERNAME/PASSWORD)
  • X'03' 到 X'7F' IANA 分配 (IANA ASSIGNED)
  • X'80' 到 X'FE' 保留供私有方法使用 (RESERVED FOR PRIVATE METHODS)
  • X'FF' 无可接受方法 (NO ACCEPTABLE METHODS)

然后客户端和服务器进入特定于方法的子协商。

方法相关子协商的描述出现在单独的备忘录中。

为此协议开发新 METHOD 支持的开发者应联系 IANA 获取 METHOD 编号。应参考已分配号码文档以获取 METHOD 编号及其对应协议的当前列表。

合规实现必须 (MUST) 支持 GSSAPI, 并且应该 (SHOULD) 支持用户名/密码认证方法。