其他分享
首页 > 其他分享> > Socks 协议

Socks 协议

作者:互联网

SOCKS 4

下面是客户端向SOCKS 4代理服务器,发送的连接请求包的格式(以字节为单位):

VN CD DSTPORT DSTIP USERID NULL
1 1 2 4 variable 1

代理服务器而后发送回应包(以字节为单位):

VN CD DSTPORT DSTIP
1 1 2 4

如果请求被拒绝,SOCKS服务器马上与客户端断开连接;如果请求被允许,代理服务器就充当客户端与目的主机之间进行双向传递,对客户端而言,就如同直接在与目的主机相连。

SOCKS 4a

SOCKS 4A是SOCKS 4协议的简单扩展,允许客户端对无法解析域名的目的主机进行访问。

客户端对DSTIP的头三个字节设定为NULL,最后一个字节为非零;对应的IP地址就是0.0.0.x,其中x是非零,这当然不可能是目的主机的地址,这样即使客户端可以解析域名,对此也不会发生冲突。USERID以紧跟的NULL字节作结尾,客户端必须发送目的主机的域名,并以另一个NULL字节作结尾。CONNECT和BIND请求的时候,都要按照这种格式(以字节为单位):

VN CD DSTPORT DSTIP 0.0.0.x USERID NULL HOSTNAME NULL
1 1 2 4 variable 1 variable 1

使用4a协议的服务器必须检查请求包里的DSTIP字段,如果表示地址0.0.0.x,x是非零结尾,那么服务器就得读取客户端所发包中的域名字段,然后服务器就得解析这个域名,可以的话,对目的主机进行连接。

SOCKS5

SOCKS5比SOCKS4a多了验证、IPv6、UDP支持。创建与SOCKS5服务器的TCP连接后客户端需要先发送请求来确认协议版本及认证方式,格式为(以字节为单位):

VER NMETHODS METHODS
1 1 1-255

服务器从客户端提供的方法中选择一个并通过以下消息通知客户端(以字节为单位):

VER METHOD
1 1

之后客户端和服务端根据选定的认证方式执行对应的认证。

认证结束后客户端就可以发送请求信息。如果认证方法有特殊封装要求,请求必须按照方法所定义的方式进行封装。

SOCKS5请求格式(以字节为单位):

VER CMD RSV ATYP DST.ADDR DST.PORT
1 1 0x00 1 动态 2

服务器按以下格式回应客户端的请求(以字节为单位):

VER REP RSV ATYP BND.ADDR BND.PORT
1 1 0x00 1 动态 2

SOCKS5 用户名密码认证方式

在客户端、服务端协商使用用户名密码认证后,客户端发出用户名密码,格式为(以字节为单位):

鉴定协议版本 用户名长度 用户名 密码长度 密码
1 1 动态 1 动态

鉴定协议版本目前为 0x01 。

服务器鉴定后发出如下回应:

鉴定协议版本 鉴定状态
1 1

其中鉴定状态 0x00 表示成功,0x01 表示失败。

标签:协议,ADDR,DST,SOCKS,Socks,请求,客户端,字节
来源: https://www.cnblogs.com/dwk8/p/16057879.html