SS 的工作原理🌄
by
整体流程
SS 分为 local 端 和 server 端, 我们的请求发给 local 端, local 端会加密传递给 server 端, server 端帮助我们发出真正发给目标服务器的请求, 目标服务器将数据传递给 server 端, server 端加密数据回传给 local 端, local 端将数据解密, 传递给浏览器的 socks5 客户端, 然后数据传递给浏览器, 浏览器拿到数据开始渲染
来画张图看看
- SwitchyOmega: 非常方便的管理代理的浏览器插件, 它会告诉浏览器是否需要代理, 以及代理的协议和地址是多少
- ¬ : 这个符号代表的是换行, 为了不占据过多的屏幕横向空间, 我自己添加的换行, 这个符号不是数据中有的.
- 握手包的具体含义会在后续解释, 如果你迫切想知道 => https://zh.wikipedia.org/wiki/SOCKS
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 端相关的逻辑进行分析.