Tor源码阅读与改造(一)
0x00 前言
由于公司需求,需要掌握洋葱网络的整体架构和部分详细实现细节,并对Tor进行针对性的改造。在查询Tor官方相关文档和google各种网站后,得到的信息仍无法达到目的,所以便开始了阅读Tor源码的旅程。
Tor的源码可以在官网直接进行下载,URL地址为:
https://www.torproject.org/download/download.html.en

虽然Tor源代码代码量较大,但是其代码风格非常的严谨和规范,包括代码结构、函数变量命令方式以及注释等。所以在熟悉Tor代码的套路之后,阅读起来虽然会花一些时间,不过阅读起来非常的舒服。
0x01 利器
所谓 "工欲善其事必先利其器",虽然Tor代码很规范,但是毕竟代码量较大(估算几十万行),并且都是用C语言进行实现的。阅读源码的IDE可不能直接用普通的代码编辑器比如sublime,笔者选择了Source Insight 作为阅读工具:

该工具除了常见的语法高亮显示,有一个非常棒的功能:自动查找函数调用关系,如上图红框,这对于梳理清楚代码逻辑很有用。
另外静态阅读代码时,会遇上一个函数被众多的函数所调用,拥有众多的函数调用链,此时仍然需要借助于动态调试。因为Tor源码在windows下编译较为繁琐,笔者并没有去折腾这条路,而是选择了linux平台,用gdb作为动态调试工具。
此外,官方的日志永远是最重要的,这能帮助理解Tor的运行流程。但是Tor默认的日志级别并不高,内容不够详细,可以参考这里将日志级别提高:
https://www.torproject.org/docs/faq.html.en#Logs
最后,虽然Tor官方文档并没有满足笔者需求,但是对理解代码逻辑仍然具有非常重要的参考意义,这里列出一些有用的:
这里面有Tor一些公开数据,比如节点总数,各类节点的具体信息等。
Tor官方对各类模块实现的技术文档

Tor命令行和配置文件的参考手册
0x02 后续
接下来的几篇文章,笔者会将Tor的整体架构和部分功能模块(加解密、链路复用、长连接、hidden service等),以及Tor改造方法实现细节都分享一下。
by:会飞的猫
转载请注明:http://www.cnblogs.com/flycat-2016
Tor源码阅读与改造(一)的更多相关文章
- 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类——Live555源码阅读 ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
- 【原】AFNetworking源码阅读(五)
[原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 【原】AFNetworking源码阅读(二)
[原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...
随机推荐
- Destroying Array CF 722C
题目大意就是给长度为 n 一个数列,有 n 每次删除,每一次删除第 i 个位置上的数,求每一次删除后剩余不连续数列的最大区间和. 输入样例 4 1 3 2 5 3 4 1 2 输出样例 5 4 3 0 ...
- rman 脚本大全
################################################################一个增量备份的例子脚本######################### ...
- 双目SLAM(2) opencv
一步步实现ORB-SLAM2 http://www.fengbing.net/ 1 opencv 测试 http://blog.csdn.net/u010480194/article/details/ ...
- Shell命令解析
1.简单语法: 执行shell: sh executeTest.sh puttyy上跑java: ...
- Jenkins持续集成之小试牛刀
关于Jenkins的安装,大家可以参考我的这两篇文章: Ubuntu16.04环境安装jenkins docker安装jenkins及其相关问题解决 之前没有好好研究过Jenkins,只是简单学会怎么 ...
- node中npm安装模块的网络问题
最近使用node开发时,发现所有的依赖模块都安装不了啦,一直报错如下 rollbackFailedOptional: verb npm-session 5a4a66a1b8d06dc3 后来才发现是由 ...
- http协议进阶(六)代理
web代理服务器是网络的中间实体,位于客户端和服务器之间,扮演“中间人”的角色,作用是在各端点之间来回传送报文. 其原理是:客户端向代理服务器发送请求报文,代理服务器正确的处理请求和连接,然后返回响应 ...
- linux内存源码分析 - 伙伴系统(初始化和申请页框)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前的文章已经介绍了伙伴系统,这篇我们主要看看源码中是如何初始化伙伴系统.从伙伴系统中分配页框,返回页框于伙伴系 ...
- VS2015编写的MFC上位机,波特率可调,可动态显示曲线,可显示三维
VS2015编写的MFC上位机,波特率可调,可动态显示曲线,可显示三维 2016年01月14日 11:40:28 博博有个大大大的Dream 阅读数:9375 版权声明:本文为博主原创文章,未经博 ...
- CAN协议教程
介绍:CAN总线 CAN总线是广播类型的总线.这意味着所有节点都可以侦听到所有传输的报文.无法将报文单独发送给指定节点:所有节点都将始终捕获所有报文.但是,CAN硬件能够提供本地过滤功能,让每个节点对 ...