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) 支持用户名/密码认证方法。