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 ...
随机推荐
- cronolog分割tomcat日志文件
tomcat日志备份磁盘压力解决方案,使用cronolog每日生成文件uat部署操作如下,,观察两天,下周一部署生产message系统,后续根据需求部署到其它业务线 示例方案:uat—message0 ...
- 【知识碎片】getResource和getResourceAsStream
1. 前言 在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异. 2.Class.getResource(St ...
- 水题,P1789 【Mc生存】插火把 (暴力即可)
#include<cstdio> #define maxn int(1e4) bool dp[maxn][maxn]; int n; void f1(int x, int y) { dp[ ...
- Spring配置文件和SpringMVC配置文件 web.xml配置文件 保存自用
话不多说,最近在周末自己抽时间写一些框架做的系统,当所有东西都需要自己配置时候发现自己压根记不住这么多类和路径,所以日常总结就变得尤为重要了 db-config.properties 将配置文件常量提 ...
- ethereum/EIPs-55 Mixed-case checksum address encoding
eip title author type category status created 55 Mixed-case checksum address encoding Vitalik Buteri ...
- 【总文档】rac增加新节点的方法步骤 How to Add Node/Instance or Remove Node/Instance in 10gR2, 11gR1, 11gR2 and 12c Oracle Clusterware and RAC
[总文档]How to Add Node/Instance or Remove Node/Instance in 10gR2, 11gR1, 11gR2 and 12c Oracle Clusterw ...
- 深入浅出的webpack4构建工具--webpack4+vue+vuex+mock模拟后台数据(十九)
mock的官网文档 mock官网 关于mockjs的优点,官网这样描述它:1)可以前后端分离.2)增加单元测试的真实性(通过随机数据,模拟各种场景).3)开发无侵入(不需要修改既有代码,就可以拦截 A ...
- 201904:Action recognition based on 2D skeletons extracted from RGB videos
论文标题:Action recognition based on 2D skeletons extracted from RGB videos 发表时间:02 April 2019 解决问题/主要思想 ...
- Html5 手机端网页不允许缩放
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- ASP.NET 文件操作类
1.读取文件 2.写入文件 using System; using System.Collections.Generic; using System.IO; using System.Linq; us ...