ss 作用是 f q,因为怕关键词会让文章被干掉,所以用了别名。本文纯粹是从分析技术的角度出发。因为 ss 现在的版本已经很复杂了,eventloop, 状态机,支持 udp 。为了简单讲原理,我们用 0.9 的版本来说明。
首先上图
![9daa935a37dd19be8394d55b8b630a47.png](https://img-blog.csdnimg.cn/img_convert/9daa935a37dd19be8394d55b8b630a47.png)
这个是 ss 的架构图,用 ss 做代理的时候,一般本地运行个 ss_local.py ,然后服务器再运行 ss_server.py。
client 和 ss_local 主要通过 socks5 协议通信,而 ss_local 和 ss_server 之间就是对称加密的 tcp 数据。
ss_local 主要代码如下
class Socks5Server(SocketServer.StreamRequestHandler): ''' RequesHandlerClass Definition ''' def handle_tcp(self, sock, remote): try: fdset = [sock, remote] while True: r, w, e = select.select(fdset, [], []) # use select I/O multiplexing model if sock in r: # if local socket is ready for reading data = sock.recv(4096) if len(data) <= 0: # received all data