SS基本原理以及二次开发

  • 前言

说到SS(全文将以SS代替敏感词shadowsocks),其实很多从事软件、互联网相关工作的人都会比较熟悉,当你需要使用Google搜索信息的时候就可能使用到它。

SS是一款能够穿透国家防火墙的小工具,工具虽小,但效果很好,国家防火墙并没有对它下手,也许觉得没必要,毕竟只有小众人群掌握,而且程序员可能对政治话题没有任何兴趣。

  • 国家防火墙

一直在说国家防火墙,国家防火墙到底是什么?

国家防火墙又称防火长城。简单来说就是,党和国家怕我们小屁民学坏,整天吸收国外糟粕,在网络上设置了屏障,国外任何通过网络进来的信息,它都会审查,所以你不能访问国外糟粕网站的服务器,当然对方也不能给你传输任何信息。

 

  • 网络代理

所谓网络代理,其实也很好理解。举个例子,你本来想访问百度,在没使用代理的情况下,你会直接访问百度的服务器,百度的某台服务器会给你响应结果。但如果使用代理,你将访问的是代理服务器,代理服务器会将你的http请求转发给百度服务器,百度服务器将响应结果返回给代理服务器,代理服务器再将响应结果转发给你。

这样的好处是,本来你的计算机不能访问谷歌,但是代理服务器能访问谷歌,也就相当于你能访问谷歌了。

通常地,网络代理又分为两种:

Http代理只能代理http协议层的通讯,即一般人理解的网站、网页请求,其实手机app基本上也是。

而socks协议则更强大,也是一种通用的协议,各大主流浏览器IE、Chrome等,还有一些通讯软件(比如QQ)等都支持。SS采用的是socks协议的变种,或者说SS的部分模块使用了socks协议。

在下面的篇幅里,我将解释为什么使用socks5的变种,而不是标准的socks5协议。

  • 一款普通代理工具:SSH Server

首先来张SSH Server工作原理图:

 

看似没毛病,标准的socks协议,TCP长连接速度杠杠的,但这里有一个致命的问题不容忽略:

试图使用“明文”穿过防火墙发送到SSH Server时,防火墙分分钟给你识别出来,拦截了,PC端浏览器将永远得不到正确的响应结果。

  • SS

让我们来看下SS是怎么解决上述问题的:

 

 

SS客户端在本地会起一个端口(SS Local,默认是1080端口),这个端口与浏览器(或者其他需要被代理的应用程序,如QQ)通讯,这个通讯采用的是标准的、无加密的socks5协议。

而SS Local会将数据加密后,发送给真正的代理服务器SS Server,然后SS Server将数据解密,发送给真正的你想访问的服务器(比如Google,Facebook的服务器)。也就是说,穿墙的时候,数据是加密过的,防火墙要破解,就得费点周折了。

再谈加密过程:使用典型的对称加密:加密、解密使用同一密钥,双方既知道加密算法是什么,又知道密钥是什么,是不是就可以知道互相传输的是什么信息了,并愉快地在墙上穿来穿去了?

  • 二次开发Xsocks (github:https://github.com/wangleilei2010/xserver)

知道上述的原理后,是不是就可以自己搭建整个科学上网体系了?

并不是,最流行的SS服务器端程序是用Python开发的,通常部署在Linux服务器上,所以得懂一些Linux基本操作和Python程序的部署。

另外还需要一台境外服务器,配置不需要很高,但花钱买,也挺贵的。

但是,网上经常有一些免费的服务器分享出来,对此我专门写了爬虫服务(GO语言)去爬取这些服务器信息,但直接提供给你们这些服务器信息,即使会玩的人也要手动在客户端配置或修改服务器信息吧(这些服务器信息也不定时更新的),更何况很多人其实不清楚怎么配置的。

于是,又重写了C#客户端,自动获取爬虫提供的账号信息,做到0配置,一键傻瓜式启动,然后直接上国外糟粕网站。

所以个人改版xsocks的示意图是这样的:

 

 

其中爬虫服务,用python和go实现了至少有5、6个版本,目前使用GO语言+redis,基本做到高可用,且稳定运行近2年了。

而提供给大家的客户端,把所有的鸡肋功能都去掉了,也基本做到了高可用,很少会出现程序崩溃的情况了,即使万一崩溃也会恢复到没用代理的环境。

 

此文单纯讲述原理。

 

posted @ 2017-05-13 14:57 汪少 阅读(...) 评论(...) 编辑 收藏