自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (8)
  • 收藏
  • 关注

原创 Tor源码分析完整整理,书籍编撰

https://drive.google.com/folderview?id=0B3IWwDFNML7gfktlYjUwYjNHR25xbkVrZldyMk4zcHFWY3VpLTBDc3U3X0o5NHJYb0N1bWs&usp=sharing上述链接是编撰到一半的Tor源码分析的文档。有兴趣一起编撰的朋友请加前一篇Blog的QQ群聊。

2015-08-06 03:34:02 3739 3

原创 TOR源码分析交流群 188088782

大家好,由于自己近期没有继续从事TOR源码方面的研究,博客没有往下写,有兴趣的朋友可以加入QQ群:188088782大家集思广益,总能找到解决各种TOR相关问题的办法。

2015-05-05 17:53:17 1770 2

原创 Tor源码分析十一 -- 客户端执行流程(网络信息的下载续)

通过上一节中我们对连接和链路的重新描述,我们可以继续进行源码的分析了。在本节中,我们会开始着重讲述链路的建立,以及链路所基于的OR连接的建立,同时还有部分Libevent调度的再度分析。大家会明白,进行到此处之时,我们已经开始接触Tor系统最底层,最深藏着的连接机制以及调度机制。这个部分,是整个系统的精髓。后期几乎所有的应用请求连接处理等,都是重复地使用该部分的代码。1. 链路建立以及

2013-06-25 21:31:26 3035 3

原创 Tor源码分析十 -- 连接和链路

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

2013-06-21 22:01:00 6019

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

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

2013-05-28 14:58:24 4117

原创 Tor源码文件分析 -- Cpuworker

我们知道,对于Tor的服务器来说,有的时候因为其访问量巨大,不得不采取一些相应机制来保证服务的正常提供。在服务器编程里,我们经常可以用到的技术,例如线程池,多路复用等。Tor程序,在大多数情况下,都是单进程运行的,几乎没有哪里用到多线程的操作。正因为如此,Tor的主进程才绝对不允许出现阻塞式的操作。但是,唯独在一处,Tor为了提高自身效率,利用了线程池类似的机制。这个部分就是Cpuworker。本

2013-05-24 12:12:28 3883

原创 Tor源码文件分析 -- Log

日志模块是Tor系统中一个非常重要的部件。它将Tor系统中的所有事件,分成不同的严重级别,分成不同的系统域,进行统一的日志处理。同时它还维护着一个日志记录链表。日志记录链表内存储的是所有日志需要输出的目标日志文件或目标日志输出位置。下文中我们会详细地对日志模块进行分析,并简要说明源文件中的各函数的简单作用。1. 严重等级和域  日志模块内定义了5个严重等级,其具体的设定如下:/**

2013-05-22 20:29:11 3339

原创 Tor源码文件分析 -- Control

传统上我们所指的系统信号,就是系统传递给进程的控制信号。例如,SIGINT,SIGTERM等等。这些信号的传递,通常都是指示相关进程完成相应的操作,或暂停或终止,或其他一些操作。在Tor系统中,信号分为两种:传统信号,控制器信号。下面代码段是这些信号的简单罗列:/* These signals are defined to help handle_control_signal work. */

2013-05-22 16:13:03 1760

原创 Tor源码文件分析 -- Hibernation

本篇会介绍Tor系统的休眠模块。休眠模块的代码处于源文件Hibernation.c之中。简单的说,其主要作用就是在适当的时机将系统进入休眠状态以保护系统资源被过度消耗;或者在适当的时机重新唤醒系统以达到重新为全局服务的目的。在默认的系统配置下,客户端的休眠模块是被关闭的,也就是说客户端永远不会进入休眠态。而Tor系统中的工作路由服务器则并非如此。他们很多时候需要设置一些为网络服务的策略和带宽,那么

2013-05-21 18:32:36 2183

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

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

2013-05-13 15:16:42 3218

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

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

2013-05-11 15:33:09 8501 1

原创 Tor源码分析六 -- 总体框架图

1. 客户端的总体框图  由于画框图的过程稍微繁琐,所以框图给出的稍慢了些,请大家见谅。同时,框图画的比较急促,一定会有错误的地方,请大家指正。  框图中给出了客户端Tor系统所使用到的最重要的结构体以及其成员变量,有兴趣的朋友可以自行比对,这里就不便多说了。2. 服务器端的总体框图(2合1)  服务器端的框图将两种身份的服务器所使用到的主要结构体均画了出来。也就是

2013-05-10 11:36:46 3576

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

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

2013-05-09 21:46:40 3565

原创 Tor源码文件分析 -- Circuits全局变量

Tor系统源码中用于控制链路circuit的文件主要有三个,分别是:circuitlist.c,circuituse.c,circuitbuild.c。这三个文件分别主要针对的处理功能与他们的名字相类似,即分别处理链路的组织,使用和建立。在本篇中,我们只介绍主要用于链路部分的全局变量,即存在于这三个文件之中的全局变量的使用。此处不再罗列链路函数,因为链路部分的函数着实不少,尤其是链路建立部分。或许

2013-05-09 10:39:12 2412 2

原创 Tor源码文件分析 -- Connetion_Edge

所谓的Edge连接主要是形容在链路两端所使用的连接,包括AP连接与EXIT连接两种。Edge连接的存在,主要是为了个应用程序连接提供服务,所以才将两种Edge连接命名为Application Proxy应用代理连接和EXIT出口连接。这两种连接主要出现于链路两端,即链路第一跳与链路最后一跳,分别用于接受应用请求和处理应用请求的发出。因为Edge连接在Tor系统中也具有重要的作用,所以本篇就简单分析

2013-05-08 10:33:17 2230

原创 Tor源码文件分析 -- Connection_OR

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

2013-05-07 12:12:06 2359

原创 证明方法简析

数学上的证明方法有很多,今天翻离散数学翻到证明方法的部分,觉得很是经典,所以将他们列在这边,以便自己时时记在心上。  定理常见的形式是“P成立当且仅当Q成立”,“如果P成立,那么Q成立”。而前者又相当于P推出Q,并且Q也推出P,所以归根到底,定理的主要形式是P推出Q,至于其他形式,诸如非P的形式,只需要证明P是假;PQ均成立,只需证明P成立且Q成立;P或Q成立,只需证明P成立,P不成立

2013-05-01 23:27:22 1648

原创 Tor源码文件分析 -- Connection

Tor协议的层次结果经过简要分析可以大致概括为如下框图:                DIR连接……            应用层              ------------------------                AP连接,EXIT连接……              ------------------                Cir

2013-04-27 17:24:47 2299

原创 Tor源码文件分析 -- Main

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

2013-04-27 16:50:32 2433

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

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

2013-04-27 09:41:25 3374 1

原创 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 5251

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

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

2013-04-26 14:40:34 3886

原创 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 5884 2

原创 Tor源码分析一 -- 使用工具集

Tor系统是用于匿名通信的一个系统,源代码的维护到今天已经快10年。笔者从今年3月份开始陆陆续续研究Tor系统的源码,由于源码量大,也有很多需要总结的地方,所以特地在这里开辟个Tor源码分析的系列文章,供自己总结,也供大家共同探讨。1. 源码查看工具 -- SourceInsight  本来Tor源码在Linux下分析和调试都可以比在Windows下更专业些,但是因为笔者本身大部分

2013-04-25 10:51:22 6039 1

原创 C专家编程(二)

第四章,数组和指针不同第五章,对链接的思考1. 怎么样在函数库中观察一个符号?  一般有些情况下,我们会在链接程序的时候遇到这样的错误提示:undefined symbol xxx  它提示我们无法找到符号 xxx 的定义,我们可以通过搜索链接库的笨办法来找到它(笨办法,好办法是直接百度)  编写如下的 shell 文件:      cd /usr/lib

2013-01-25 11:13:50 925

原创 C专家编程(一)

前言1. 比较语句养成先写常数值的习惯: if (3 == x) ……第一章,穿越时空的迷雾1. 关键字 const 并不能把变量变成常量,它的限定作用只表示它所限定的符号不能被赋值:  const int limit = 10;  const int *limitp = &limit;  int i = 27;  limitp = &i;   关于指针的

2013-01-24 12:13:43 847

转载 LIB和DLL的区别与使用

共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。共有两种链接方式:动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅

2012-09-03 15:08:26 747

原创 SRM500 DIV2 - SRMCards

Problem Statement  从一串数中取数,取走其中一个数的时候,要连带取走与其相邻的数字(例如:取走10,若数串中有9和11,就也都取走)。  要求:给一串数,设计算法,使得取数的次数最多。 DefinitionClass:SRMCardsMethod:maxTurnsParameters:vector

2012-02-23 16:00:55 857

转载 Linux下patch的制作和应用

转自:http://blog.chinaunix.net/u3/100239/showart_1984963.html首先介绍一下diff和patch。在这里不会把man在线文档上所有的选项都介绍一下,那样也没有必要。在99%的时间里,我们只会用到几个选项。所以必须学会这几个选项。1、diff    --------------------    NAME

2012-01-13 09:02:56 689

转载 #pragma once 与 #ifndef 的区别

为了避免同一个文件被include多次1   #ifndef 方式2   #pragma once 方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。    方式一:    #ifndef __SOMEFILE_H__    #define __SOMEFILE_H__    ... ... // 一些声明语句

2011-11-27 10:05:56 4813 2

转载 Ubuntu SAMBA服务器配置

本文大部分内容来自http://blog.sina.com.cn/s/blog_4de067e40100n6x2.html 一. samba的安装:    sudo apt-get insall samba    sudo apt-get install smbfs二. 修改Sa

2011-07-20 13:35:26 1017

翻译 man inittab(5)(中文翻译缩略版)

inittab(5) - Linux man page名字inittab - 被系统进程所使用的文件格式 描述inittab 文件描述在系统初始化阶段及普通操作时哪些进程需要被开启 (e.g. /etc/init.d/boot, /

2011-07-19 21:40:57 1449 1

转载 Ubuntu NFS服务器的配置

大部分内容转自文章:http://blog.csdn.net/yangzhu1982/article/details/6265175  这里对NFS服务器就不多加介绍,想要配置该服务器的朋友定然会知道这是用来做什么的,所以我们直接以下的介绍。 1、安装Ubuntu nfs  Ub

2011-07-14 15:12:09 10024

翻译 man netstat(8) (中文翻译缩略版)

netstat(8) - Linux man page(中文翻译) 名称netstat - 输出网络连接, 路由表, 接口统计数据, 伪连接,及多播成员 大纲netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw

2011-07-07 21:17:31 1991

原创 Ubuntu VNC服务器与XDMCP服务器的配置

1.VNC服务器配置  我所使用的ubuntu 10.04版本上自带了一个VNC服务器vino。  该服务程序当开启允许远程登录服务时候,会自动启动,所以Ubuntu上根本不存在什么配置VNC服务器的难度。  安装VNC客户端:    $:sudo apt-get install

2011-07-07 13:30:57 2474

原创 Ubuntu Telnet服务器与SSH服务器的配置

关于这两种服务器的作用就不讲拉,很多书里对这两种协议的优缺点都有很详细的介绍,我们直接进入配置阶段。  我使用的Ubuntu版本书10.04,不同的版本会略有区别,有错误的地方请大家不吝赐教。1.Telnet安装:  我们需要先安装其服务器,命令行输入如下:

2011-07-05 12:45:26 2824

转载 Linux系统调用列表

  以下内容转载自:http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html   以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见

2011-06-10 22:23:00 775

翻译 man proc(5) (中文翻译缩略版)

<br />proc(5) - Linux man page(中文翻译)名字<br />proc - process information pseudo-filesystem,进程信息伪文件系统描述<br />proc是个作为内核数据结构接口的伪文件系统,他被挂载在/proc目录下。该目录下大多数文件是只读的,但某些文件也允许内核变量被修改。<br /><br />/proc/[number]<br />/proc目录下用数字表示的子目录对应着系统中正在运行的一些进程,子目录名即为进程的PID。每个进程子

2011-06-02 11:47:00 2497

翻译 Understanding the linux 2.6.8.1 scheduler

深入理解Linux 2.6.8.1 CPU 调度器深入理解Linux 2.6.8.1 CPU 调度器11. 简介31.1 文件综述31.2 Linux内核著作31.3 排版约定41.4 关于该文档41.5 随书CD42. Linux内核源码52.1 获取源码52.2 内核版本管理52.3 代码组织53. 进程与线程综述63.1 程序和进程63.2 线程63.3 调度63.4 CPU与IO受限的线程73.5 上下文切换73.6 Linux进程与线程84. Linux调度目标94.1 Linux的目标市场及他们

2011-05-17 20:02:00 2787

原创 Debian下配置邮件服务器全过程

<br />1.安装虚拟机<br />现有系统是windows xp系统,在该系统下原先已经安装了VM 5.5。在配置过程中发现VM 5.5的许多配置过程稍显复杂,尤其是网络配置过程比较艰辛,所以选择了VM 6.5进行安装。安装过程中需要用到的序列码可以上网查找。<br />安装完成之后需要为后续安装的虚拟系统做准备。最主要的是虚拟连接的配置,这里就着重介绍下虚拟连接的配置过程。<br />在默认情况下,在虚拟机安装成功之后,系统会自动添加两个虚拟连接:VMNET1,VMNET8。我们对它们的IP地址和网关

2011-05-13 11:21:00 3151

西电研究生学位论文撰写及格式排版手册(插图版)

西电研究生学位论文撰写及格式排版手册,对word等论文排版进行了详细的介绍。

2011-06-02

Linux下USB数据采集设备驱动程序设计

Linux下USB数据采集设备驱动程序设计(毕业论文)

2011-06-02

man proc(5) (中文翻译缩减版)

man proc(5) (中文翻译缩减版)

2011-06-02

EZ-USB FX2LP Linxu Driver API

EZ-USB FX2LP板Linux驱动的API(原创) EZ-USB FX2LP板Linux驱动与其配套使用

2011-05-18

EZ-USB FX2LP Linxu Driver

EZ-USB FX2LP板子的Linux驱动(原创)

2011-05-18

Understanding the Linux 2.6.8.1 CPU Scheduler(中文翻译)

《Understanding the Linux 2.6.8.1 CPU Scheduler》的中文翻译

2011-05-18

EZ_USB Control Panel 文档及源代码

Cypress EZUSB 板的控制面板源码

2011-05-18

EZ_USB DRV驱动程序源代码(VC工程文件,DDK开发)

Cypress EZUSB 板的驱动程序源码

2011-04-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除