因为公司需求,须要掌握洋葱网络的总体架构和部分详细实现细节,并对Tor进行针对性的改造。在查询Tor官方相关文档和google各类网站后,获得的信息仍没法达到目的,因此便开始了阅读Tor源码的旅程。html
Tor的源码能够在官网直接进行下载,URL地址为:linux
https://www.torproject.org/download/download.html.engit
虽然Tor源代码代码量较大,可是其代码风格很是的严谨和规范,包括代码结构、函数变量命令方式以及注释等。因此在熟悉Tor代码的套路以后,阅读起来虽然会花一些时间,不过阅读起来很是的舒服。web
所谓 "工欲善其事必先利其器",虽然Tor代码很规范,可是毕竟代码量较大(估算几十万行),而且都是用C语言进行实现的。阅读源码的IDE可不能直接用普通的代码编辑器好比sublime,笔者选择了Source Insight 做为阅读工具:windows
该工具除了常见的语法高亮显示,有一个很是棒的功能:自动查找函数调用关系,如上图红框,这对于梳理清楚代码逻辑颇有用。网络
另外静态阅读代码时,会赶上一个函数被众多的函数所调用,拥有众多的函数调用链,此时仍然须要借助于动态调试。由于Tor源码在windows下编译较为繁琐,笔者并无去折腾这条路,而是选择了linux平台,用gdb做为动态调试工具。架构
此外,官方的日志永远是最重要的,这能帮助理解Tor的运行流程。可是Tor默认的日志级别并不高,内容不够详细,能够参考这里将日志级别提升:编辑器
https://www.torproject.org/docs/faq.html.en#Logs函数
最后,虽然Tor官方文档并无知足笔者需求,可是对理解代码逻辑仍然具备很是重要的参考意义,这里列出一些有用的:工具
这里面有Tor一些公开数据,好比节点总数,各种节点的具体信息等。
Tor官方对各种模块实现的技术文档
Tor命令行和配置文件的参考手册
接下来的几篇文章,笔者会将Tor的总体架构和部分功能模块(加解密、链路复用、长链接、hidden service等),以及Tor改造方法实现细节都分享一下。
by:会飞的猫