![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Source Code Analysis
文章平均质量分 85
WInScar
这家伙很懒,什么也没留下
展开
-
Tor源码分析二 -- 目录结构
Tor由于经过了长年的开发,版本到现在已经有很多。笔者选用的是tor-0.2.3.25版本。关于版本变迁和更新说明,请大家自行查看: https://gitweb.torproject.org/tor.git (需翻墙)1. 源码目录关系图 Tor的源码目录中包括doc, contrib, src等一些列很莫名的文件。其实,在这些所有的文件中,除了src文件夹,其他都可原创 2013-04-25 12:20:50 · 5937 阅读 · 2 评论 -
Tor源码分析五 -- 客户端执行流程(libevent调度)
上一源码分析的小节中,已经将系统的主要流程启动过程介绍完毕。实际上,系统在如此启动之后,就可以通过正确的流程将Tor系统完整的启动起来,为用户提供应用程序代理服务,以达到匿名通信的目标。本节的目标,不是为了详细介绍系统初始化后的正确启动流程,而是介绍系统是如何通过Libevent的调度实现成功启动的。也就是说,本节的重点在于说明Libevent调度机制在Tor系统之中的应用。 上节当中也简要原创 2013-05-09 21:46:40 · 3586 阅读 · 0 评论 -
Tor源码分析六 -- 总体框架图
1. 客户端的总体框图 由于画框图的过程稍微繁琐,所以框图给出的稍慢了些,请大家见谅。同时,框图画的比较急促,一定会有错误的地方,请大家指正。 框图中给出了客户端Tor系统所使用到的最重要的结构体以及其成员变量,有兴趣的朋友可以自行比对,这里就不便多说了。2. 服务器端的总体框图(2合1) 服务器端的框图将两种身份的服务器所使用到的主要结构体均画了出来。也就是原创 2013-05-10 11:36:46 · 3639 阅读 · 0 评论 -
Tor源码文件分析 -- Cpuworker
我们知道,对于Tor的服务器来说,有的时候因为其访问量巨大,不得不采取一些相应机制来保证服务的正常提供。在服务器编程里,我们经常可以用到的技术,例如线程池,多路复用等。Tor程序,在大多数情况下,都是单进程运行的,几乎没有哪里用到多线程的操作。正因为如此,Tor的主进程才绝对不允许出现阻塞式的操作。但是,唯独在一处,Tor为了提高自身效率,利用了线程池类似的机制。这个部分就是Cpuworker。本原创 2013-05-24 12:12:28 · 3892 阅读 · 0 评论 -
Tor源码分析七 -- 握手协议
本节主要讲述Tor系统中所用到的握手协议。握手协议分三层:TCP握手;TLS握手;Tor握手。其中Tor握手又分为三个层次:OR握手;链路建立;流建立。 TCP的三次握手我想应该学计算机方向的朋友无人不知了,所以此处就略去。而TLS是SSL的升级版本,其握手过程与SSLv3几乎一致。同时由于TLS根据客户端的不同握手选择,会有些许握手过程中的差别,我们希望大家能够找到TLS相关的书籍翻阅。此原创 2013-05-11 15:33:09 · 8632 阅读 · 1 评论 -
Tor源码文件分析 -- Control
传统上我们所指的系统信号,就是系统传递给进程的控制信号。例如,SIGINT,SIGTERM等等。这些信号的传递,通常都是指示相关进程完成相应的操作,或暂停或终止,或其他一些操作。在Tor系统中,信号分为两种:传统信号,控制器信号。下面代码段是这些信号的简单罗列:/* These signals are defined to help handle_control_signal work. */原创 2013-05-22 16:13:03 · 1788 阅读 · 0 评论 -
Tor源码分析八 -- 客户端执行流程(second_elapsed_callback函数)
在之前的客户端源码分析中,我们讲述了整个客户端的事件集和相关调度规则。每一类事件的激活都有相应的条件,要么是socket可读写,要么是收到信号,要么是定时事件到达,还有手动的事件激活。总而言之,系统中添加的所有事件经过Libevent的调度,使得整个系统有条不紊的运行起来。同时,每个事件均有其对应的事件处理函数,在系统运行起来之后,一旦事件被激活,就会调用相应的回调函数进行处理。 本文我们着原创 2013-05-13 15:16:42 · 3235 阅读 · 0 评论 -
Tor源码分析九 -- 客户端执行流程(网络信息的下载)
源码分析到这里,大家应该已经大致了解到Tor系统的前期启动没有做任何的下载操作。前期启动的最关键环节,就是正常开启Libevent的调度机制,从而有条不紊地进行系统内所有子模块的维护等。我们需要再次强调的是,系统的主进程内,是没有做任何直接的获取网络状态,获取路由描述符,获取额外路由信息的操作。系统将这些操作视为需要实时维护的工作,因为所有这些网络信息都有其时限。所以,对这些网络信息的获取,全部置原创 2013-05-28 14:58:24 · 4136 阅读 · 0 评论 -
Tor源码分析十 -- 连接和链路
源码分析到这个部分,为了让大家明白源码中的编码逻辑,不得不开始从头梳理程序内部的复杂连接和链接组织形式。否则大家后期会更加一头雾水。笔者开始分析源码之时,没有这些宏观的概念,只能死嚼代码,硬猜硬想,再加以检查代码进行验证,才得以明白程序的主要框架逻辑。如果再以猜测验证的模式向大家讲述源码,必定会越来越混乱。所以,在本节之中,我们会将系统中所有的连接类型,链路类型和他们之间的关系和代码之中的关联方式原创 2013-06-21 22:01:00 · 6050 阅读 · 0 评论 -
Tor源码分析四 -- 客户端执行流程(初入主循环)
在上个小节中,已经基本分析了Tor系统的初始化过程。该过程中,最重要的部分,就是对默认配置文件、输入配置文件以及命令行参数进行综合整理,定出最后的配置方案。而后通过配置方案,启动系统的基础部分。这里值得说明的是,Tor系统的所有配置选项,均可以在Tor Manual中找到。并且,根据Tor系统配置成不同的身份,使用的配置选项也会有细微差别。默认的配置固化在代码内部,有兴趣的朋友可以就初始化部分往下原创 2013-04-27 09:41:25 · 3391 阅读 · 1 评论 -
Tor源码文件分析 -- Circuits全局变量
Tor系统源码中用于控制链路circuit的文件主要有三个,分别是:circuitlist.c,circuituse.c,circuitbuild.c。这三个文件分别主要针对的处理功能与他们的名字相类似,即分别处理链路的组织,使用和建立。在本篇中,我们只介绍主要用于链路部分的全局变量,即存在于这三个文件之中的全局变量的使用。此处不再罗列链路函数,因为链路部分的函数着实不少,尤其是链路建立部分。或许原创 2013-05-09 10:39:12 · 2433 阅读 · 2 评论 -
Tor源码文件分析 -- Log
日志模块是Tor系统中一个非常重要的部件。它将Tor系统中的所有事件,分成不同的严重级别,分成不同的系统域,进行统一的日志处理。同时它还维护着一个日志记录链表。日志记录链表内存储的是所有日志需要输出的目标日志文件或目标日志输出位置。下文中我们会详细地对日志模块进行分析,并简要说明源文件中的各函数的简单作用。1. 严重等级和域 日志模块内定义了5个严重等级,其具体的设定如下:/**原创 2013-05-22 20:29:11 · 3366 阅读 · 0 评论 -
Tor源码分析 -- 附录 Tor Manual
TOR(1) Manual Page AnalysisNAMEtor - The second-generation onion routerSYNOPSIStor [OPTION value]…DESCRIPTIONtor is a connection-oriented anonymizing communication service. Use原创 2013-04-27 09:21:37 · 5283 阅读 · 0 评论 -
Tor源码分析三 -- 客户端执行流程(初始化)
Tor系统中,主机的身份包括有这几种:Client,Bridge Server,Relay Server,Directory Server。 当然,有的时候一台主机是可以身兼数个身份,提供不同的服务或获取服务。 我们从最简单的客户端配置的Tor来进行分析,事先了解整个Tor系统的执行规程,之后再具体分析其他身份时候的不同操作,从而加快了解系统的速度。此处要说明的是,由于笔者对Windo原创 2013-04-26 14:40:34 · 3904 阅读 · 0 评论 -
Tor源码文件分析 -- Main
Main文件是Tor系统的主要执行函数所处文件,内容偏多,但是较于其他底层处理函数所在的文件,也算较少。所以这里做简要的分析,其中删去很多不常见的,不重要的函数,大家可以自行在源文件内部查看。1. 全局变量 全局变量在文件头部定义,每个全局变量都已经有比较详尽的英文分析和解释,这里再做简单的罗列。 1)系统(先前)已读与已写字节数以及用于流量控制的令牌桶全局变量;(原创 2013-04-27 16:50:32 · 2449 阅读 · 0 评论 -
Tor源码文件分析 -- Connection
Tor协议的层次结果经过简要分析可以大致概括为如下框图: DIR连接…… 应用层 ------------------------ AP连接,EXIT连接…… ------------------ Cir原创 2013-04-27 17:24:47 · 2304 阅读 · 0 评论 -
Tor源码文件分析 -- Connection_OR
作为连接类型中最重要的一种连接,OR连接对OP与OR之间,OR与OR之间的通信负全责。也就是说,OR连接的存在,是解决底层两机之间通信的必要条件。所以,有必要对OR连接的源码文件进行深入分析,并对OR连接先做简要介绍。后期,在介绍Tor系统的全部连接之时,会更加详细地介绍各种连接及他们的作用。 OR连接,即Onion Router连接,是用以连接Tor系统内两结点的连接。该连接的主要功能包括原创 2013-05-07 12:12:06 · 2371 阅读 · 0 评论 -
Tor源码文件分析 -- Hibernation
本篇会介绍Tor系统的休眠模块。休眠模块的代码处于源文件Hibernation.c之中。简单的说,其主要作用就是在适当的时机将系统进入休眠状态以保护系统资源被过度消耗;或者在适当的时机重新唤醒系统以达到重新为全局服务的目的。在默认的系统配置下,客户端的休眠模块是被关闭的,也就是说客户端永远不会进入休眠态。而Tor系统中的工作路由服务器则并非如此。他们很多时候需要设置一些为网络服务的策略和带宽,那么原创 2013-05-21 18:32:36 · 2188 阅读 · 0 评论 -
Tor源码文件分析 -- Connetion_Edge
所谓的Edge连接主要是形容在链路两端所使用的连接,包括AP连接与EXIT连接两种。Edge连接的存在,主要是为了个应用程序连接提供服务,所以才将两种Edge连接命名为Application Proxy应用代理连接和EXIT出口连接。这两种连接主要出现于链路两端,即链路第一跳与链路最后一跳,分别用于接受应用请求和处理应用请求的发出。因为Edge连接在Tor系统中也具有重要的作用,所以本篇就简单分析原创 2013-05-08 10:33:17 · 2243 阅读 · 0 评论 -
Tor源码分析一 -- 使用工具集
Tor系统是用于匿名通信的一个系统,源代码的维护到今天已经快10年。笔者从今年3月份开始陆陆续续研究Tor系统的源码,由于源码量大,也有很多需要总结的地方,所以特地在这里开辟个Tor源码分析的系列文章,供自己总结,也供大家共同探讨。1. 源码查看工具 -- SourceInsight 本来Tor源码在Linux下分析和调试都可以比在Windows下更专业些,但是因为笔者本身大部分原创 2013-04-25 10:51:22 · 6078 阅读 · 1 评论 -
Tor源码分析十一 -- 客户端执行流程(网络信息的下载续)
通过上一节中我们对连接和链路的重新描述,我们可以继续进行源码的分析了。在本节中,我们会开始着重讲述链路的建立,以及链路所基于的OR连接的建立,同时还有部分Libevent调度的再度分析。大家会明白,进行到此处之时,我们已经开始接触Tor系统最底层,最深藏着的连接机制以及调度机制。这个部分,是整个系统的精髓。后期几乎所有的应用请求连接处理等,都是重复地使用该部分的代码。1. 链路建立以及原创 2013-06-25 21:31:26 · 3051 阅读 · 3 评论