deepinss

Deep in shadowsocks.

View on GitHub
14 December 2017

SS 的工作原理🌄

by

整体流程

SS 分为 local 端 和 server 端, 我们的请求发给 local 端, local 端会加密传递给 server 端, server 端帮助我们发出真正发给目标服务器的请求, 目标服务器将数据传递给 server 端, server 端加密数据回传给 local 端, local 端将数据解密, 传递给浏览器的 socks5 客户端, 然后数据传递给浏览器, 浏览器拿到数据开始渲染

来画张图看看

Browser --> Browser内置 socks5 客户端改写该HTTP请求
(发起http请求)  |
       /|\     | +----------握手阶段-----------------------------------------------------------------+
        |      | |   |             第二个握手包  |                       第四个握手包                   |
  数据回 |      | |   |             /|\         |                        /|\                         |
  传给客 |      | |   |\x05\x01\x00  |\x05\x00  | \x05\x01\x00\x03\x13 ¬  | \x05\x00\x00\x01 ¬       |
  户端了 |      | |   |              |          | jiangxuan.org\x0b\xb8   | \x00\x00\x00\x00\x0b\xb8 |
        |      | |  \|/             |         \|/                        |                          |
        |      | |  第一个握手包      |        第三个握手包                  |                          |
        |      | +----------------------------------------------------------------------------------+
        |      |
        |     \|/
  SS local (在第四个握手包 socks5 客户端确认之后, socks5 客户端会将真实的 HTTP请求头发过来)
       /|\     | 根据预共享的加密算法和 password 进行 (加密:↓) / (发送给浏览器:↑) 数据
        |      | (发送给 SS server 端:↓) / (解密:↑)
        |      | 
        |      |
        |      |
        |     \|/
  SS server 端收到数据包, 使用预共享的加密算法和 password (解密:↓) / (加密:↑) 数据, 
       /|\     | (拿到请求的地址, 和请求头:↓) / (Google 发送过来的数据:↑)
        |      |
        |      |
        |      |
        |     \|/
      Google  服务器

接下来

接下来从 local.py 文件开始入口, 先行分析 local 端是如何处理配置文件和如何处理和 浏览器端的通信, 由于 local 端和 server 端的逻辑近乎一致, 所以作者把两者逻辑都写在了一起, 接下来先提取出来和 local 端相关的逻辑进行分析.

导航

tags: