Tor源码文件分析 -- Main

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

  Main文件是Tor系统的主要执行函数所处文件,内容偏多,但是较于其他底层处理函数所在的文件,也算较少。所以这里做简要的分析,其中删去很多不常见的,不重要的函数,大家可以自行在源文件内部查看。


1. 全局变量

  全局变量在文件头部定义,每个全局变量都已经有比较详尽的英文分析和解释,这里再做简单的罗列。


  1)系统(先前)已读与已写字节数以及用于流量控制的令牌桶全局变量;(先前与当前已读写字节数的区别与refill回调函数相关)

  令牌桶用于控制整个系统的流量,经过初始化,减少,增加等操作(当读写相应的令牌数不够时,系统或连接会停止读或写):

// 初始化令牌桶令牌数
/** Initialize the global read bucket to options-\>BandwidthBurst. */
void
connection_bucket_init(void)
{
  const or_options_t *options = get_options();
  /* start it at max traffic */
  global_read_bucket = (int)options->BandwidthBurst;
  global_write_bucket = (int)options->BandwidthBurst;
  if (options->RelayBandwidthRate) {
    global_relayed_read_bucket = (int)options->RelayBandwidthBurst;
    global_relayed_write_bucket = (int)options->RelayBandwidthBurst;
  } else {
    global_relayed_read_bucket = (int)options->BandwidthBurst;
    global_relayed_write_bucket = (int)options->BandwidthBurst;
  }
}
// 减少令牌桶令牌数
/** We just read <b>num_read</b> and wrote <b>num_written</b> bytes
 * onto <b>conn</b>. Decrement buckets appropriately. */
static void
connection_buckets_decrement(connection_t *conn, time_t now,
                             size_t num_read, size_t num_written)
{
  ......

  if (connection_counts_as_relayed_traffic(conn, now)) {
    global_relayed_read_bucket -= (int)num_read;
    global_relayed_write_bucket -= (int)num_written;
  }
  global_read_bucket -= (int)num_read;
  global_write_bucket -= (int)num_written;

 ......
}
// 增加令牌桶令牌数
/** Time has passed; increment buckets appropriately. */
void
connection_bucket_refill(int milliseconds_elapsed, time_t now)
{
  ......

  /* refill the global buckets */
  connection_bucket_refill_helper(&global_read_bucket,
                                  bandwidthrate, bandwidthburst,
                                  milliseconds_elapsed,
                                  "global_read_bucket");
  connection_bucket_refill_helper(&global_write_bucket,
                
Tor源码分析二 -- 目录结构 Tor由于经过了长年的开发,版本到现在已经有很多。笔者选用的是tor-0.2.3.25版本。关于版本变迁和更新说明,请大家自行查看:   https://gitweb.torproject.org/tor.git (需翻墙) 1. 源码目录关系图   Tor的源码目录中包括doc, contrib, src等一些列很莫名的文件。其实,在这些所有的文件中,除了src文件夹,其他都可 阅读详情

相关推荐

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源码分析三 -- 客户端执行流程(初始化)

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

WInScar的专栏 4147

渗透测试中优雅获取网站源码:从信息收集到实战利用

在Web安全领域,信息收集是渗透测试的基石,其核心在于系统性地发现和分析目标资产的技术栈与暴露面。理解Web应用架构原理,如版本控制、备份机制和调试端点,是高效定位敏感信息的关键。这一过程的技术价值在于,通过低噪声的侦察手段,能够深入理解应用逻辑,为后续的代码审计和漏洞挖掘奠定坚实基础。在实际应用场景中,针对常见的源码泄露点,如.git目录、备份文件或未授权访问的监控端点,渗透测试人员可以结合被动信息收集与主动目录枚举,精准定位并获取可读的源代码。本文聚焦于如何通过系统化的方法论与精细化操作,在渗透测试中优

weixin_30764883的博客 296

从Babuk到Babyk:勒索病毒变种分析与防御实战

勒索病毒是一种通过加密受害者文件并索要赎金来牟利的恶意软件,其核心原理通常结合了对称加密(如AES)与非对称加密(如RSA)技术。这种技术组合确保了加密的高效性与密钥的安全性,对个人与企业数据构成了严重威胁。在工程实践中,勒索软件即服务(RaaS)模式的出现,显著降低了攻击门槛,催生了诸如Babuk及其变种Babyk等多样化威胁。分析此类病毒有助于提取威胁情报、理解完整攻击链,并为制定精准的端点检测与响应(EDR)规则提供依据,从而在文件加密、网络通信等关键环节实现有效检测与阻断。

weixin_30383279的博客 292

Windows C++项目集成libevent:从源码编译到项目配置全攻略

事件驱动编程是现代高性能网络应用的核心范式,它通过非阻塞I/O和事件循环机制,实现高并发连接处理。其原理在于操作系统提供的I/O多路复用接口(如select、epoll、IOCP),允许单个线程监控多个文件描述符的状态变化,从而避免为每个连接创建线程的开销。这一技术价值在于显著提升服务器程序的资源利用率和吞吐量,尤其适用于Web服务器、实时通信、游戏后端等场景。在Windows平台上,许多开发者选择集成成熟的跨平台事件库libevent来构建此类应用。然而,Windows环境的独特性和Visual Stud

weixin_33871366的博客 401

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

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

359

Ubuntu终端命令操作指南与实用技巧

Linux命令行是系统管理的核心工具,通过终端可以直接与操作系统交互。Ubuntu作为最流行的Linux发行版之一,其命令行工具遵循Unix哲学,每个命令都专注于完成特定任务。掌握基础命令如文件管理(ls/cp/mv)、系统监控(top/ps)和软件管理(apt)能显著提升工作效率。在服务器管理、自动化脚本和故障排查等场景中,命令行操作比图形界面更高效可靠。本文详细介绍Ubuntu常用命令的实际应用,包括文件操作四件套(mkdir/cp/mv/rm)、系统性能分析工具(htop/iotop)以及Shell脚

weixin_34216107的博客 525

Mythos大模型如何重构漏洞挖掘方法论

漏洞挖掘正从人工驱动的经验型任务,演变为可建模、可验证、可自动化的工程问题。其核心原理在于将安全分析转化为形式化约束求解与状态一致性校验,融合符号执行、AST级依赖推理和分层推理预算分配等技术机制,显著提升长程攻击链的稳定性与跨栈漏洞发现能力。这种范式升级不仅带来渗透测试效率跃迁,更对WAF防护、开源治理、CI/CD安全及红蓝对抗逻辑构成系统性挑战。Mythos作为首个具备自主攻防链路闭环能力的大模型,标志着AI原生安全能力进入‘工程化建模’新阶段。

weixin_34006965的博客 390

Tahoe-LAFS+Ubuntu 14.04:老旧基础设施的去中心化存储生存指南

去中心化存储系统核心在于数据可用性与密码学自愈能力,其原理依托密文分片(crypttext shares)与Reed-Solomon冗余编码,通过K-of-N阈值机制实现容灾——只要任意K个加密片段完好,即可100%重建原始数据。该技术不依赖中心元数据服务器,天然规避单点故障,适用于网络不稳定、运维受限、合规敏感的边缘场景。相比Ceph或云存储,它牺牲吞吐换韧性,以端到端加密和immutable设计保障静态与传输安全。典型应用包括离线物联网日志归档、医疗设备固件分发、科研原始数据长期保存等。本文聚焦taho

weixin_34408624的博客 393

DigitalOcean App Platform app.yaml 配置规范与排错指南

YAML 是声明式基础设施的核心配置语言,其缩进规则、类型约束和解析机制直接影响云平台部署成败。理解 YAML 基础语法(如缩进敏感性、字符串与数值类型区分)是规避 'did not find expected key' 或 'must be an integer' 类错误的前提;而 DigitalOcean App Platform 对 app.yaml 的强校验逻辑,进一步放大了格式与语义的容错边界。该配置文件不仅定义服务类型、端口、路由和环境变量,更承载着应用生命周期、安全隔离(如 Secrets 引

dgoh41514的博客 384

NLP工程师实战手记:从模型复现到技术事故排障

自然语言处理(NLP)不仅是算法与模型的演进,更是工具链、数据治理与工程鲁棒性的系统性实践。理解Transformer架构原理是基础,但真正决定项目成败的是PyTorch版本兼容性、Hugging Face模型加载的Git LFS配置、随机种子可复现性等底层细节。这些‘非核心但高频’的技术盲区,构成了NLP落地的真实瓶颈。技术价值在于将论文代码转化为稳定运行的Docker服务,支撑客服问答、长文本分析、多跳推理等工业场景。本文聚焦一线NLP工程师每日直面的实操挑战:从Bootleg冷门实体消歧、Long R

weixin_30251829的博客 291

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

最新的_Tor_project_项目源代码_tor_dev

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

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

ToR

托尔

网络攻防技术-实现Tor 加密流量分类(源码).zip

本资源包包含基于Python编写的Tor加密流量分类项目源码及相应的pkl模型文件。Tor网络旨在保护用户隐私和匿名性,其加密特性使得对流量的监测和分类变得复杂。该资源适合计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等相关领域的学生、教师和企业员工使用。通过学习该项目,用户可以掌握数据捕获、特征提取、数据预处理、模型训练与评估等流程,并深入了解网络编程、数据挖掘和机器学习等领域的知识。此资源为学习者提供了一个宝贵的实践平台,帮助他们在实际项目中巩固和应用所学知识。

自定义css属性实现渐变边框动画

自定义cs属性实现渐变边框动画

lemon的博客 1875

TI AWR1642实战指南:CCS调试mmWave Demo Visualizer全流程解析

本文详细解析了TI AWR1642开发板的CCS调试流程,重点介绍了mmWave Demo Visualizer的使用方法。从环境准备、版本确认到bin文件烧录、CCS工程配置,再到调试启动与结果验证,提供了全流程的实战指南,帮助开发者快速掌握AWR1642的调试技巧,避免常见错误。

weixin_30790841的博客 111

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

weixin_37584728的博客 3458

wps脚注转参考文献格式

用于写论文时直接将规范的脚注格式转为参考文献格式

Zeaf的博客 1556

uniapp [安卓苹果App端] - 详细实现手机蓝牙连接打印机及打印票据小票/标签/面单/热敏小票订单/快递单等通用兼容适配解决方案,Uniapp对接蓝牙打印机支持各种主流品牌及打印指令,强悍插件

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果app,蓝牙打印机,uniappAPP实现通过蓝牙连接打印机打印,uniapp蓝牙连接打印机,安卓蓝牙打印插件,蓝牙打印机,蓝牙ble低功率及高功率打印机小票、标签、面单打印,手机PDA蓝牙打印插件,连接蓝牙打印机,蓝牙连接,打印文本、图片、条码、二维码,兼容斑马打印机、佳博打印机,TSC打印机,免费蓝牙打印机组件,蓝牙打印条码,蓝牙打印机连接,热敏蓝牙打印机,便携式打印机,打印机搜索不到,连接失败,发送打印命令

🏆 前端领域优质创作者 1万+

AIGC实战——变分自编码器(Variational Autoencoder, VAE)

变分自编码器通过在模型中引入随机性,并限制潜空间中的点的分布来解决自编码器存在的问题。只需进行一些微小的调整,就可以将自编码器转换为变分自编码器,从而使其成为真正的生成模型。在本节中,我们介绍了变分自编码器的基本原理,并使用 `Keras` 实现了一个变分自编码器用于生成 Fashion-MNIST 图像。

盼小辉丶的博客 1万+

高通SA8295P音频接口深度解析:全面掌握SA8295P的LS-I2S、PCM/TDM与高性能音频处理技术设计

SA8295P提供丰富的音频接口选项,包括LS-I2S、PCM/TDM和HS-I2S接口,具备灵活的配置选项,适合各种高保真音频和高速数据传输应用。结合LS-I2S和PCM/TDM接口:在复杂的音频编解码器设计中,可结合使用LS-I2S和PCM/TDM接口,以处理和传输不同的音频数据流。使用HS-I2S接口:在软件定义无线电(SDR)系统中,高速I2S接口可处理高速数据流,如无线电信号的解码和处理。LS-I2S(低速I2S)接口是SA8295P的一部分,提供了丰富的音频数据传输选项。

weixin_43199439的博客 1407

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值