过年的时候抽了点时间了解了下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. vue和echarts 封装的 v-charts 图表组件

    https://v-charts.js.org/#/ 在使用 echarts 生成图表时,经常需要做繁琐的数据类型转化.修改复杂的配置项,v-charts 的出现正是为了解决这个痛点.基于 Vue2. ...

  2. JS实现数组去重(重复的元素只保留一个)

    1.遍历数组法 它是最简单的数组去重方法(indexOf方法) 实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中: ,,,,,,,,]; func ...

  3. MACE(3)-----工程化

    作者:十岁的小男孩 QQ:929994365 能下者,上. 前言 本文是MACE的第三步即MACE环境编译出来的库在Android工程中的使用.在第一篇博文中通过mace官方提供的安卓工程进行调试,本 ...

  4. php中常用的正则表达式函数

    php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...

  5. python 全栈开发,Day140(RabbitMQ,基于scrapy-redis实现分布式爬虫)

    一.RabbitMQ 队列 在生产者消费模型中,比如去餐馆吃饭的例子.生产者相当于厨师,队列相当于服务员,消费者就是你. 我们必须通过服务员,才能吃饭! 如果队列满了,队列会一直hold住.必须让消费 ...

  6. this和判断的位置对赋值的要求

    package charter01; public class Person { private String name; private int age; public String getName ...

  7. BBC 记录片planet earth

    He'll have to remain on guard for another two weeks, but in the jungle, just surviving the day can c ...

  8. jvm类加载器以及双亲委派

    首先来了解几个概念: 类加载: 概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验--转换解析--初始化,最终形成能被java虚拟机直接使用的java类型,就是jvm的类加载机制. ...

  9. Spring MVC的前端控制器模式

    前端控制器模式 spring mvc也是依赖servlet,所以spring mvc的请求处理是从一个servlet开始,这个servlet就是DispatcherServlet.前端控制器模式(Fr ...

  10. 【Java】 剑指offer(1) 找出数组中重复的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字 ...