Tor源码分析二 -- 目录结构

Tor源码文件分析 -- Main Main文件是Tor系统的主要执行函数所处文件,内容偏多,但是较于其他底层处理函数所在的文件,也算较少。所以这里做简要的分析,其中删去很多不常见的,不重要的函数,大家可以自行在源文件内部查看。 1. 全局变量   全局变量在文件头部定义,每个全局变量都已经有比较详尽的英文分析和解释,这里再做简单的罗列。   1)系统(先前)已读与已写字节数以及用于流量控制的令牌桶全局变量;( 阅读详情

  Tor由于经过了长年的开发,版本到现在已经有很多。笔者选用的是tor-0.2.3.25版本。关于版本变迁和更新说明,请大家自行查看:

  https://gitweb.torproject.org/tor.git (需翻墙)


1. 源码目录关系图

  Tor的源码目录中包括doc, contrib, src等一些列很莫名的文件。其实,在这些所有的文件中,除了src文件夹,其他都可以在初期暂时不去理会。所以,这里我们就谈src文件夹下的目录结构,也是Tor源码核心的目录结构。

  上面两图已经基本给出了各个子目录之间的关系和引用次数。总的来说,src目录下包括下列这样的目录:

  1)win32:用于Windows的目录,内部只含有一个orconfig.h文件。主要用于Tor源码的跨平台编译。

  2)common:Tor源码中基本通用函数的封装目录。包括:OpenSSL,Libevent的封装,TLS的封装,链表和哈希表的实现等。

  3)tools:Tor使用工具目录。包括:密钥验证,证书生成,域名解析和防火墙辅助的实现。

  4)or:Tor核心程序逻辑目录。(Tor系统所有核心协议的实现目录)包括:客户端身份核心代码,路由身份核心代码,目录服务器身份核心代码等。

  5)test:Tor源码各功能模块的测试代码目录。

  6)config:配置文件模板目录


2. or目录下的各文件

  or目录是Tor源代码的核心,有必要简要介绍下该目录下的文件的主要作用:(细节部分后期会逐个文件分别进行分析)


以下部分同时用于OP与OR:(Onion Proxy, Onion Router)

  1)Buffers:缓冲区相关结构体及处理函数;

    a generic interface buffer. Buffers are fairly opaque string holders that can read to or flush from: memory, file descriptors, or TLS connections.

  2)Circuitbuild:链路建立相关函数;

    The actual de

Tor源码分析十 -- 连接和链路 源码分析到这个部分,为了让大家明白源码中的编码逻辑,不得不开始从头梳理程序内部的复杂连接和链接组织形式。否则大家后期会更加一头雾水。笔者开始分析源码之时,没有这些宏观的概念,只能死嚼代码,硬猜硬想,再加以检查代码进行验证,才得以明白程序的主要框架逻辑。如果再以猜测验证的模式向大家讲述源码,必定会越来越混乱。所以,在本节之中,我们会将系统中所有的连接类型,链路类型和他们之间的关系和代码之中的关联方式 阅读详情

相关推荐

Tor源码分析 -- 附录 Tor Manual

TOR(1) Manual Page Analysis NAME tor - The second-generation onion router SYNOPSIS tor [OPTION value]… DESCRIPTION tor is a connection-oriented anonymizing communication service. Use

WInScar的专栏 5570

Tor源码分析八 -- 客户端执行流程(second_elapsed_callback函数)

在之前的客户端源码分析中,我们讲述了整个客户端的事件集和相关调度规则。每一类事件的激活都有相应的条件,要么是socket可读写,要么是收到信号,要么是定时事件到达,还有手动的事件激活。总而言之,系统中添加的所有事件经过Libevent的调度,使得整个系统有条不紊的运行起来。同时,每个事件均有其对应的事件处理函数,在系统运行起来之后,一旦事件被激活,就会调用相应的回调函数进行处理。   本文我们着

WInScar的专栏 3482

Tor源码分析四 -- 客户端执行流程(初入主循环)

在上个小节中,已经基本分析了Tor系统的初始化过程。该过程中,最重要的部分,就是对默认配置文件、输入配置文件以及命令行参数进行综合整理,定出最后的配置方案。而后通过配置方案,启动系统的基础部分。这里值得说明的是,Tor系统的所有配置选项,均可以在Tor Manual中找到。并且,根据Tor系统配置成不同的身份,使用的配置选项也会有细微差别。默认的配置固化在代码内部,有兴趣的朋友可以就初始化部分往下

WInScar的专栏 3758

Tor源码分析七 -- 握手协议

本节主要讲述Tor系统中所用到的握手协议。握手协议分三层:TCP握手;TLS握手;Tor握手。其中Tor握手又分为三个层次:OR握手;链路建立;流建立。   TCP的三次握手我想应该学计算机方向的朋友无人不知了,所以此处就略去。而TLS是SSL的升级版本,其握手过程与SSLv3几乎一致。同时由于TLS根据客户端的不同握手选择,会有些许握手过程中的差别,我们希望大家能够找到TLS相关的书籍翻阅。此

WInScar的专栏 9308

Tor源码分析三 -- 客户端执行流程(初始化)

Tor系统中,主机的身份包括有这几种:Client,Bridge Server,Relay Server,Directory Server。   当然,有的时候一台主机是可以身兼数个身份,提供不同的服务或获取服务。   我们从最简单的客户端配置的Tor来进行分析,事先了解整个Tor系统的执行规程,之后再具体分析其他身份时候的不同操作,从而加快了解系统的速度。此处要说明的是,由于笔者对Windo

WInScar的专栏 4147

Tor源码分析九 -- 客户端执行流程(网络信息的下载)

源码分析到这里,大家应该已经大致了解到Tor系统的前期启动没有做任何的下载操作。前期启动的最关键环节,就是正常开启Libevent的调度机制,从而有条不紊地进行系统内所有子模块的维护等。我们需要再次强调的是,系统的主进程内,是没有做任何直接的获取网络状态,获取路由描述符,获取额外路由信息的操作。系统将这些操作视为需要实时维护的工作,因为所有这些网络信息都有其时限。所以,对这些网络信息的获取,全部置

WInScar的专栏 4410

渗透测试实战:从信息收集到内网横向移动的完整攻防思维

渗透测试是网络安全领域的核心实践,旨在通过模拟攻击来评估系统安全性。其原理在于主动发现并利用目标系统的技术漏洞与业务逻辑缺陷,从而验证安全防御的有效性。这项技术的价值在于将潜在风险前置暴露,帮助企业在遭受真实攻击前加固防线。在金融、电商、博彩等高价值业务场景中,渗透测试尤为重要。本文以一次模拟实战为例,深入剖析了从外部信息收集、资产测绘,到利用Jenkins未授权访问等薄弱点突破边界,再通过内网代理穿透、凭据复用进行横向移动的完整攻击链。整个过程融合了WAF绕过、蜜罐识别等实战技巧,为理解复杂网络环境下的系

359

Tor源码分析五 -- 客户端执行流程(libevent调度)

上一源码分析的小节中,已经将系统的主要流程启动过程介绍完毕。实际上,系统在如此启动之后,就可以通过正确的流程将Tor系统完整的启动起来,为用户提供应用程序代理服务,以达到匿名通信的目标。本节的目标,不是为了详细介绍系统初始化后的正确启动流程,而是介绍系统是如何通过Libevent的调度实现成功启动的。也就是说,本节的重点在于说明Libevent调度机制在Tor系统之中的应用。   上节当中也简要

WInScar的专栏 3906

Tor源码文件分析 -- Connection_OR

作为连接类型中最重要的一种连接,OR连接对OP与OR之间,OR与OR之间的通信负全责。也就是说,OR连接的存在,是解决底层两机之间通信的必要条件。所以,有必要对OR连接的源码文件进行深入分析,并对OR连接先做简要介绍。后期,在介绍Tor系统的全部连接之时,会更加详细地介绍各种连接及他们的作用。   OR连接,即Onion Router连接,是用以连接Tor系统内两结点的连接。该连接的主要功能包括

WInScar的专栏 2624

Tor源码 -- core分析

tor coreor connectioncircuitstream or connection or connection负责op与or或者or与or的连接(两个主机之间的连接)。 包括TLS连接,handshake等等。 到目前为止, tor有3种握手方式:certificate up-front, renegotiation, in-protocol. or_connection_st.h声明了or connection数据类型,connection_or.c文件有操作函数。 circuit stre

网络空间安全学者 990

最新的_Tor_project_项目源代码_tor_dev.zip

最新的_Tor_project_项目源代码_tor_dev

网络反监控软件 Tor源码附带openssl开发包

网络反监控软件 Tor源码附带openssl开发包

安卓Android源码——TorProxy和Shadow开源项目.zip

安卓Android源码——TorProxy和Shadow开源项目.zip

ZYNQ RFSoC 的DAC如何做到从 0到Fs频段 信号输出

之前一直没太了解 RFSoC 的DAC如何输出在 Fs/2 到 Fs 频率范围内的信号,例如 ZCU216中的 ZU49DR,其RF-DAC最大采样率是 9.85GSPS,如果想输出的信号中心频率在5.8G,它是如何有效输出在第二奈奎斯特区域范围的信号的。

weixin_44630490的博客 1551

智警杯1.4---excel可视化

知识点

lulu001128的博客 949

STM32F103C8T6实战:从零搭建三相SPWM逆变器(附MATLAB仿真、PCB、源码)

本文详细介绍了如何使用STM32F103C8T6单片机从零搭建三相SPWM逆变器,涵盖硬件选型、PCB设计、SPWM算法实现及MATLAB仿真。项目提供完整的工程文件,包括源码、PCB设计和仿真模型,适合电子工程师和学生进行实践学习。通过本教程,读者可以掌握逆变器设计的核心技术和调试方法。

weixin_30458043的博客 453

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 352

基于Simulink的PR(比例谐振)控制器在单相整流中的应用

本文详细介绍了基于Simulink的单相整流系统中PR(比例谐振)控制器的设计与实现方法。首先阐述了PR控制器相较于传统PI控制器的优势,能够有效消除交流信号跟踪中的稳态误差。接着系统讲解了PR控制器的传递函数原理、实用型设计(带带宽)及参数整定方法。通过Simulink建模步骤,包括主功率电路搭建、电压外环PI设计、电流指令生成、PR控制器实现(推荐MATLAB Function方法)和SPWM调制等关键环节。仿真对比显示PR控制在电流跟踪精度(THD仅1.9%)、功率因数(0.998)和动态响应(突变恢

amy_mhd的博客 689

从代码仓库到知识库:自动化构建与RAG技术实践

在软件工程领域,代码库的规模与复杂性日益增长,如何高效管理和利用其中的知识成为关键挑战。传统文档工具主要依赖注释提取API信息,而现代知识构建技术则通过抽象语法树(AST)解析、自然语言处理等手段,深入理解代码结构、调用关系和业务逻辑。其核心价值在于将非结构化代码转化为机器可理解、可检索的结构化知识,显著提升代码资产的可维护性和团队协作效率。这一过程通常涉及代码解析、信息提取、向量化表示和存储索引四个关键阶段,其中向量化技术将代码语义转化为高维向量,为语义搜索奠定基础。结合检索增强生成(RAG)架构,开发者

weixin_42545292的博客 415

华为OD机考2025C卷 - 高矮个子排队(Java & Python& JS & C++ & C)

华为OD机考2025C卷 - 高矮个子排队。提供在线OJ刷题。Java、C++、Python、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1682

【实验】ENSP 实战:酒店有线 + 无线三层组网全配置(VLAN 规划 + AC/AP+SSID 绑定)

三层架构:出口路由器 → 核心交换机 → 汇聚交换机 → 接入交换机 / AP / 终端。

jundao1997的专栏 431

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: Tor源码分析一 -- 使用工具集
下一篇: Tor源码分析三 -- 客户端执行流程(初始化)
WInScar
博客等级 码龄17年 134粉丝 56原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值