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源码阅读与改造(一)的更多相关文章

  1. 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

    24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类——Live555源码阅读 ...

  2. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  3. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  4. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

  5. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  6. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  7. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  8. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  9. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

随机推荐

  1. Destroying Array CF 722C

    题目大意就是给长度为 n 一个数列,有 n 每次删除,每一次删除第 i 个位置上的数,求每一次删除后剩余不连续数列的最大区间和. 输入样例 4 1 3 2 5 3 4 1 2 输出样例 5 4 3 0 ...

  2. rman 脚本大全

    ################################################################一个增量备份的例子脚本######################### ...

  3. 双目SLAM(2) opencv

    一步步实现ORB-SLAM2 http://www.fengbing.net/ 1 opencv 测试 http://blog.csdn.net/u010480194/article/details/ ...

  4. Shell命令解析

    1.简单语法: 执行shell:                                sh executeTest.sh puttyy上跑java:                      ...

  5. Jenkins持续集成之小试牛刀

    关于Jenkins的安装,大家可以参考我的这两篇文章: Ubuntu16.04环境安装jenkins docker安装jenkins及其相关问题解决 之前没有好好研究过Jenkins,只是简单学会怎么 ...

  6. node中npm安装模块的网络问题

    最近使用node开发时,发现所有的依赖模块都安装不了啦,一直报错如下 rollbackFailedOptional: verb npm-session 5a4a66a1b8d06dc3 后来才发现是由 ...

  7. http协议进阶(六)代理

    web代理服务器是网络的中间实体,位于客户端和服务器之间,扮演“中间人”的角色,作用是在各端点之间来回传送报文. 其原理是:客户端向代理服务器发送请求报文,代理服务器正确的处理请求和连接,然后返回响应 ...

  8. linux内存源码分析 - 伙伴系统(初始化和申请页框)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前的文章已经介绍了伙伴系统,这篇我们主要看看源码中是如何初始化伙伴系统.从伙伴系统中分配页框,返回页框于伙伴系 ...

  9. VS2015编写的MFC上位机,波特率可调,可动态显示曲线,可显示三维

    VS2015编写的MFC上位机,波特率可调,可动态显示曲线,可显示三维 2016年01月14日 11:40:28 博博有个大大大的Dream 阅读数:9375   版权声明:本文为博主原创文章,未经博 ...

  10. CAN协议教程

    介绍:CAN总线 CAN总线是广播类型的总线.这意味着所有节点都可以侦听到所有传输的报文.无法将报文单独发送给指定节点:所有节点都将始终捕获所有报文.但是,CAN硬件能够提供本地过滤功能,让每个节点对 ...