Tor由于经过了长年的开发,版本到现在已经有很多。笔者选用的是tor-0.2.3.25版本。关于版本变迁和更新说明,请大家自行查看:
https://gitweb.torproject.org/tor.git (需翻墙)
1. 源码目录关系图 Tor的源码目录中包括doc, contrib, src等一些列很莫名的文件。其实,在这些所有的文件中,除了src文件夹,其他都可以在初期暂时不去理会。所以,这里我们就谈src文件夹下的目录结构,也是Tor源码核心的目录结构。
上面两图已经基本给出了各个子目录之间的关系和引用次数。总的来说,src目录下包括下列这样的目录:
1)win32:用于Windows的目录,内部只含有一个orconfig.h文件。主要用于Tor源码的跨平台编译。
2)common:Tor源码中基本通用函数的封装目录。包括:OpenSSL,Libevent的封装,TLS的封装,链表和哈希表的实现等。
3)tools:Tor使用工具目录。包括:密钥验证,证书生成,域名解析和防火墙辅助的实现。
4)or:Tor核心程序逻辑目录。(Tor系统所有核心协议的实现目录)包括:客户端身份核心代码,路由身份核心代码,目录服务器身份核心代码等。
5)test:Tor源码各功能模块的测试代码目录。
6)config:配置文件模板目录
2. or目录下的各文件 or目录是Tor源代码的核心,有必要简要介绍下该目录下的文件的主要作用:(细节部分后期会逐个文件分别进行分析)
以下部分同时用于OP与OR:(Onion Proxy, Onion Router)
1)Buffers:缓冲区相关结构体及处理函数;
a generic interface buffer. Buffers are fairly opaque string holders that can read to or flush from: memory, file descriptors, or TLS connections.
2)Circuitbuild:链路建立相关函数;
The actual details of building circuits.
3)Circuitlist:链路列表及链路控制相关函数;
Manage the global circuit list.
4)Circuituse:链路获取或使用相关函数;
Launch the right sort of circuits and attach streams to them.
Tor系统是用于匿名通信的一个系统,源代码的维护到今天已经快10年。笔者从今年3月份开始陆陆续续研究Tor系统的源码,由于源码量大,也有很多需要总结的地方,所以特地在这里开辟个Tor源码分析的系列文章,供自己总结,也供大家共同探讨。
1. 源码查看工具 — SourceInsight 本来Tor源码在Linux下分析和调试都可以比在Windows下更专业些,但是因为笔者本身大部分时间需要在Windows下工作,所以选择了Windows下的源码分析软件。SourceInsight是个非常好的源码分析软件,用于查看各种开源代码工程都非常方便。这里选用SourceInsight作为Tor源码的基本浏览和修改工具。
2. 文档生成工具 — Doxygen 关于Doxygen的基本介绍大家可以在网上找到很多。简单的说,Doxygen就是将源码内的信息进行总结,生成包括函数调用关系,函数介绍等信息。这对于宏观查看代码非常重要。Tor源码内很多函数都连续嵌套非常多层,靠人为记住是非常困难的。利用Doxygen的函数调用图,能帮助我们更好的查看函数之间的调用关系。这里不介绍Doxygen如何使用,百度上有许多。注:使用Doxygen时定要打开函数调用图的生成功能。
3. 编译工具 — MinGW MSYS msyDTK 为了在Windows上完成对Tor的编译,需要使用到下面一些列套件。好在这些部分在Tor的FAQ中已经很详细地说明如何使用,这里就仅仅将Tor中关于如何在WIndows下编译Tor源码的部分复制于此,请大家自行查看。
## ## Instructions for building Tor with MinGW (http://www.mingw.org/) ## Stage One: Download and Install MinGW. --------------------------------------- Download mingw: http://prdownloads.sf.net/mingw/MinGW-5.1.6.exe?download Download msys: http://prdownloads.sf.net/ming/MSYS-1.0.11.exe?download Download msysDTK: http://sourceforge.net/projects/mingw/files/MSYS%20Supplementary%20Tools/msysDTK-1.0.1/msysDTK-1.0.1.exe/download Install MinGW, msysDTK, and MSYS in that order. Make sure your PATH includes C:\MinGW\bin. You can verify this by right clicking on "My Computer", choose "