本文主要是介绍Socks v5 及其相关协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Socks v5 及其相关协议
- SOCKS Protocol Version 5
- 1. 简介
- 2. 现有的协议
- 3. 基于 TCP 的客户端
- 4. 请求
- 5. 地址
- 6. 应答
- 7. 基于 UDP 的客户端
- 8. 安全性
- 9. 参考
- GSS-API Authentication for SOCKS V5
- Username/Password Authentication for SOCKS V5
- 1. 简介
- 2. 协商
- 3. 安全性
- Socks 服务器参考实现
- 1. 协商
- 2. 请求及处理
- 3. 转发
SOCKS Protocol Version 5
参考自 RFC1928 SOCKS Protocol Version 5。
1. 简介
在愈来愈多的网络系统中,可以使用防火墙将内部网络从外部网络(如因特网)中脱离隔绝。这种防火墙一般以应用层网关的形式工作在两网络之间,并能提供应用层协议的访问;但随着愈来愈常见的、愈来愈复杂的应用层协议的到来,有必要提供一个通用框架使得这些应用层协议能穿透防火墙。
这个框架(指 Socks)是为了 TCP/UDP 应用程序更方便地使用防火墙服务而设计的。它在概念上是处于应用层与传输层之间的“中介层”,因此其并不提供网络层等的相关服务(如 ICMP)。
2. 现有的协议
目前,已存在一个 Socks v4 协议,但它为应用程序所提供的防火墙穿透是不安全的。Socks v5 扩展了旧的协议,增加了 UDP 转发、IPv6 等的支持。
若无特别说明,所有出现在“消息格式表格”中的十进制数字均代表相应的字段的长度(以字节为单位);而某个字段的值以“X’hh’”十六进制的方式进行表示;文字“可变”则表示该字段的(值,或内容)长度是可变长的,或该长度是由数据类型字段决定的。
3. 基于 TCP 的客户端
(基于TCP的)客户端要与防火墙外的终端进行通信之前,需要先与 Socks 服务器(默认端口:1080)建立一个 TCP 连接。建立连接后:客户端与服务端握手(Negotiation,协商)——即选择认证方式并进行验证,并以此决定接受或拒绝该连接。
客户端连接到服务器后,需要立即发送“协商版本”与“认证方式”:
Version | N_Method | Methods |
---|---|---|
1字节 | 1字节 | 1~255字节 |
在该版本中,Version 字段总是为 X'05
;N_Method 字段表明了 Methods 字段的长度(以字节为单位)。服务器需要在 Methods 字段中选一个方法并返回以下消息给客户端。
Version | Method |
---|---|
1字节 | 1字节 |
若服务器返回的 Method 是 X'FF'
,则客户端必须关闭该连接(这表明服务端不支持客户端所列出的所有方法)。
其中,当前已定义的方法有:
X'00'
:无需认证;X'01'
:GSSAPI;X'02'
:用户名/密码;X'03' ~ X'7F'
:由IANA所分配的;X'80' ~ X'FE'
:为私人方法所保留的;X'FF'
:没有可支持的方法;
之后,客户端与服务端将根据所选定的验证方法进入一个“子协商过程(Sub-Negotiation)”。符合标准的 Socks v5 实现必须支持 GSSAPI 方式验证,并应支持用户名/密码方式认证。
4. 请求
一旦子协商过程结束后,客户端就要发送详细的请求信息。
Socks v5 的请求格式如下:
Version | Command | Reserve | AddressType | DestinationAddress | DestinationPort |
---|---|---|---|---|---|
1字节 | 1字节 | 1字节,总为 X'00' | 1字节 | 可变长度 | 2字节 |
其中:
- Version:
这篇关于Socks v5 及其相关协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!