Socks协议

来源:互联网 发布:java 实现 ping ip 编辑:程序博客网 时间:2024/06/05 03:13
一、基本概念
利用Socks协议,可以使得两个节点之间的连接通过一个中转节点中转,从而可以加密数据,穿越防火墙的限制。
Socks协议中有两种身份:Socks Client和Socks Server。
Socks协议工作在OSI七层体系的第5层——会话层。

二、基本原理
现在有A和B两个节点,A节点上运行Socks Client实现程序,B节点上运行Socks Server实现程序。
现在A想要请求网络服务,可以将该请求传递给A上的Socks Client,然后Socks Client与Socks Server建立数据连接,该连接可以使用选定的加密算法进行加密,接着Socks Client可以将A的网络服务请求传递给Socks Server,最后由Socks Server代为进行网络服务请求,并将得到的请求结果数据原路返回给A。

注意:在以上过程中,只有Socks Client和Socks Server之间的连接可以采用选定的加密算法进行加密

三、用途
正如基本概念中所述,使用Socks协议可以达到“加密数据,穿越防火墙”的目标。
比如有以下两个情形。
3.1、情形1
现在有A,B两个节点,另有防火墙C,A处于C内,B处于C外,C能够监听与A进行的连接,如果连接中出现特定的关键词,C能够将该连接断开。
现在A想要突破防火墙C的限制,使得可以与B进行连接,传输任意数据。
可以采用Socks协议。
具体方案如下:
另外搭设一个节点D,D必须在C外。
D上运行Socks Server实现程序,A上运行Socks Client实现程序。
现在A与B的连接通过D进行,具体是A对B的连接请求被传递给A上的Socks Client,然后Socks Client与D上的Socks Server连接,Socks Server再代为请求与B进行连接,由于A上的Socks Client与D上的Socks Server之间的连接可被Socks协议加密算法加密,因而防火墙C就不能够检查关键词是否存在,也就不能够断开A与D的连接,自然也就不能断开A与B通过D而得到的连接。

3.2、情形2
现在有A,B两个节点,另有防火墙C,A处于C内,B处于C外,C中把B加入了黑名单,使得在C内的A不能够访问B
现在A想要突破防火墙C的限制,使得可以与B进行连接。
可以采用Socks协议。
具体方案如下:
另外搭设一个节点D,D必须在C外,且要求满足D节点不在C的黑名单内。
D上运行Socks Server实现程序,A上运行Socks Client实现程序。
现在A与B的连接通过D进行,具体是A对B的连接请求被传递给A上的Socks Client,然后Socks Client与D上的Socks Server连接,Socks Server再代为请求与B进行连接,由于D不在C的黑名单内,A与D可进行连接。从而A就可通过D与B连接。

四、协议实现
4.1、Socks Server的实现程序
Antinat
Dante
Srelay
SS5
Sun Java System Web Proxy Server
WinGate
OpenSSH中的sshd实现程序
shadowsocks中的server实现程序

4.2、Socks Client的实现程序
OpenSSH中的ssh实现程序
Putty

shadowsocks中的client实现程序


参考文献:

[1]https://en.wikipedia.org/wiki/SOCKS




0 0
原创粉丝点击