Tor系统中,主机的身份包括有这几种:Client,Bridge Server,Relay Server,Directory Server。
当然,有的时候一台主机是可以身兼数个身份,提供不同的服务或获取服务。
我们从最简单的客户端配置的Tor来进行分析,事先了解整个Tor系统的执行规程,之后再具体分析其他身份时候的不同操作,从而加快了解系统的速度。此处要说明的是,由于笔者对Windows的编程不甚了解,暂时就去除源码中所有为了让Tor系统具有夸平台性的Windows代码部分。
1. Tor系统的入口函数
大部分源程序的入口函数是main。Tor系统为了实现更加简便的单元测试,将main函数设为调用tor_main函数,后者是整个Tor系统的执行主函数。上述关系可以在Tor_main.c文件中看到,该文件中只是用很少的几行描述了main与tor_main之间的关系。
2. Tor系统初始化
系统初始化包括四个函数:
1)update_approx_time(time(NULL))
记录当前时间的估值,存于cached_approx_time,一般每秒钟被系统其它部分调用一次。在系统开始运行时,最先执行。
2)tor_threads_init()
根据Tor系统是否被允许是多线程运行而执行不同的操作。
若不允许多线程运行,则不做操作;
若允许,记录main_thread_id,并根据系统的平台,设置thread_initializ