SOCKS代理协议的学习点滴【SOCKS 5部分】

SOCKS 5协议相对于SOCKS4协议有哪些拓展呢? 【1】首先在总体上有更强的认证机制,记得,SOCKS4协议的认证只是在SK客户端发起链接时候捎带在请求报文中:USERID,也就是使用了IDENT协议来进行认证。而在SOCKS5(RFC 1928)协议中却将整个认证过程独立出来了,所以在SK客户端链接到SK服务器之前先进行认证,认证是怎么个情况呢?协议有描述的,(协议就是干这个的,专门规定整个交流过程),为了认证,首先要协商认证方法,然后才开始按照协商选择的方法来进行认证的过程,在协商认证方法之前当然首先要确保SK客户端能建立到SK服务器的TCP链接(通常都是1080端口)。TCP链接成功之后,客户端首先发送一个版本标识/认证方法选择 报文,该报文包含的数据有,VER(版本号)+方法书目+可供选择的方法代号,服务器接收到该请求之后,会发送一个方法选择报文,告诉客户端服务器选择了哪种认证方法(比如用户名/密码认证方法)。当然若是客户机提供的认证方法都是不可用的,则服务器会发送一个方法代号为0xff的报文,则客户机会关闭链接。 方法选择确认后,接下来就会按照这个选择的认证方法开始进行认证,通常这个认证协议是独立的,如用户名和密码协议就是独立的(RFC 1413),一旦认证结束后,SK客户端就会开始发送请求链接,开始CONNECT命令的发送,当然若是之前协商的方法中要求对数据进行封装和完整性保护则要先对报文进行封装,CONNECT命令格式和V4基本一致,只是没有了USERID,多了一个保留字段和地址类型字段。SK服务器接收到CONNECT命令后会首先试图建立与远端服务器的TCP链接(套接字),然后不管成功与否都会发送一个Reply报文给SK客户端,Reply报文中包含的数据有,版本号+响应代码(0x00表示链接成功)+地址类型+BND.PORT+BND.ADDR,其中的BND.PORT指服务器与远端APP应用服务器链接的端口,BND.ADDR指相对应的IP地址,这个数据通常对SK客户端是没什么用的,因为SK客户端只会通过刚建立的TCP链接直接把数据发送给SK服务器,SK服务器负责将接收到的应用数据转发给远端应用服务器(BND.ADDR+BND.PORT便是与远端服务器链接的套接字)。代理顺利的进行了。 【2】域名和IPV6的支持,SK客户端若不知道远端应用服务器的IP地址也可以发送远端服务器的域名即可。SK服务器支持域名的解析,同时SK V5支持IPv6的地址。 【3】支持UDP协议。
posted @ 2011-08-07 14:08  _iCDev_Zhou  Views(420)  Comments(0Edit  收藏  举报