过年的时候抽了点时间了解了下ss的协议。整理了一点笔记,一直没有时间发。今天发一下,免得忘了。

SS的结构本身比较简单,他的基本结构如下:

  1. ss通常分为client和server两部分
  2. client是一个sock5代理服务器,本地需要代理的流量先将其发往客户端
  3. server也是一个代理服务器,它们之间走的协议不是sock5或http,是一套私有的密文传播的协议。
  4. ss client基于ss proxy协议协议,将转发的流量加密,发送给ss server。ss server将数据包解密,发送给实际服务器。响应过程流程则相反。

  

有了这些知识,我们可以得出如下结论。

  1. ss server本身也只是一个代理服务器,它的协议并不是sock5或http,而是自己的一个私有协议(本文暂且将其称为ss proxy协议)。它主要的功能是将流量加密传输,从而躲避被方校长识别,它不具有加速网络的能力。
  2. ss client本身并不是必要的,ss server本身也是一个代理服务器,如果浏览器本身支持ss proxy协议,是可以不需要ss client的。
  3. ss client的作用是将sock5协议转换为ss proxy协议,对于应用来说,它是一个sock5的代理服务器。从而使得支持sock5协议的应用都可以使用 ss。有的ss client也支持将http代理转换为ss proxy协议

有兴趣的朋友可以看一下ss proxy 协议,本身并不复杂,相信有网络编程基础的人应该可以很快编写一个ss client和server。也可以通过调试ss client的代码加速自己的开发。

另外,需要说明的是:虽然内容被加密了,但ss协议本身也不是不可被检测的,即使加密算法不可攻破,也可以通过ss协议特征判断出是否是ss协议。特别是早期的协议,还是比较脆弱的,感兴趣的朋友可以看下这篇文章为何 shadowsocks 要弃用一次性验证 (OTA)

最后,提几个关于ss防检测的几个方法。

  1. 启用AEAD加密算法,不要使用不安全的早期协议
  2. 不要过度使用,异常的流量还是比较容易检测出来的。
  3. Server端: ss server到目的服务器这一部分的流量是没有加密的。检测服务器是否运行ss server是非常容易的。因此不要在国内厂商的服务器上搭建ss server。
  4. client端: 正所谓家贼难防,一些国产管家会向方校长主动上报本机的ss client配置,上报后服务器ip基本上就加入黑名单了。
  5. 最好不要组合openvpn和ss一起使用,因为open vpn还是比较容易检测的,以免殃及池鱼。
  6. 改造ss client和ss server,使用自己的私有协议。这个方式实际上工作量并不大,并且也很有效,不过涉及到生态的问题。 ss client除了在pc上,往往还在手机,路由器等上面也有涉及,每种环境都要自己开发还是有点累的。

关于SS的一点笔记的更多相关文章

  1. 关于最小生成树,拓扑排序、强连通分量、割点、2-SAT的一点笔记

    关于最小生成树,拓扑排序.强连通分量.割点.2-SAT的一点笔记 前言:近期在复习这些东西,就xjb写一点吧.当然以前也写过,但这次偏重不太一样 MST 最小瓶颈路:u到v最大权值最小的路径.在最小生 ...

  2. [转&精]IO_STACK_LOCATION与IRP的一点笔记

    IO_STACK_LOCATION和IRP算是驱动中两个很基础的东西,为了理解这两个东西,找了一点资料. 1. IRP可以看成是Win32窗口程序中的消息(Message),DEVICE_OBJECT ...

  3. pyhon的yileld的一点笔记

    yield感觉很神秘,感觉也不好理解,学习pyhon最后终归是要学习这个东西,研究了一段时间,把自己的笔记写下来 说简单点就是遇到yield就停止往下执行代码,也包括不执行yield这条语句,然后返回 ...

  4. 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记

    前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...

  5. 阅读xtrabackup代码的一点笔记

    xtrabackup binary最重要的两个过程是backup和prepare,对应的函数分别是xtrabackup_backup_func()和xtrabackup_prepare_func(), ...

  6. c#委托----我的一点笔记

    public partial class ucBloodLabs { public delegate void ShowBloodEvent(); public ShowBloodEvent Show ...

  7. 看的oracle数据库视频 记的一点笔记

    3个默认的用户    sys          //网络管理员  权限由上到下降低 [最后加上 as sysdba]    system  //本地管理员    scott     //普通用户  默 ...

  8. cookie随便写的一点笔记(抄书的)

    cookie是保存在客户端的文本,能够在一定程度上提高用户体验.Servlet API 中提供了Cookie类,可以创建Cookie对象,并通过响应中的addCookie方法,将cookie保存到客户 ...

  9. 关于异或(Xor)的一点笔记

    因为博弈论里,尤其实在求sg函数时,经常会用到异或运算,所以我就把网上搜到的一些相关知识和自己的一些理解记下来. 如果出现差错,还请指出,谢谢! 异或:可以简称Xor,可以用数学符号⊕表示,计算机就一 ...

随机推荐

  1. centos6.7安装系统后看不到网卡无法配置IP的解决办法

    新安装centos6.7后发现/etc/sysconfig/network-scripts目录下没有eth0的网卡配置,通过ifconfig可以看到eth0的硬件地址 于是新建网卡输入一下内容 # c ...

  2. Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档

    1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...

  3. Memcache是谁,它为什么而奋斗?【内容转】

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  4. mac安装navicat mysql破解版

    下载破解中文版http://m6.pc6.com/xuh6/navicat12027pre.zip 完成下载后无法正常进行安装,此时应该打开命令行执行 sudo spctl --master-disa ...

  5. hdu3255扫描线:带权面积交转体积交

    手贱把i打成j,调了半天 /* 面积并转体积并,长方体高度为作物价格 算体积并:在笛卡尔坐标系的y轴上建立线段树cnt记录区间被完全覆盖的次数,sum记录区间被覆盖的总长度 以平行于xoy的平面从下往 ...

  6. python接口自动化测试四:代码发送HTTPS请求

    HTTPS: get: url = 'https://www.juhe.cn/docs/api/id/39' r = requests.get(url)                       # ...

  7. python 全栈开发,Day135(爬虫系列之第2章-BS和Xpath模块)

    一.BeautifulSoup 1. 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: ''' Beautiful Soup提供一些简单 ...

  8. CentOS 上安装 nodejs v11.0.0

    下载 nodejs 淘宝 nodejs 镜像地址:https://npm.taobao.org/mirrors/node wget 命令下载: wget https://npm.taobao.org/ ...

  9. day15--JavaScript语言

    JavaScript JavaScript是一门单独的编程语言.浏览器内置JavaScript的解释器. 独立的语言,浏览器具有js解释器. 存在与HTML中,在HTML中写JavaScript,存在 ...

  10. 基于kubernetes集群部署DashBoard

    目录贴:Kubernetes学习系列 在之前一篇文章:Centos7部署Kubernetes集群,中已经搭建了基本的K8s集群,本文将在此基础之上继续搭建K8s DashBoard. 1.yaml文件 ...