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

AI 赋能测试全生命周期:多 Agent 协同的自动化提效方案

本文提出了一种基于Coze平台的多Agent协同测试解决方案,旨在解决软件测试中PRD解析不清晰、测试点覆盖不全、用例编写效率低、代码生成耗时等痛点。通过PRD优化、测试点生成、测试用例生成和单元测试框架生成四个Agent的协同工作,结合Cursor工具实现从需求到代码的全链路自动化。以电商平台登录模块为例,展示了从模糊PRD到标准化测试用例和可执行Java单元测试代码的完整转化流程。该方案通过AI赋能显著提升测试效率,减少人工干预,实现测试覆盖率≥95%,为快速迭代的软件研发提供了高效的测试自动化支持。

QINJIEEE的博客 1102

提示词工程的几个参数

低 temperature + 低 top-p:输出最稳定、最可靠,适合需要准确性和一致性的场景。高 temperature + 高 top-p:输出最多样化、最富有创意,适合需要灵感和探索的场景。Max Length:您可以通过调整max length来控制大模型生成的 token 数。指定 Max Length 有助于防止大模型生成冗长或不相关的响应并控制成本。是一个字符串,可以阻止模型生成 token,指定是控制大模型响应长度和结构的另一种方法。例如,您可以通过添加 “11” 作为。

weixin_44212787的博客 1826

UART中断接收的实战陷阱:HAL库常见误区与性能调优指南

本文深入解析STM32 HAL库UART中断接收机制,揭示常见实战陷阱如数据溢出、中断优先级配置不当等,并提供性能调优方案。重点介绍如何使用空闲中断处理不定长数据、DMA与中断混合模式优化,以及工业级错误恢复与流量控制策略,帮助开发者构建稳定可靠的串口通信系统。

pea55的博客 747

(完整版)从零开始教你玩转ComfyUI-保姆级部署教程-手把手带你ComfyUI工作流搭建

ComfyUI就像拥有一支神奇魔杖,可以轻松创造出令人惊叹的AI生成艺术。从本质上讲,ComfyUI是构建在Stable Diffusion之上的基于节点的图形用户界面(GUI),而Stable Diffusion是一种最先进的深度学习模型,可以根据文本描述生成图像。但ComfyUI真正特别之处在于,它如何让像你这样的艺术家释放创造力,将你最疯狂的想法变为现实。想象一下有一块数字画布,你可以通过连接不同的节点来构建自己独特的图像生成工作流,每个节点代表一个特定的功能或操作。

php源码 4万+

【搭建实战】全国天气预报看板搭建

不仅如此,码匠还一站式提供了企业内部系统常用的租户管理、细粒度的权限控制、审计日志等功能,让您快速搭建后台应用的同时,也为您的企业信息安全保驾护航。是一款国内研发的开发者友好的低代码平台,您无需了解React/Vue等框架的开发、部署等各种细节,就可以快速打通前后端,连接RESTAPI、MySQL、MongoDB等多种数据源,然后通过一套开箱即用的组件,轻松搭建功能完善的数据看板、数据洞察、Admin管理后台等多种应用。天气预报对我们的各项活动有很大的帮助,可以让我们合理安排自己的出行等活动。...

weixin_39545889的博客 428

瑞芯微rk3568移植openbmc(一)----关于ob移植的优缺点

基于rock3a的单板,CPU为瑞芯微rk3568的环境,移植了openbmc

feixiang3839的专栏 5537

2025年7月5日全国青少年信息素养大赛Python编程初中组复赛真题+答案解析

2025年7月5日全国青少年信息素养大赛Python编程初中组复赛真题+答案解析

伶俐角少儿编程 466

【五分钟论文笔记】Vision Banana:图像生成器成为通用视觉学习器

图像生成训练可以像 LLM 预训练一样,让模型学习强大且通用的视觉表示感知即生成——将视觉任务输出参数化为 RGB 图像,是一种优雅且强大的统一框架视觉理解能力可以在不牺牲生成能力的情况下获得——两者可以共存于同一个模型。

专注:太空算力、AI infra、异构调度、大模型成本工程 232

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

廖雪峰Python教程[完整版]

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值