Shadowsocks 是一款性能很不错的代理工具,它的高性能体现在两个方面:速度快、资源占用少。相信你在读完「协议与结构」和「TCP 代理」这两篇文章后,就能理解为什么 shadowsocks 的速度快了1。资源占用少主要是因为 shadowsocks 使用了事件循环而不是多线程,另一方面,及时的进行超时和异常处理,能够将空闲的资源回收再利用也是原因之一。本文基于 2.9.0 版本的源码介绍 tcprelay.py 如何进行超时处理。



Shadowsocks 是一款著名的 SOCKS5 代理工具,深受人民群众喜爱。它的源码工程质量很高,十分便于研究。不过当你真正开始读源码的时候,会有一种似懂非懂的感觉,因为虽然它的大体框架容易理解,但是其中的诸多细节却不是那么简单明了。

本文将基于 2.9.0 版本的源码对 shadowsocks 进行分析,希望读者看完以后能对 shadowsocks 的原理有个大体上的认识。为了行文简洁,在示例中我们用 ss 指代 shadowsocks。


为了读懂 JOS 的代码,最近学了一波汇编。主要是通过粗略的过一遍 OpenSecurityTraining.info 上的 Introductory Intel x86 课程 来了解大概,因为已经学过一次,所以只要捡起来直接看代码就行了,遇到模糊不清的地方就详细看看 PC Assembly Tutorial

Introductory Intel x86 课程上有个很有趣的逆向工程作业——拆除「炸弹」。「炸弹」是一个二进制可执行文件,由 6 个阶段和 1 个隐藏阶段组成,每个阶段都会读取用户输入,只有特定的输入才能通过这个阶段,在通过所有阶段后,炸弹就被成功拆除了。之所以说它有趣,是因为:

  • 只有二进制文件,所以只能通过反汇编后读 x86 汇编来拆除炸弹,难度不小
  • 每一阶段难度递增,隐藏阶段只有达到特定条件才能进入,像极了闯关游戏
  • 通过汇编考察了很常见的程序结构和数据结构,十分考验 C 语言功底

本文将一步一步介绍怎么拆除炸弹。关于炸弹的详细说明请戳:CMU binary bomb challenge,下载「炸弹」请戳:bomb32.tar,查看答案或者帮助请戳:loggerhead/CMU-binary-bomb-challenge




呜。。写小结完全是为了督促自己一把,顺便理一理过去一年自己把时间都花在哪了。就像理财,不怕亏损,就怕花得不明不白。很具体的也没啥好说的,就随便过一过好了。


高中学过一个神奇的数列——Fibonacci 数列,它的特点是:除了最初的两个 Fibonacci 数以外,其余的所有 Fibonacci 数都等于前两个 Fibonacci 数之和。表达成数学公式就是:

F_{n}=\begin{cases} 0 & n=0\\ 1 & n=1\\ F_{n-1}+F_{n-2} & n\geq 2 \end{cases}

下面是 Fibonacci 数列的头几项(0 是第零项)。

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233...

同时,Fibonacci 数列也出现在很多计算机相关的书上面,那么我们怎么编程求第 n 个 Fibonacci 数呢?1