shadowsocks源码解读(一):基本流程

  • 2016-12-22
  • 4,047
  • 0

shadowsocks

shadowsocks作者已经被约谈了,所以关于它的介绍就省略了,懂的人自然懂。

shadowsocks分为客户端和服务端,服务端运行在能浏览墙外网页的服务器,客户端运行在需要翻墙的主机,目前支持Linux、Windows、Android、IOS等主流操作系统。

shadowsocks运行原理

运行原理很简单,SS Local和SS Server分别运行在客户端和服务端,SS Local会有一个socket监听本地端口(默认是1080),并会提供 socks v5 协议接口与本地进程建立TCP连接。当本地进程与SS Local建立连接后,发送一个包含目标服务的地址和端口号的请求包给SS Local,即图中1)过程。SS Local 接收到请求包之后,与SS Server建立连接并发送加密后的请求包,即图中2)过程,SS Server接受请求包并解密,请求目标服务网址返回数据,即图中3)、4)过程。之后将返回的数据加密后传回给SS Local,即图中5)过程,再传给本地进程,即图中6)过程。这就是一整个shadowsocks的工作流程。

很多人会疑惑,为什么正常的请求经过GFW之后会被墙,shadowsocks同样会经过GFW是怎么不被墙的呢?
通常情况下一个正常的请求经过GFW之后,GFW通过分析流量特征达到干扰的目的,但是SS经过GFW的数据是加密后的正常TCP包,没有明显特征码所以无法对通讯数据解密,因此不会受到干扰。

shadowsocks源码

shadowsocks有Python版和Go版,这里只介绍Python版。

其中主要包括 eventloop.py、tcprelay.py、udprelay.py、asyncdns.py模块。这里主要介绍TCP模式。

程序的入口可以从server.py开始看,主要工作流程是:先读取配置项,对需要监听的端口分别建立tcprelay.TCPRelay和udprelay.UDPRelay,TCPRelay和UDPRelay类会创建一个socket对端口进行监听。然后将这两个对象加入到eventloop.EventLoop里。然后启动eventloop.EventLoop循环,当eventloop.EventLoop接收到事件时,会调用相应的handle_event进行处理。

大致运行流程就是这样,后面还会针对各个模块的具体流程进行详细地分析。

参考资料:
* 写给非专业人士看的 Shadowsocks 简介
* shadowsocks源码分析:ssserver

链接:https://www.ioiogoo.cn/2016/12/22/shadowsocks源码解读(一):基本流程/
本站所有文章除特殊说明外均为原创,转载请注明出处!

评论

还没有任何评论,你来说两句吧