过年的时候抽了点时间了解了下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. CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

  2. 转载:分布式文件系统 - FastDFS 在 CentOS 下配置安装部署(1)

    原文:http://blog.mayongfa.cn/192.html 一.安装 libfastcommon 和 FastDFS 1.下载安装 libfastcommon ,这里是通过wget下载(我 ...

  3. ThreadLocal和线程同步机制对比

    共同点: ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题. 区别: 在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量. 这时该变量是多个线程共享的,使用同 ...

  4. compile php with openssl on mac osx error 填坑

    从源码手动编译 PHP 时出现如下错误:           Default   1 2 3 4 5 6 7 8 9 10 11 12 13 14 Undefined symbols for arch ...

  5. IntelliJ IDEA配置Tomcat 与安装Tomcat失败原因

    1.jdk中jre损坏,无法提供运行环境:重新下载jre安装并配置

  6. 1、Appium安装

    1.安装node.js 访问node js官网 https://nodejs.org/en/ 下载并安装node js,找到你系统适合的node js一步步安装即可 2.安装Appium 在cmd中执 ...

  7. 并发之AQS原理(三) 如何保证并发

    并发之AQS原理(三) 如何保证并发 1. 如何保证并发 AbstractQueuedSynchronizer 维护了一个state(代表了共享资源)和一个FIFO线程等待队列(多线程竞争资源被阻塞时 ...

  8. LINUX UBUNTU 快捷键

    一.打开关闭终端 ctrl + alt + t //打开一个新终端 shift + ctrl +n //在打开终端的情况下再打开一个新终端shift + ctrl + q //关闭一个新终端 二.文件 ...

  9. java 标签编译后没有显示

    1.原因现在还不知,试了几个地方可以和不可以 /** * @author feilong */ public class OverLoading { /**@param args put here c ...

  10. GuzzleHttp 请求设置超时时间

    之前调用一个三方的 WEB API,大量的请求超时,导致 PHP 进程被占用完.整个网站一直报 504. 其中一个优化措施就是对三方 API 调用设置超时时间. use GuzzleHttp\Clie ...