SOCKS5 协议工作流程

简介

SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器。

socks5_百度百科

工作流程

客户端需要先与代理服务器建立 TCP 连接,SOCKS 服务的默认端口是 1080,建立成功后客户端要与代理服务器协商认证方式并完成认证,然后就可以通过代理服务器收发数据。


TCP 连接建立后,客户端会向代理服务器发送请求,包含 SOCKS 协议的版本和客户端支持的认证方式。

协议版本方法数方法编号列表
1Byte1Byte长度可变
请求格式
  • 协议版本:对于 SOCKS5 协议来说这个字段永远是 5,代表 SOCKS 的第五版协议。
  • 方法数:表示后续的方法编号列表中有多少种客户端支持的认证方法。
  • 方法编号列表:存储客户端支持的认证方法的编号,这些编号有些是 SOCKS 协议预先指定的,有些是 IANA 事后分配的,也有些是给开发者自由使用的,也有的编号代表无需认证。

代理服务器应该选择一个认证方法,并发送下面格式的请求,告知客户端被选择的认证方法。

协议版本方法编号
1Byte1Byte
响应格式

完成了认证后,客户端就可以向代理服务器发送代理请求,客户端会向代理服务器发送下面格式的请求

协议版本指令编号保留字段地址类型目标地址目标端口号
1Byte1Byte1Byte1Byte长度可变2Byte
请求格式
  • 协议版本:对于 SOCKS5 协议来说这个字段永远是 5,代表 SOCKS 的第五版协议。
  • 指令编号:包括 CONNECT 指令,用于 TCP 代理。BIND 指令,一般用于需要客户端主动接受来自服务器连接的时候。UDP ASSOCIATE 指令,用于 UDP 代理。
  • 保留字段:必须为 0。
  • 地址类型:包括 IPV4 地址,域名和 IPV6 地址。
  • 目标地址:要访问的目标服务器的地址或域名。
  • 目标端口号:于目标地址对应的端口号。

代理服务器执行相应的请求后会返回一个或者多个信息,格式如下。

协议版本结果保留字段地址类型绑定地址绑定端口号
1Byte1Byte1Byte1Byte长度可变2Byte
响应格式
  • 协议版本:对于 SOCKS5 协议来说这个字段永远是 5,代表 SOCKS 的第五版协议。
  • 结果:包含请求的结果,比如成功、常规故障、网络不可达和超时等。
  • 保留字段:必须为 0。
  • 地址类型:包括 IPV4 地址,域名和 IPV6 地址。
  • 绑定地址:即请求成功后客户端需要连接的代理服务器的地址或域名(有可能就是代理服务器本身,也可能被分配到别的代理服务器),客户端之后的通信均通过地址对应的服务器。
  • 绑定端口号:绑定地址对应的端口号。

如果代理服务器返回成功消息,则后续客户端通过绑定地址和绑定端口号与代理服务器通信,由代理服务器转发客户端的请求到目标服务器,并将目标服务器的响应转发给客户端。


如果把上面的信息化成一张简单的交互流程图就是下面这样的。

SOCKS5 通信交互流程

参考资料

本文作者:ADD-SP
本文链接https://www.addesp.com/archives/2594
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。
暂无评论

发送评论 编辑评论


上一篇
下一篇