0%

Socks协议

一、基本概念

利用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进行连接,传输任意数据,但是A与B的连接不能加密。

采用Socks协议的具体方案如下:

  1. 另外搭设一个节点D,D必须在C外
  2. 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协议的具体方案如下:

  1. 另外搭设一个节点D,D必须在C外,且要求满足D节点不在C的黑名单内
  2. 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

您的支持将鼓励我继续分享!