1. 基于 TCP 客户端的处理过程
客户端和服务端建立连接后, 客户端将发送请求来协商版本和认证方法:
| VER | NMETHODS | METHODS |
|---|---|---|
| 1 | 1 | 1 ~ 255 |
VER协议版本. Socks5 协议中, VER 被置为 X’05’NMETHODSMETHODS 中出现的认证方法的个数. 客户端提供多种认证方法供服务端选择.METHOD验证方法X'00'无验证需求X'01'通用安全服务应用程序接口(GSSAPI)X'02'用户名/密码(USERNAME/PASSWORD)X'03' ~ X'7F'IANA 分配(IANA ASSIGNED)X'80' ~ X'FE'私人方法保留(RESERVED FOR PRIVATE METHODS)
服务端选择其中一种认证方法并返回:
| VER | METHOD |
|---|---|
| 1 | 1 |
如果选择的认证方法值为 X'FF', 则表示没有接受任何一种由客户端给出的认证方法, 客户端必须关闭连接.
协商过程结束后, 客户端将发送详细的请求信息.
如果协商的方法中有以完整性检查和/或安全性为目的的封装, 这些请求必须按照该方法所定义的方式进行封装.
| VER | CMD | RSV | ATYP | DST.ADDR | DST.PROT |
|---|---|---|---|---|---|
| 1 | 1 | X’00’ | 1 | Variable | 2 |
VER协议版本: X’05’CMDCONNECTX’01’BINDX’02’UDPASSOCIATE X’03’
RSV保留 (RESERVED)ATYPDST.ADDR 的地址类型 address type of following addressIP V4 address: X’01’, 4个字节DOMAINNAME: X’03’, 字段的第一个字节是以字节为单位的该域名的长度, 之后是域名, 中间没有结束符 NUL (X’00’)IP V6 address: X’04’, 16字节
DST.ADDR目标地址 desired destination addressDST.PORT目标端口 desired destination port in network octet order
服务端将根据请求, 以如下格式返回:
| VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
|---|---|---|---|---|---|
| 1 | 1 | X’00’ | 1 | Variable | 2 |
VER协议版本: X’05’REPReply field:X'00'succeededX'01'general SOCKS server failureX'02'connection not allowed by rulesetX'03'Network unreachableX'04'Host unreachableX'05'Connection refusedX'06'TTL expiredX'07'Command not supportedX'08'Address type not supportedX'09' ~ X'FF'unassigned
RSVRESERVED 必须被置为 X’00’ATYPaddress type of following addressIP V4 address:X'01'DOMAINNAME:X'03'IP V6 address:X'04'
BND.ADDRserver bound addressBND.PORTserver bound port in network octet order