Socks代理协议的了解与Tor的匿名原理




前言:

来简单了解一下

 

 


Socks代理协议:

OSI七层模型:

其中,像是IP这些东西,属于网络层,TCP/UDP属于传输层,而Socks则属于会话层。

  • 维基百科:

SOCKS是一种网络传输协议,防火墙安全会话转换协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS是”SOCKetS”的缩写。

当防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。

 

Socks代理协议

全能代理,就像有很多跳线的转接板,它只是简单地将一端的系统连接到另外一端。支持多种协议,包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080。

当应用客户在需请求外部网络的应用服务器服务时,首先与SOCKS服务器建立连接。它向SOCKS服务器发出连接请求及相关的信息,如所支持的鉴别方法列表。SOCKS服务器接到消息后,检查安全配置策略,返回服务器选择的安全鉴别方法。SOCKS客户再对服务器所作选择进行验证,SOCKS客户及服务器分别根据选择的鉴别方法进行处理。SOCKS客户向SOCKS服务器发送代理请求,SOCKS服务器处理客户的请求,设置代理链路,建立与应用服务器的连接,并向SOCKS客户发送设置状态。而后SOCKS服务器在SOCKS客户与应用服务器之间中转数据。

采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。Socks是个电路级的底层网关,是DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks 不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks 代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。它通常绑定在代理服务器的1080端口上。如果您在企业网或校园网上,需要透过防火墙或通过代理服务器访问 Internet就可能需要使用SOCKS。一般情况下,对于拨号上网用户都不需要使用它。注意,浏览网页时常用的代理服务器通常是专门的http代理,它和SOCKS是不同的。因此,您能浏览网页不等于 您一定可以通过SOCKS访问Internet。 常用的防火墙,或代理软件都支持SOCKS,

 

与HTTP代理的对比:

SOCKS工作在比HTTP代理更低的层次:SOCKS使用握手协议来通知代理软件其客户端试图进行的连接SOCKS,然后尽可能透明地进行操作,而常规代理可能会解释和重写报头(例如,使用另一种底层协议,例如FTP;然而,HTTP代理只是将HTTP请求转发到所需的HTTP服务器)。虽然HTTP代理有不同的使用模式,CONNECT方法允许转发TCP连接;然而,SOCKS代理还可以转发UDP流量和反向代理,而HTTP代理不能。HTTP代理通常更了解HTTP协议,执行更高层次的过滤(虽然通常只用于GET和POST方法,而不用于CONNECT方法)。

SOCKS

Bill希望通过互联网与Jane沟通,但他们的网络之间存在一个防火墙,Bill不能直接与Jane沟通。所以,Bill连接到他的网络上的SOCKS代理,告知它他想要与Jane创建连接;SOCKS代理打开一个能穿过防火墙的连接,并促进Bill和Jane之间的通信。

有关SOCKS协议的技术细节的更多信息,请参阅下面的部分。

HTTP

Bill希望从Jane的Web服务器下载一个网页。Bill不能直接连接到Jane的服务器,因为在他的网络上设置了防火墙。为了与该服务器通信,Bill连接到其网络的HTTP代理。他的网页浏览器与代理通信的方式与他直接连接Jane的服务器的方式相同;也就是说,网页浏览器会发送一个标准的HTTP请求头。HTTP代理连接到Jane的服务器,然后将Jane的服务器返回的任何数据传回Bill。

 


TOR(The Onion Network):

大名鼎鼎的Tor网络是由两种东西组成的:中继服务器目录服务器

  • 中继服务器:负责中转数据包的路由器,可以理解为代理(由Tor的志愿者提供,至今已有上千)
  • 目录服务器:保存Tor网络中所有中继服务器列表相关信息(保存中继服务器地址、密钥)

Tor的使用主要分为两个大部分,建立通信线路发送数据包,拿个例子来说:

如下,就是我们与Tor网络与目标服务器

  • 建立通信线路

当我们要用Tor网络去访问目标服务器,我们会从目录服务器中的得到三个来自于Tor网络的中继服务器的位置信息,这里就是A、B、C

然后我们会与A建立一个通信,此时我们即得到加密用的公钥A(A有对应的解密的私钥),并且与A算是建立了连接。

我们又从目录服务器中选择出了中继B,将B的一些位置数据用公钥A加密后发送给了A,A用私钥解密后即得到了B的IP,A与B发起通信,并得到B的公钥,然后把公钥返回给客户端。

同样的道理,B与C建立通信,并由 C⇒B⇒A⇒客户 最后将C的公钥转给客户端(此时,客户端就有了公钥A、公钥B、公钥C)

到这里,客户端与A、B、C三个中继服务器都建立了circuit(线路)

  • 发送数据包:

建立好线路之后,我们的客户端就开始处理数据,它将数据先用公钥A加密,再用公钥B加密,再用公钥C加密。

然后把数据包发送给A,A用自己的私钥解密最外层的密码,再将数据包转发给B,B用自己的私钥解密第二层的密码,再将数据包转发给C,C再用自己的私钥解密最后一层密码,即得到客户端发送的数据。

最后C将数据发送给目标服务器。

层层加密,再层层解密,这也就是它叫洋葱(onion)路由的缘故

画的丑,大家见谅~

 

 


 

 

 

 

博客:is-hash.com

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

 

 

发布了38 篇原创文章 ·
获赞 2 ·
访问量 3865