0%

Socks v5

1. 基于 TCP 客户端的处理过程

客户端和服务端建立连接后, 客户端将发送请求来协商版本和认证方法:

VER NMETHODS METHODS
1 1 1 ~ 255
  • VER 协议版本. Socks5 协议中, VER 被置为 X’05’
  • NMETHODS METHODS 中出现的认证方法的个数. 客户端提供多种认证方法供服务端选择.
  • 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’
  • CMD
    • CONNECT X’01’
    • BIND X’02’
    • UDP ASSOCIATE X’03’
  • RSV 保留 (RESERVED)
  • ATYP DST.ADDR 的地址类型 address type of following address
    • IP V4 address: X’01’, 4个字节
    • DOMAINNAME: X’03’, 字段的第一个字节是以字节为单位的该域名的长度, 之后是域名, 中间没有结束符 NUL (X’00’)
    • IP V6 address: X’04’, 16字节
  • DST.ADDR 目标地址 desired destination address
  • DST.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’
  • REP Reply field:
    • X'00' succeeded
    • X'01' general SOCKS server failure
    • X'02' connection not allowed by ruleset
    • X'03' Network unreachable
    • X'04' Host unreachable
    • X'05' Connection refused
    • X'06' TTL expired
    • X'07' Command not supported
    • X'08' Address type not supported
    • X'09' ~ X'FF' unassigned
  • RSV RESERVED 必须被置为 X’00’
  • ATYP address type of following address
    • IP V4 address: X'01'
    • DOMAINNAME: X'03'
    • IP V6 address: X'04'
  • BND.ADDR server bound address
  • BND.PORT server bound port in network octet order

2. Resource