之前的一篇文章,介绍代理服务器 http://lingdandan.blog.51cto.com/10697032/1773489
SOCKS是一种网络传输协议(位于会话层),主要用于客户端与外网服务器之间通讯的中间传递。
当防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。
Socks不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。它通常绑定在代理服务器的1080端口上。
为了使用socks,需要了解以下内容:
① SOCKS服务器的IP地址
② SOCKS服务所在的端口
③ 这个SOCKS服务是否需要用户认证?如果需要,您要向您的网络管理员申请一个用户和口令
墙:GFW
DNS劫持(google ...)
IP地址黑名单
基于内容拦截
翻墙
是指绕过相应的IP封锁、内容过滤、域名劫持、流量限制等,实现对网络内容的访问。
利用网络防火墙可以将组织内部的网络结构从外部网络中有效地隔离。
在实际应用中还需要一种安全的认证方式用以穿越防火墙。这个要求起源于 两个组织的网络中客户/服务 器关系的出现,这个关系需要得到控制并要求有安全的认证。
这个协议从概念上来讲是介于 应用层和传输层 之间的“中介层”。
基于TCP协议的客户
当一个基于TCP 协议的客户端希望与一个只能通过防火墙可以到达的目标(这是由实现所决定的)建立连接,它必须先建立一个与SOCKS 服务器上SOCKS 端口的TCP 连接。通常这个TCP 端口是1080。当连接建立后,客户端进入协议的“握手(negotiation)”过程:认证方式的选择,根据选中的方式进行认证,然后发送转发的要求。SOCKS 服务器检查 这个要求,根据结果,或建立合适的连接,或拒绝。
除非特别注明,所有出现在数据包格式图中的十进制数字均以字节表示相应域的长度。
1、客户端连到服务器后,然后就发送请求来协商版本和认证方法:
VER NMETHODS METHODS
1 1 1 to 255
这个版本的SOCKS 协议中,VER 字段被设置成X‘05‘。NMETHODS 字段包含了在METHODS字段中出现的 方法标示的数目(以字节为单位)(客户端可以指定多个方法组成一个方法列表供服务器端选择,这 里的NMETHODS 代表方法个数)。
2、服务器从这些给定的方法中选择一个并发送一个方法选中的消息回客户端:
VER METHOD
1 1
如果选中的消息是X’FF’,这表示客户端所列出的方法列表中没有一个方法被选中,客户端必须关 闭连接。当前定义的方法有:
X’00’ 不需要认证
X’01’ GSSAPI
X’02’ 用户名/密码
X’03’-- X’7F’ 由IANA 分配
X’80’-- X’FE’ 为私人方法所保留的
X’FF’ 没有可以接受的方法
3、然后客户和服务器进入由选定认证方法所决定的子协商过程。
4、请求
一旦子协商过程结束后,客户端就发送详细的请求信息。
如果协商的方法中有以完整性检查 和/或安全性为目的的封装,这些请求必须按照该方法所定义的 方式进行封装。
SOCKS 请求的格式如下:
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 保留
ATYP 后面的地址类型
IPV4:X’01’
域名:X’03’
IPV6:X’04’
DST.ADDR 目的地址
DST.PORT 以网络字节顺序出现的端口号
SOCKS 服务器会根据源地址和目的地址来分析请求,然后根据请求类型返回一个或多个应答。
ATYP 字段中描述了地址字段(DST.ADDR,BND.ADDR)所包含的地址类型:
X‘01‘ 基于IPV4 的IP 地址,4 个字节长
X‘03‘ 基于域名的地址,地址字段中的第一字节是以字节为单位的该域名的长度,没有结尾的NUL字节
X‘04‘ 基于IPV6 的IP 地址,16 个字节长
5、应答
一旦建立了一个到SOCKS 服务器的连接,并且完成了认证方式的协商过程,客户机将会发送一个SOCKS 请求信息给服务器。服务器将会根据请求,以如下格式返回:
VER REP RSV ATYP BND.ADDR BND.PORT
1 1 X’00’ 1 Variable 2
VER 协议版本: X’05’
REP 应答字段:
X’00’ 成功
X’01’ 普通的 SOCKS 服务器请求失败
X’02’ 现有的规则不允许的连接
X’03’ 网络不可达
X’04’ 主机不可达
X’05’ 连接被拒
X’06’ TTL 超时
X’07’ 不支持的命令
X’08’ 不支持的地址类型
X’09’ – X’FF’ 未定义
RSV 保留
ATYP 后面的地址类型
IPV4:X’01’
域名:X’03’
IPV6:X’04’
BND.ADDR 服务器绑定的地址
BND.PORT 以网络字节顺序表示的服务器绑定的段口
标识为RSV 的字段必须设为X’00’
如果选中的方法中有以完整性检查和/或安全性为目的的封装,这些应答必须按照该方法所定义的方式进行封装。
《完》
本文出自 “零蛋蛋” 博客,谢绝转载!
原文地址:http://lingdandan.blog.51cto.com/10697032/1837887