可控分布式代理平台的制作方法

文档序号:7555775阅读:163来源:国知局
专利名称:可控分布式代理平台的制作方法
技术领域
本发明涉及一种代理平台,特别涉及一种可控分布式代理平台。
背景技术
在经济高速发展的今天,互联网成为越来越多的人生活不可缺少的一部分。网络的完善与发达在给人们带来便利、促进国民经济发展的同时,也使得有害信息传播更为便利和迅速,不法分子对网络的攻击和窃取变得更为容易和隐蔽。因此,我们需要一种高效的手段对敏感信息进行检测,防范不法分子的攻击。代理平台即是在这种环境下应运而生。一股的代理平台为用户提供HTTP (超文本传送协议)网页代理或者SOCKS (防火墙安全会话转换协议)代理。HTTP代理需要对用户的HTTP协议进行解析处理,譬如著名的开源软件nginx。SOCKS代理软件不解析用户的HTTP协议请求。常规的代理平台基本上都能够为用户提供代理请求,然而它们没有或者缺少审计和信任机制,致使不法用户可能对系统进行DDOS等攻击行为,或者访问不法网站,获取不良信息,造成网络上不良信息的泛滥,给社会主义文化建设带来隐患。因此我们需要一个能为用户提供便捷高效代理功能,同时又能给管理人员提供审计和接入控制的分布式代理平台。代理平台应该方便自身服务器的扩充或者减少,分布式平台之间应该自我学习,自动更新相关运行信息。

发明内容
本发明的目的是为了解决一股平台没有审计和信任机制,致使不法用户可能对系统进行DDOS等攻击行为,或者访问不法网站,获取不良信息的问题,本发明提供一种可控分布式代理平台。本发明的可控分布式代理平台,它包括进程管理模块、配置文件管理模块、日志输出模块、事件管理模块、内存管理模块、I/o管理模块、代理模块和监控模块;进程管理模块,用于创建、运行、维护和销毁配置文件管理模块、日志输出模块、事件管理模块、内存管理模块的进程以及线程;配置文件管理模块,用于为所述代理平台的其他各模块提供配置文件的解析与加载;日志输出模块,用于为所述代理平台的其他各个模块提供日志输出功能;事件管理模块,用于处理来自外界的连接请求、来自I/O管理模块的I/O事件请求、代理模块的S0CKS4或S0CKS5代理请求和监控模块的监测请求;内存管理模块,用于为进程管理模块、事件处理模块和I/O管理模块进行内存管理;I/O管理模块,用于接收和发送网络数据;代理模块,用于提供代理服务和提供分布式代理机群问协作功能,支持S0CKS4版本和S0CKS5版本的SOCKS协议;监控模块 ,用于接收控制中心发送的命令,并根据所述命令执行相应的操作。
本发明的优点在于,本发明的可控分布式代理平台为普通因特网用户提供SOCKS代理服务。该代理系统实现了信任管理机制,将阻断用户对不良网站的访问,限制不良用户的网络访问。本系统运行在Linux服务器上,可以使用多台服务器进行分布式服务,形成代理集群。集群之间可以方便的同步各项运行参数。系统通过监控模块提供了完整的自我监测功能,用于对自身运行状态进行监测,方便维护人员进行系统管理。代理系统可以将获取到的用户请求转发给缓存服务器,缓存服务器可以直接返回拥有的数据,否则将向源站点转发请求,获取目的数据。所以本发明的代理平台具有审计和信任机制,有效的阻止用户对系统进行DDOS和访问不法网站,获取不良信息的行为。


图1为本发明的可控分布式代理平台的的原理示意图。图2为具体实施方式
三所述的可控分布式代理平台的S0CKS4模块的函数调用流程不意图。图3为具体实施方式
四所述的可控分布式代理平台的S0CKS5模块的函数调用流程不意图。图4为具体实施方式
五所述的可控分布式代理平台的cluster模块的函数调用流程不意图。图5为具体实施方式
六所述的可控分布式代理平台的upserving模块的函数调用流程示意图。图6为具体实施方式
七所述的可控分布式代理平台的监控模块的函数调用流程示意图。图7为具体实施方式
八所述的可控分布式代理平台的进程管理模块函数调用流程不意图。图8为具体实施方式
九所述的可控分布式代理平台的事件管理模块的函数调用流程示意图。图9为具体实施方式
十所述的可控分布式代理平台的I/O管理模块的函数调用流程不意图。图10为对单台代理服务器构成的代理平台的并发测试结果曲线示意图。图11为对本发明的代理平台的并发测试结果曲线示意图。
具体实施例方式具体实施方式
一:结合图1说明本实施方式,本实施方式所述的可控分布式代理平台,它包括进程管理模块、配置文件管理模块、日志输出模块、事件管理模块、内存管理模块、I/o管理模块、代理模块和监控模块;进程管理模块,用于创建、运行、维护和销毁配置文件管理模块、日志输出模块、事件管理模块、内存管理模块的进程以及线程;配置文件管理模块,用于为所述代理平台的其他各模块提供配置文件的解析与加载;
日志输出模块,用于为所述代理平台的其他各个模块提供日志输出功能;
事件管理模块,用于处理来自外界的连接请求、来自I/O管理模块的I/O事件请求、代理模块的S0CKS4或S0CKS5代理请求和监控模块的监测请求;内存管理模块,用于为进程管理模块、事件处理模块和I/O管理模块进行内存管理;I/O管理模块,用于接收和发送网络数据;代理模块,用于提供代理服务和提供分布式代理机群间协作功能,支持S0CKS4版本和S0CKS5版本的SOCKS协议;监控模块,用于接收控制中心发送的命令,并根据所述命令执行相应的操作。本实施方式中的内存管理模块主要负责系统内部内存的申请,维护与释放工作。
管理器在工作时,采用预分配的机制,先分配一个足够大的内存池-cache,而后通过
ss5_palloc族函数从内存池中申请内存。待内存使用过后,利用ss5_destroy_pool O函数将内存池销毁,以将其释放到操作系统中。该模块为系统内存管理模块,可以有效避免内存碎片产生,同时还能起到cache的作用。该内存管理机制采用内建的方式存在于系统之中。本实施方式中 的日志输出模块主要提供系统的日志输出功能,该模块中的组件是为其他模块提供服务而存在的。在实际系统开发时,经常用到的函数接口仅为ss5_l0g_error O , ss5_log_debugx O等,其余的函数均由这两个函数调用,最终完成日志输出功能。日志输出分为dubug模块和非dubug模式。DEBUG模式用于开发阶段对系统进行调试,可以只打印输出待调试的模块信息。非DEBUG模块用于系统正常使用阶段的打印输出,从高到低分为若干级别,输出的内容也越来越多。模块中的两种模式具有互斥性,不能同时开启。
具体实施方式
二:本实施方式是对具体实施方式
一所述的可控分布式代理平台的进一步限定,所述代理模块包括S0CKS4模块、S0CKS5模块、cluster模块和upserving模块;S0CKS4模块,用于提供SOCKS代理服务;S0CKS5模块,用于提供SOCKS代理服务;cluster模块,用于处理集群之间配置信息同步,协调不同代理服务器之间的运行状态;upserving模块,用于完成集群内部连接服务请求转移的功能。每个服务器的代理系统,都包含了 S0CKS4和S0CKS5的功能,是一个同一的整体,只是在运行的过程中根据客户请求类型的不同进入到不同的处理流程。不同的代理服务器指的是代理服务器A和服务器B,cluster负责在这两台服务器之间同步各自代理系统的配置文件。
具体实施方式
三:结合图3说明本实施方式,本实施方式是对具体实施方式
二所述的可控分布式代理平台的进一步限定,S0CKS4模块包括如下函数模块:ss5_socks_init_connectionO、ss5_socks_init_requestO、ss5_socks_handlerO、ss5_socks_parse_request_line()、ss5_socks5_handler ()、ss5_socks4_handler ()、
ss5—rule—check ()、 ss5—4—parse—request ()、ss5—socks4—process—handler ()、ss5—4—process—request ()、ss5—4—connect—serving ()、ss5—4—bind—serving ()、ss5_4—nonblocking—connect—handler ()、ss5—socks—upserving ()、ss5_socks_prepare_connection ()、ss5_socks—prepare_data—queue ()、ss5_install_data—transfer—hanlders ()和 ss5—handle—read—event ();上述函数模块的调用流程如下:函数ss5—socks—init—connection O实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks_init—request O,
·
函数ss5—socks—init—request O实现判断是否超时,并填充相关结构,根据所述结构为发送客户请求的客户选择相应的代理服务器,并设置各种处理句柄的功能后,调用函数 ss5_socks—handler O,函数ss5—socks—handler O实现完整读取客户请求头部信息的功能,然后调用函数 ss5_socks—parse—request_lineO,函数ss5—socks—parse—request—line O实现判断客户请求类型,设置句柄函数指针为相应的处理函数,并判断客户请求解析状态,如果是S0CKS4代理请求,则进入S0CKS4代理处理流程,调用函数ss5—socks4—handler O ;函数ss5—socks4—handler O 先调用函数 ss5—4—parse—request O 实现完整解析客户请求信息的功能,并根据解析的结果填充相关数据结构,再调用函数ss5—rule—check O实现判断IP地址或者域名是否在黑名单中,如果在,则关闭与发送客户请求的客户端的连接的功能;然后调用函数ss5—socks4—process—handler O ;函数ss5—socks4—process—handler O 实现调用函数 ss5—4—process—request ()处理客户请求,设置相应事件的处理函数的功能,函数ss5—4—process—request O实现处理客户请求,根据S0CKS4协议处理相应的请求,获取客户所请求网站的真实地址列表,当客户请求为CONNECT请求时,调用函数ss5—4—connect—serving O,当客户请求为 BIND 请求时,调用函数 ss5—4—bind—serving O ;函数ss5—4—connect—serving O实现根据S0CKS4协议,向远端真实服务器发送请求,建立代理系统和远端真实服务器的TCP连接,然后根据TCP连接的建立情况,向发送客户请求的客户返回响应报文,指明是否成功建立转发连接;如果CONNECT连接被拒绝,则代理平台向发送客户请求的客户端发送响应报文后会关闭连接的功能,然后调用函数ss5—4—nonblocking—connect—handler O ;函数ss5—4—bind—serving ()实现根据S0CKS4协议,处理S0CKS4命令为BIND的情况,建立bind套接字,填充相关数据结构,设置相关句柄指针,向发送客户请求的客户端发送第一次BIND响应报文的功能,然后调用函数ss5—4—nonblocking—connect—handler O ;
函数ss5—4—nonblocking—connect—handler O实现当本地代理平台无法提供代理服务时,调用函数 ss5—socks—upserving O,返回函数 ss5—4—nonblocking—connect—handler (),当本地代理平台或其他SOCKS代理平台能提供代理服务时,填充相关数据结构,设置相关句柄,设置无阻塞连接,向发送客户请求的客户端发送第一次响应报文的功能,然后调用函数 ss5—socks—prepare—connection O ;ss5—socks—upserving()实现向其他SOCKS代理平台转发客户请求的功能;ss5—socks—prepare—connection O实现填充相关数据结构,设置相关句柄的功能,然后调用函数 ss5—socks—prepare—data—queue O,函数ss5—socks—prepare—data—queue ()实现申请发送缓冲区和接收缓冲区,填充相关数据结构,设置相关句柄的功能,然后调用函数ss5—install—data—transfer—hanlders ();函数ss5—install—data—transfer—hanlders ()实现填充和读写相关的数据结构,设置相关句柄的功能,调用函数ss5—handle—read—event (),函数ss5—handle—read—event ()实现读取事件的功能。
具体实施方式
四:结合图3说明本实施方式,本实施方式是对具体实施方式
二所述的可控分布式代理平台的进一步限定,S0CKS5模块包括如下函数模块:ss5—socks—init—connection ()、ss5—socks—init—request ()、

ss5—socks—handler ()、ss5_socks—parse—request_line ()、ss5—socks5—handler ()、ss5—socks5—handler ()、ss5—rule—check ()、ss5—5—parse—request ()、ss5—socks5—process—handler ()、ss5—5—process—request ()、ss5—5—connect—serving ()、

ss5—5—bind—serving ()、ss5_5—nonblocking—connect—handler ()、 ss5—socks—upserving ()、ss5_socks_prepare_connection ()、ss5—socks—prepare—data—queue ()、ss5—install—data—transfer—hanlders ()、ss5_5_udp_associate_serving ()和 ss5—handle—read—event ();上述函数模块的调用流程包括如下:函数ss5—socks—init—connection (),实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks _init—request O,函数ss5—socks—init—request O实现判断是否超时,并填充相关结构,根据所述结构为发送客户请求的客户选择代理服务器,设置各种处理句柄的功能后,调用函数ss5—socks—handler (),函数ss5—socks—handler ()实现完整读取客户请求头部信息的功能,然后调用函数 ss5_socks—parse—request_lineO,函数ss5—socks—parse—request—line O实现判断请求类型,设置句柄函数指针为相应的处理函数,并判断请求解析状态,,若客户端请求为S0CKS5,则进入S0CKS5处理流程,调用函数 ss5—socks5—handler O ;函数ss5—socks5—handler O 先调用函数 ss5—5—parse—request ()实现完整解析客户请求信息的功能,并根据解析的结果填充相关数据结构,再调用函数ss5—rule—check O实现判断IP地址或者域名是否在黑名单中,如果在,则关闭与发送客户请求的客户端的连接功能,否则,调用函数ss5—socks5—process—handler O ;函数ss5—5—parse—request O实现解析客户请求的功能,函数ss5—socks5—process—handler O 实现调用函数 ss5—5—process—request O处理客户请求,设置相应事件的处理函数的功能,函数ss5—5—process—request O实现处理客户请求,根据S0CKS5协议处理相应的请求,获取客户所请求网站的真实地址列表,当客户的请求为CONNECT请求时,调用函数ss5—5—connect—serving(),当客户的请求为BIND请求时,调用函数ss5—5—bind—serving(),当客户的请求为 UDP ASS0CAITE 请求时,调用函数 ss5—5—udp—associate—serving O ;函数ss5—5—connect—serving ()实现根据S0CKS5协议,向远端真实服务器发送请求,建立代理系统和远端真实服务器的TCP连接,然后根据TCP连接的建立情况,向发送客户请求的客户返回响应报文, 指明是否成功建立转发连接;如果CONNECT连接被拒绝,则代理平台向发送客户请求的客户端发送响应报文后会关闭连接的功能,然后调用函数ss5—5—nonblocking—connect—handler O ;函数ss5—5—bind—serving ()实现根据S0CKS5协议,处理S0CKS5命令为BIND的情况,建立bind套接字,填充相关数据结构,设置相关句柄指针,向发送客户请求的客户端发送第一次BIND响应报文的功能,然后调用函数ss5—5—nonblocking—connect—handler O ;函数ss5—5—udp—associate—serving ()实现建立bind套接字,该套接字主要用于从发送客户请求的客户端接收UDP数据包,然后填充相关数据结构,设置相关句柄,向发送客户请求的客户端发送响应报文的功能,然后调用函数ss5—5—nonblocking—connect—handler O ;函数ss5—5—nonblocking—connect—handler ()实现当本地代理平台无法提供代理服务时,调用函数 ss5—socks—upserving O,返回函数 ss5—5—nonblocking—connect—handler (),当本地代理平台或其他SOCKS代理平台能提供代理服务时,填充相关数据结构,设置相关句柄,设置无阻塞连接,向发送客户请求的客户端发送第一次响应报文的功能,然后调用函数 ss5—socks—prepare—connection O ;ss5—socks—upserving()实现向其他SOCKS代理平台转发客户请求的功能;ss5—socks—prepare—connection O实现填充相关数据结构,设置相关句柄的功能,然后调用函数 ss5—socks—prepare—data—queue O,函数ss5—socks—prepare—data—queue o实现申请发送缓冲区和接收缓冲区,填充相关数据结构,设置相关句柄的功能,然后调用函数ss5—install—data—transfer—hanlders ();函数ss5—install—data—transfer—hanlders ()实现填充和读写相关的数据结构,设置相关句柄的功能,调用函数ss5—handle—read—event (),函数ss5—handle—read—event ()实现读取事件的功能。
具体实施方式
五:结合图4说明本实施方式,本实施方式是对具体实施方式
二所述的可控分布式代理平台的进一步限定,cluster模块包括如下函数模块:ss5_socks_init_connection O、ss5—socks—init—request ()、ss5—socks—handler ()、ss5_socks—parse—request_line ()、

ss5—socks—cluster—handler ()、ss5 socks cluster req process handler ()、ss5_socks_cluster—recv—handler ()、ss5_socks_cluster_signal—reload—wblist ()、ss5—cluster—process—init ()、ss5_cluster—nanager—process—handler ()、ss5_socks_cluster—notify—handler ()、ss5_socks_cluster_file—notify (rule_file)、ss5—socks—cluster—scatter—file ()、ss5—socks—cluster—create—thread ()、ss5—socks—cluster—scatter—thread ()和ss5—socks—cluster—send—file—data ();上述函数模块的调用流程包括如下:函数ss5—socks—init—connection O,实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks_init—request O,函数ss5—socks—init—request O实现判断是否超时,并填充相关结构,根据该结构为发送客户请求的客户选择代理服务器,设置各种处理句柄的功能后,调用函数ss5—socks—handler O,函数ss5—socks—handler O实现完整读取客户请求头部信息的功能,然后调用函数 ss5_socks—parse—request_lineO,函数ss5—socks—parse—request—line O实现判断出命令类型为CLUSTER时则进入集群处理模块的功能;然后调用函数ss5—socks—cluster—handler O ;函数ss5—socks—cluster—handler ()实现读取命令CLUSTER完整命令头部,解析命令,设置相关句柄的功能,所述命令CLUSTER由配置文件同步和黑白名单同步两部分构成;然后调用函数 ss5 socks cluster req process handler ();函数ss5—socks—cluster—req—process—handler()实现首先判断待同步文件的名称是否一致,然后在本地打开用于同步的临时文件,填充相关数据结构,设置句柄,向请求端发送响应报文的功能,所述待同步文件包括配置文件和黑白名单文件;然后调用函数ss5_socks_cluster—recv—handler ()。函数ss5—socks—cluster—recv—handler ()实现接收同步文件的数据,然后写入临时文件,重命名临时文件并关闭,最后关闭与发送客户请求的客户端连接的功能,当黑白名单文件发生变化时,调用函数 ss5—socks—cluster—signal—reload—wblist ();函数ss5—socks—cluster—signal—reload—wblist ()实现向各个进程发送信号,命令各个进程重新加载黑白名单的功能;所述同步文件的数据的获得方法为:函数ss5—cluster—process—cycle O实现初始化cluster模块的运行环境的功會泛;然后调用函数 ss5—cluster—manager—process—handler O ;函数ss5—cluster—manager—process—handler ()实现判断集群选项是否打开,当集群选项打开时调用函数ss5—socks—cluster—notify—handler (),设置超时时间然后调用函数 ss5_socks_cluster—notify—handler O ;函数ss5—socks—cluster—notify—handler O实现监测配置文件和黑白名单的MD5是否发生变化的功能,当配置文件或黑白名单文件发生变化时,调用函数ss5—socks—cluster_file—notify(rule_file);函数ss5—socks—cluster—file—notify (rule—file)实现判断文件发生变化的原因,当时所述原因为人为修改或者是程序追加时,填充和更新相关数据结构的功能;然后调用函数 ss5_socks_cluster_scatter_f ile O ;函数ss5—socks—cluster—scatter—file O实现打开相应文件,设置该文件内存映射,打开同步线程的功能;然 后调用函数ss5—socks—cluster—create—threadO ;函数ss5—socks—cluster—create—threadO 封装了 pthread—create ()函数,实现线程创建功能,然后在新创建的线程中调用函数ss5—socks—cluster—scatter—thread ();函数ss5—socks—cluster—scatter—threadO实现向其他服务器发送文件内容,关闭文件的内存映射的功能,然后调用函数ss5—socks—cluster—send—file—data O ;函数ss5—socks—cluster—send—file—data()封装了标准 send()函数,实现向其他代理服务器发送同步文件的数据的功能。
具体实施方式
六:结合图5说明本实施方式,本实施方式是对具体实施方式
二所述的可控分布式代理平台的进一步限定,upserving模块包括如下函数模块:ss5_socks—upserving—create_conf O、ss5_socks—upserving—init_conf ()、ss5—socks—upserving ()、ss5—upserving—create—method ()、ss5—upserving—create—request ()和 ss5—unix_send();上述函数模块的调用流程包括如下:函数ss5—socks—upserving—create—conf O实现打开缓冲区,填充相关数据结构的功能,然后调用函数 ss5—socks—upserving—init—conf O ;函数ss5—socks—upserving—init—conf ()实现设置用来转发的服务器列表的功能,然后调用函数 ss5—socks—upserving O ;函数ss5—socks—upserving O为upserving模块的主函数,实现完整的函数调用,完成 upserving 工作的功能,调用函数 ss5—upserving—create—method O ;函数ss5—upserving—create—method()实现申请缓冲区,填充相关数据结构,设置句柄的功能,然后调用函数ss5—upserving—create—request O ;函数ss5—upserving—create—request ()实现形成完整的S0CKS5命令请求,作为S0CKS5客户端向远端S0CKS5服务器转发请求。填充相关数据结构,设置句柄的功能,然后调用函数 ss5—unix—send O ;函数ss5—unix—send O实现向指定网络地址发送数据的功能。
具体实施方式
七:结合图6说明本实施方式,本实施方式是对具体实施方式
一所述的可控分布式代理平台的 进一步限定,监控模块包括如下函数模块:ss5_socks_init_connection ()、ss5—socks—init—request O、ss5—socks—handler ()、ss5_socks—parse—request_line ()、ss5—exhibit—handler ()、ss5_exhibit_response_to_client ()、ss5—exhibit—get—event ()、ss5—exhibit—event—add—busy—list ()、 ss5_socks_exhibit—notify—worker ()、ss5—exhibit—wakeup—worker—thread ()、ss5—exhibit—init—moduble ()、ss5—create—udp—socket ()、ss5_socks_exhibit_create_thread ()、ss5_exhibit—worker_thread—cycle ()、ss5_exhibit—nanager_thread—handler ()、ss5_exhibit—black—hit_log—status_serving ()、ss5_exhibit_cache_structure_status_serving ()、ss5_exhibit_proxy_serving_status_serving ()、 ss5_exhibit_cluster_internal_status_serving ()、ss5_exhibit_os_status_status_serving ()、ss5—exhibit—write—reply ()、ss5_exhibit—notify—write—response ()、ss5_exhibit_send_response_to_client ()和 ss5_cond—timedwait ();上述函数模块的调用流程包括如下:函数ss5—exhibit—init—moduble O实现初始化监控模块的功能,然后调用函数ss5_create_udp_socket ();函数ss5—create—udp—socket O实现创建UDP套接字的功能,然后调用函数函数ss5_socks_exhibit_create_threadO,函数ss5—socks—exhibit—create—threadO 封装了 pthread—create ()函数,实现线程创建功能,然后调用函数ss5—exhibit—worker—thread—cycle O ;
函数ss5—exhibit—worker—thread—cycle O实现设置相关信号集,调用处理句柄的功能,然后调用函数 ss5—exhibit—manager—thread—handler O ;函数ss5—exhibit—manager—thread—handler ()实现根据监控命令,调用相应的处理函数,向其他工作进程扩散监控命令的功能,当为ALL或BLACK—HIT—LOG命令时调用函数 ss5—exhibit—black—hit—log—status—serving O,当为 ALL 或 CACHE—STRUCTURE—STATUS命令时调用函数 ss5—exhibit—cache—structure—status—serving (),当为 ALL 或 PROXY—SERVING—STATUS 命令时调用函数 ss5—exhibit—proxy—serving—status—serving (),当为 ALL 或 CLUSTER—INTERNAL—STATUS 命令时调用函数 ss5—exhibit—cluster—internal—status—serving (),当为 ALL 或者 OS—STATUS 命令时调用函数 ss5—exhibit—os—status—status_serving ();函数ss5—exhibit—blacK—hit—log—status—serving ()实现将黑名单访问记录反馈给监控客户端的功能,然后调用函数ss5—exhibit—write—reply O ;函数ss5—exh·ibit—cache—structure—status—serving ()实现将缓存信息反馈给监控客户端的功能,然后调用函数ss5—exhibit—write—reply O ;函数ss5—exhibit—proxy—serving—status—servingO 实现将目前代理发送状态信息反馈给监控客户端的功能,然后调用函数ss5—exhibit—write—reply O ;函数ss5—exhibit—cluster—internal—status—servingO 实现将集群目前情况反馈给监控客户端的功能,然后调用函数ss5—exhibit—write—reply O ;。函数ss5—exhibit—os—status—status—servingO实现将服务器运行状态反馈给监控客户端的功能,然后调用函数ss5—exhibit—write—reply O ;函数ss5—exhibit—write—reply ()实现向监控客户端发送回馈报文的功能,当前进程不是接收到监测命令的进程时,调用函数ss5—exhibit—notify—write—response O,向接收到监测命令的进程发送已完成监测任务的回馈;当接收到监测命令的进程收到所有其他工作进程的任务完成回馈时,调用函数ss5—exhibit—send—response—to—client O ;一个代理平台可能同时有N个工作进程,监控客户端的监控命令请求只能被一个工作进程所接收,接收命令的进程负责把命令向其他工作进程扩散。其他进程完成工作后通过ss5—exhibit—notify—write—response O向接收进程发送完成任务的回馈。接收进程收到其他进程的全部回馈后调用ss5—exhibit—send—response—to—client ()向客户端发送任务完成回馈。函数ss5—exhibit—notify—write—response O实现向接收到监控客户端监测命令的进程发送已完成监测任务的回馈的功能,然后调用函数ss5—cond—timedwait O,函数ss5—exhibit—send—response—to—client O实现接收到监测命令的进程向监控客户端发送数据传输完毕的回馈的功能,然后调用函数ss5—cond—timedwait O,函数ss5—cond—timedwait O 封装了 pthread—cond—timedwait O 函数,实现发送完成后工作线程进入睡眠状态,当接收到唤醒信号wake up时,调用函数ss5—exhibit—worker_thread—cycle O ;所述唤醒信号wake up的获取方法为:函数ss5—socks—init—connection (),实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks_init—request O,
函数ss5_socks_init_request O实现判断是否超时,并填充相关结构,为客户选择代理服务器,设置各种处理句柄的功能后,调用函数ss5_socks_handler O ,函数SS5_S0CkS_handler()实现完整读取客户请求头部信息的功能,然后调用函数 ss5_socks_parse_request_line(),函数ss5_socks_parse_request_line ()实现判断出命令类型为EXHIBIT时则进入监控模块的功能;然后调用函数ss5_exhibit_handler O ;函数ss5_exhibit_handler O实现读取EXHIBIT完整命令头部,解析命令,设置相关句柄的功能,然后调用函数ss5_exhibit_response_to_client O ;函数ss5_exhibit_send_response_to_client O,实现向监控客户端发送对命令的解析结果功能,然后调用函数ss5_exhibit_get_event(),函数ss5_exhibit_get_event O实现删除挂起的事件的功能,然后调用函数ss5_exhibit_event_add_busy_listO ;函数ss5_exhibit_event_add_busy_list O实现添加事件的功能,然后调用函数ss5_socks_exhibit_notify_workerO ;函数ss5_socks_exhibit_notify_worker O 实现通知各个工作进程有 EXHIBIT 命令到达的功能,然后调用函数ss5_exhibit_wakeup_worker_thread();函数ss5_exhibit_wakeup_worker_threadO实现接待进程唤起自己的工作线程,对监控命令予以处理的功能,并向函数ss5_cond_timedwait()发送唤醒信号wake up。具体实施方 式八:结合图7说明本实施方式,本实施方式是对具体实施方式
一所述的可控分布式代理平台的进一步限定,进程管理模块包括如下函数模块:ss5_master_process_cycle ()、ss5_spawn_processO、ss5_reap_children () >fork ()和 ss5_woker_process_cycle ();上述函数模块的调用流程包括如下:函数ss5_master_process_cycle O实现初始化信号集,启动各种类型的工作进程,监听各种信号,进行相应的处理的功能,当需要建立新的进程时,调用函数SS5_Spawn_process (),当有子进程退出时,调用函数ss5_reap_children O ;函数ss5_spawn_process O实现创建新的进程,完成进程相关信息的初始化的功能,然后调用函数fork O ; 函数fork O实现创建子进程的功能,然后调用函数ss5_woker_process_cycle O ;函数ss5_woker_process_cycle O负责各种信号的监听和处理,负责事件注册与处理,向函数ss5_master_process_cycle O发送重新执行信号respwn ;函数ss5_reap_children()实现重启相应的子进程的功能。该模块主要负责系统中进程以及线程的创建、运行、维护与销毁工作。系统启动时,在main O函数中通过调用ss5_master_process_cycle O将控制转移到主进程master_process中。而后通过调用ss5_spawn_process ()函数将fork出工作进程ss5_worker_process_cycle O。线程的创建过程在ss5_worK_process_cycle O函数中完成。系统运行时若有某些子进程异常退出,则master_process将会接收到SIGCHLD信号,而后通过ss5_reap_children()函数重新启动异常退出的子进程,这时该子进程中的线程也将被重新一一启动。进程管理模块和事件管理模块一起构成了代理平台处理高并发请求的基础。
具体实施方式
九:结合图8说明本实施方式,本实施方式是对具体实施方式
一所述的可控分布式代理平台的进一步限定,事件管理模块包括如下函数模块:ss5_process_event_and_timers()、ss5_process_event ()、ss5_select_process_events()、ss5_epoll_process_events()、ss5_poll_process_events()、select ()、epoll_wait()、poll ()和 event- > hanlder ();事件管理模块包括三种事件模型 ,所述三种事件模型为select模型、poll模型和epoll模型;上述函数模块的调用流程包括如下:函数ss5_process_event_and_timers O实现处理事件的功能,若有信号和进程间信号的事件,然后再处理接受事件队列和其他事件队列中的事件,然后调用函数ss5_process_eventO ;函数指针ss5_process_event (),若待处理的事件模型为select模型,则调用函数ss5_select_process_events O ,若待处理的事件模型为epoll模型,则调用函数ss5_epoll_process_events O ,若待处理的事件模型为poll模型,则调用函数ss5_poll_process_events O ;函数ss5_select_process_events O实现以select模式提交和处理事件的功能;然后调用函数select O ;函数ss5_epoll_process_events O实现以epoll模式提交和处理事件的功能,然后调用函数epoll_wait();函数ss5_poll_process_events O实现以poll模式提交和处理事件的功能,然后调用函数poll O ;函数select O为实现允许进程等待和内核等待多个事件中的任何一个发生,并且只在一个或多个事件发生或经历一段指定的时间后才唤醒它,唤醒之后需要轮询各个事件以确保是否发生的功能,然后调用函数event- > hanlder O ;函数epoll_wait O实现允许进程等待内核多个事件中的任何一个发生,事件发生后内核返回发生事件的详细信息,不需要轮询确认发生事件的功能,然后调用函数event- > hanlder ();函数poll O:为实现允许进程等待和内核等待多个事件中的任何一个发生,并且只在一个或多个事件发生或经历一段指定的之间后才唤醒它,唤醒之后需要轮询各个事件以确保是否发生,处理流设备时能提供额外信息的功能,然后调用函数event->hanlder ();函数指针event- > handler O,实现根据事件模型的不同,调用相应的句柄处理函数的功能。该模块主要负责处理来自外界的连接请求和来自I/O管理模块的I/O事件请求等。工作时,依据所在的操作系统平台自行决定事件处理模型,目前该代理系统已支持如下几种事件处理模型:epoll, poll和select。epoll, poll和select是Iinux下三种主要的IO复用方式。select对应于内核中的sys_select调用,如果有事件发生,select会将临时结果写到用户空间并返回;当轮询一遍后没有任何事件发生时,如果指定了超时时间,则select会睡眠到超时,睡眠结束后再进行一次轮询,并将结果写到用户空间,然后返回。select返回后,需要逐一检查关注的描述符是否被SET (事件是否发生)。与select相比,poll没有描述符个数限制。epoll与select、poll不同,首先,其不用每次调用都向内核拷贝事件描述信息,在第一次调用后,事件信息就会与对应的epoll描述符关联起来。另外epoll不是通过轮询,而是通过在等待的描述符上注册回调函数,当事件发生时,回调函数负责把发生的事件存储在就绪事件链表中,最后写到用户空间。它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。可控分布式代理平台在默认状态下采用epoll的事件模型。事件管理模块和进程管理模块是代理平台能够高效处理高并发请求的基础。
具体实施方式
十:结合图9说明本实施方式,本实施方式是对具体实施方式
一所述的可控分布式代理平台的进一步限定,1/0管理模块包括如下函数模块:`
ss5_event_accept O、Is- > connection_handler ()、ss5_unix_recv O、recv () >ss5_unix_send ()和 send();上述函数模块的调用流程包括如下:函数ss5_event_accept()实现检测是否有连接事件发生,当有读事件readevent发生时,调用函数ss5_unix_recv();当有新事件new event发生时,调用函数ss5_event_accept ();当有写事件 wirte event 发生时,调用函数 ss5_unix_send O ;函数ss5_unix_recv()封装了标准recv O函数,实现从网络中读取数据的功能,然后调用函数recv O ;函数ss5_event_accept O实现接收TCP连接请求的功能,然后调用函数Is->connection_handlerO ;函数ss5_unix_send()封装了标准send()函数,实现向网络中发送数据的功能,然后调用函数send O ;函数Is-> connection_handler O实现处理客户请求,建立代理平台与客户之间的TCP连接的功能;函数recv O ,实现从指定的网络套接字接收数据功能;函数sendO实现用于从给定的套接字发送数据功能。
函数recv()和函数send()为标准库函数,由国际标准所规定。利用单台服务器并发测试结果:在该测试项目中,客户端尽最大努力向代理服务器不间断发送请求,运行两到三分钟之后停止发送数据。服务器IP为192.168.110.63.结果如图10所示。图10中,随着客户端的运行代理服务器的并发连接数慢慢增加,最大连接数将近五千,达到峰值后出现波动,关闭测试客户端后服务器连接数快速下降。由于测试服务器选用了曙光高性能服务器,服务器硬件性能卓越,代理平台的出口带宽成为系统主要瓶颈。如果能保证代理平台与外网有极高的联通速度,则理论上讲单台代理服务器的并发连接数可以达到同一时刻上万连接。本发明的分布式代理平台并发测试结果:在该测试项目中,代理平台由三台服务器构成,平台入口是一台负责负载均衡的LVS服务器,负责流量分发;代理工作由两台代理服务器完成,IP地址分别是192.168.110.62和192.168.110.63.并发测试结果如图11所示。曲线2表示IP地址为192.168.110.62测试的结果,曲线3表示IP地址为192.168.110.63测试的结果.
在该测试项目中,客户端尽最大努力不间断向代理平台发送连接请求,运行两到三分钟之后关闭客户端。代理服务器的并发连接数出现了先高后低的情况。由于采用了两台服务器,因此代理平台的处理速度大幅提升,使得没有出现太多的连接积压,代理平台并发连接数较单机版的也出现了显著下降。两台服务器连接数的差异是由LVS的流量分发策略和客户端IP所决定,因此出现了较大差异。通过对本发明所述的代理平台并发连接数的测试,可见该代理平台能够较好的支持高并发连接,并且具有出色的服务性能, 符合发明的目的与要求。
权利要求
1.可控分布式代理平台,其特征在于,它包括进程管理模块、配置文件管理模块、日志输出模块、事件管理模块、内存管理模块、I/o管理模块、代理模块和监控模块; 进程管理模块,用于创建、运行、维护和销毁配置文件管理模块、日志输出模块、事件管理模块、内存管理模块的进程以及线程; 配置文件管理模块,用于为所述代理平台的其他各模块提供配置文件的解析与加载; 日志输出模块,用于为所述代理平台的其他各个模块提供日志输出功能; 事件管理模块,用于处理来自外界的连接请求、来自I/o管理模块的I/O事件请求、代理模块的S0CKS4或S0CKS5代理请求和监控模块的监测请求; 内存管理模块,用于为进程管理模块、事件处理模块和I/O管理模块进行内存管理; I/o管理模块,用于接收和发送网络数据; 代理模块,用于 提供代理服务和提供分布式代理机群间协作功能,支持S0CKS4版本和S0CKS5版本的SOCKS协议; 监控模块,用于接收控制中心发送的命令,并根据所述命令执行相应的操作。
2.根据权利要求1所述的可控分布式代理平台,其特征在于,所述代理模块包括S0CKS4 模块、S0CKS5 模块、cluster 模块和 upserving 模块; S0CKS4模块,用于提供SOCKS代理服务; S0CKS5模块,用于提供SOCKS代理服务; cluster模块,用于处理集群之间配置信息同步,协调不同代理服务器之间的运行状态; upserving模块,用于完成集群内部连接服务请求转移的功能。
3.根据权利要求2所述的可控分布式代理平台,其特征在于,S0CKS4模块包括如下函数模块:ss5_socks_init_connectionO、ss5_socks_init—request O、ss5_socks—handler ()、ss5_socks—parse—request_line ()、ss5_socks5—handler ()、ss5_socks4—handler ()、ss5_rule_check ()、ss5_4—parse—request ()、ss5_socks4—process—handler ()、ss5_4—process—request ()、ss5_4_connect_serving()、ss5_4—bind—serving ()、ss5_4—nonblocking—connect—handler ()、ss5_socks—upserving()、ss5_socks_prepare_connection()、ss5_socks—prepare_data—queue ()、ss5_install_data—transfer—hanlders()和 ss5—handle—read—event ();上述函数模块的调用流程如下: 函数ss5_socks_init_connection()实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks_init_request O, 函数ss5_socks_init_request()实现判断是否超时,并填充相关结构,根据所述结构为发送客户请求的客户选择相应的代理服务器,并设置各种处理句柄的功能后,调用函数ss5_socks_handlerO, 函数SS5_SOckS_handler()实现完整读取客户请求头部信息的功能,然后调用函数ss5_socks_parse_request_lineO, 函数ss5_socks_parse_request_line O实现判断客户请求类型,设置句柄函数指针为相应的处理函数,并判断客户请求解析状态,如果是S0CKS4代理请求,则进入S0CKS4代理处理流程,调用函数ss5_socks4_handler O ;函数ss5_socks4_handler O先调用函数ss5_4_parse_request O实现完整解析客户请求信息的功能,并根据解析的结果填充相关数据结构,再调用函数SS5_rule_check()实现判断IP地址或者域名是否在黑名单中,如果在,则关闭与发送客户请求的客户端的连接的功能;然后调用函数 ss5_socks4_process_handler O ; 函数 ss5_socks4_process_handler O 实现调用函数 ss5_4_process_request O 处理客户请求,设置相应事件的处理函数的功能, 函数ss5_4_process_request O实现处理客户请求,根据S0CKS4协议处理相应的请求,获取客户所请求网站的真实地址列表,当客户请求为CONNECT请求时,调用函数ss5_4_connect_serving O ,当客户请求为 BIND 请求时,调用函数 ss5_4_bind_serving O ; 函数ss5_4_connect_serving()实现根据S0CKS4协议,向远端真实服务器发送请求,建立代理系统和远端真实服务器的TCP连接,然后根据TCP连接的建立情况,向发送客户请求的客户返回响应报文,指明是否成功建立转发连接;如果CONNECT连接被拒绝,则代理平台向发送客户请求的客户端发送响应报文后会关闭连接的功能,然后调用函数ss5_4_nonblocking_connect_handlerO ; 函数ss5_4_bind_serving()实现根据S0CKS4协议,处理S0CKS4命令为BIND的情况,建立bind套接字,填充相关数据结构,设置相关句柄指针,向发送客户请求的客户端发送第一次BIND响应报文的功能,然后调用函数ss5_4_nonblocking_connect_handler O ; 函数ss5_4_nonblocking_connect_handler O实现当本地代理平台无法提供代理服务时,调用函数 ss5_socks_upservingO ,返回函数 ss5_4_nonblocking_connect_handler O,当本地代理平台或其他SOCKS代理平台能提供代理服务时,填充相关数据结构,设置相关句柄,设置无阻塞连接,向发送客户请求的客户端发送第一次响应报文的功能,然后调用函数 ss5_socks_prepare_connection O ; 函数ss5_socks_upserving()实现向其他SOCKS代理平台转发客户请求的功能; 函数ss5_socks_prepare_connection()实现填充相关数据结构,设置相关句柄的功能,然后调用函数 ss5_socks_prepare_data_queue O , 函数ss5_socks_prepare_data_queue O实现申请发送缓冲区和接收缓冲区,填充相关数据结构,设置相关句柄的功能,然后调用函数ss5_install_data_transfer_hanlders ();函数ss5—install—data—transfer—hanlders O实现填充和读写相关的数据结构,设置相关句柄的功能,调用函数ss5—handle—read—event O, 函数ss5—handle—read—event ()实现读取事件的功能。
4.根据权利要求2所述的可控分布式代理平台,其特征在于,SOCKS5模块包括如下函数模块:ss5_socks_init_connectionO、ss5_socks_init—request O、ss5_socks—handler ()、ss5_socks—parse—request_line ()、ss5_socks5—handler ()、ss5_socks5—handler ()、ss5_rule_check ()、ss5_5—parse—request ()、ss5_socks5—process—handler ()、ss5_5—process—request ()、ss5_5_connect_serving()、ss5_5—bind—servin g ()、ss5_5—nonblocking—connect—handler ()、ss5_socks—upserving()、ss5_socks_prepare_connection()、ss5_socks—prepare_data—queue ()、ss5_install_data—transfer—hanlders()、ss5_5_udp_associate_serving ()和 ss5—handle—read—event (); 上述函数模块的调用流程包括如下: 函数ss5—socks—init—connection (),实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks_init—request O, 函数ss5—socks—init—request O实现判断是否超时,并填充相关结构,根据所述结构为发送客户请求的客户选择代理服务器,设置各种处理句柄的功能后,调用函数ss5—socks—handler O, 函数ss5—socks—handler O实现完整读取客户请求头部信息的功能,然后调用函数ss5_socks—parse—request_line O, 函数ss5—socks—parse—request—line O实现判断请求类型,设置句柄函数指针为相应的处理函数,并判断请求解析状态,,若客户端请求为S0CKS5,则进入S0CKS5处理流程,调用函数 ss5—socks5 —handler O ; 函数ss5—socks5—handler O先调用函数ss5—5—parse—request ()实现完整解析客户请求信息的功能,并根据解析的结果填充相关数据结构,再调用函数ss5—rule—checkO实现判断IP地址或者域名是否在黑名单中,如果在,则关闭与发送客户请求的客户端的连接功能,否则,调用函数 ss5—socks5—process—handler O ; 函数ss5—5—parse—request O实现解析客户请求的功能,函数 ss5—socks5—process—handler O 实现调用函数 ss5—5—process—request ()处理客户请求,设置相应事件的处理函数的功能, 函数ss5—5—process—request O实现处理客户请求,根据S0CKS5协议处理相应的请求,获取客户所请求网站的真实地址列表,当客户的请求为CONNECT请求时,调用函数ss5—5—connect—serving(),当客户的请求为BIND请求时,调用函数ss5—5—bind—serving(),当客户的请求为 UDP ASSOCAITE 请求时,调用函数 ss5—5—udp—associate—serving O ; 函数ss5—5—connect—serving ()实现根据S0CKS5协议,向远端真实服务器发送请求,建立代理系统和远端真实服务器的TCP连接,然后根据TCP连接的建立情况,向发送客户请求的客户返回响应报文,指明是否成功建立转发连接;如果CONNECT连接被拒绝,则代理平台向发送客户请求的客户端发送响应报文后会关闭连接的功能,然后调用函数ss5—5—nonblocking—connect—handler O ; 函数ss5—5—bind—serving O实现根据S0CKS5协议,处理S0CKS5命令为BIND的情况,建立bind套接字,填充相关数据结构,设置相关句柄指针,向发送客户请求的客户端发送第一次BIND响应报文的功能,然后调用函数ss5—5—nonblocking—connect—handler ();函数ss5—5—udp—associate—serving()实现建立bind套接字,该套接字主要用于从发送客户请求的客户端接收UDP数据包,然后填充相关数据结构,设置相关句柄,向发送客户请求的客户端发送响应报文的功能,然后调用函数ss5—5—nonblocking—connect—handler O ; 函数ss5—5—nonblocking—connect—handler ()实现当本地代理平台无法提供代理服务时,调用函数 ss5—socks—upservingO,返回函数 ss5—5—nonblocking—connect—handler (),当本地代理平台或其他SOCKS代理平台能提供代理服务时,填充相关数据结构,设置相关句柄,设置无阻塞连接,向发送客户请求的客户端发送第一次响应报文的功能,然后调用函数 ss5—socks—prepare—connection O ; 函数ss5—socks—upserving()实现向其他SOCKS代理平台转发客户请求的功能; 函数ss5—socks—prepare—connection O实现填充相关数据结构,设置相关句柄的功能,然后调用函数 ss5—socks—prepare—data—queue (), 函数ss5—socks—prepare—data—queue ()实现申请发送缓冲区和接收缓冲区,填充相关数据结构,设置相关句柄的功能,然后调用函数ss5—install—data—transfer—hanlders (); 函数ss5—install—data—transfer—hanlders ()实现填充和读写相关的数据结构,设置相关句柄的功能,调用函数ss5—handle—read—event O, 函数ss5—handle—read—event ()实现读取事件的功能。
5.根据权利要求2所述的可控分布式代理平台,其特征在于,cluster模块包括如下函数模块:ss5_socks_init_connectionO、ss5_socks_ init—request O、ss5_socks—handler ()、ss5_socks—parse—request_l ine ()、ss5_socks_cluster—handler ()、ss5 socks cluster req process handler ()、ss5_socks_cluster—recv—handler ()、ss5_socks_cluster_signal—reload—wblist()、ss5_cluster_process_init()、ss5_cluster—nanager—process—handler ()、ss5_socks_cluster—notify—handler ()、ss5_socks_cluster_file—notify(rule_file)、ss5_socks_cluster_scatter_file()、ss5_socks_cluster_create_thread()、ss5_socks_cluster_scatter_thread()和ss5—socks—cluster—send—file—data(); 上述函数模块的调用流程包括如下: 函数ss5—socks—init—connection (),实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks_init—request O, 函数ss5—socks—init—request O实现判断是否超时,并填充相关结构,根据该结构为发送客户请求的客户选择代理服务器,设置各种处理句柄的功能后,调用函数ss5—socks—handler O, 函数ss5—socks—handler O实现完整读取客户请求头部信息的功能,然后调用函数ss5_socks—parse—request_line O, 函数ss5—socks—parse—request—line O实现判断出命令类型为CLUSTER时则进入集群处理模块的功能;然后调用函数ss5—socks—cluster—handler O ; 函数ss5—socks—cluster—han`dler ()实现读取命令CLUSTER完整命令头部,解析命令,设置相关句柄的功能,所述命令CLUSTER由配置文件同步和黑白名单同步两部分构成;然后调用函数 ss5 socks cluster req process handler (); 函数ss5—socks—cluster—req—process—handler()实现首先判断待同步文件的名称是否一致,然后在本地打开用于同步的临时文件,填充相关数据结构,设置句柄,向请求端发送响应报文的功能,所述待同步文件包括配置文件和黑白名单文件;然后调用函数ss5—socks_cluster—recv—handler O。
函数ss5—socks—cluster—recv—handler O实现接收同步文件的数据,然后写入临时文件,重命名临时文件并关闭,最后关闭与发送客户请求的客户端连接的功能,当黑白名单文件发生变化时,调用函数 ss5—socks—cluster—signal—reload—wblist O ; 函数ss5—socks—cluster—signal—reload—wblist ()实现向各个进程发送信号,命令各个进程重新加载黑白名单的功能; 所述同步文件的数据的获得方法为: 函数ss5—cluster—process—cycle O实现初始化cluster模块的运行环境的功能;然后调用函数 ss5_cluster—nanager—process—handler O ; 函数ss5—cluster—manager—process—handler O实现判断集群选项是否打开,当集群选项打开时调用函数ss5—socks—cluster—notify—handler (),设置超时时间然后调用函数ss5_socks_cluster—notify—handler (); 函数ss5—socks—cluster—notify—handler ()实现监测配置文件和黑白名单的MD5是否发生变化的功能,当配置文件或黑白名单文件发生变化时,调用函数ss5—socks—cluster_file—notify(rule_file); 函数ss5—socks—cluster—file—notify (rule—file)实现判断文件发生变化的原因,当时所述原因为人为修改或者是程序追加时,填充和更新相关数据结构的功能;然后调用函数 ss5_socks_cluster_scatter_f ile O ; 函数ss5—socks—cluster—scatter—file O实现打开相应文件,设置该文件内存映射,打开同步线程的功能;然后调用函数ss5—socks—cluster—create—thread O ; 函数 ss5—socks—cluster—create—thread ()封装了 pthread—create ()函数,实现线程创建功能,然后在新创建的线程中调用函数ss5—socks—cluster—scatter—thread O ; 函数ss5—socks—cluster—scatter—thread()实现向其他服务器发送文件内容,关闭文件的内存映射的功能,然后调用函数ss5—socks—cluster—send—file—data O ; 函数ss5—socks—cluster—send—file—data()封装了标准send()函数,实现向其他代理服务器发送同步文件的数据的功能。
6.根据权利要求2所述的可控分布式代理平台,其特征在于,upserving模块包括如下函数模块:ss5_socks—upserving—create_conf O、ss5_socks—upserving—init_conf()、ss5_socks—upservi ng()、ss5—upserving—create—method ()、ss5—upserving—create—request ()和 ss5—unix_send(); 上述函数模块的调用流程包括如下: 函数ss5—socks—upserving—create—conf O实现打开缓冲区,填充相关数据结构的功能,然后调用函数 ss5—socks—upserving—init—conf O ; 函数ss5—socks—upserving—init—conf ()实现设置用来转发的服务器列表的功能,然后调用函数 ss5—socks—upserving O ; 函数ss5—socks—upserving O为upserving模块的主函数,实现完整的函数调用,完成upserving 工作的功能,调用函数 ss5—upserving—create—method O ; 函数ss5—upserving—create—method()实现申请缓冲区,填充相关数据结构,设置句柄的功能,然后调用函数 ss5—upserving—create—request O ; 函数ss5—upserving—create—request ()实现形成完整的S0CKS5命令请求,作为S0CKS5客户端向远端S0CKS5服务器转发请求。填充相关数据结构,设置句柄的功能,然后调用函数 ss5—unix—send O ; 函数ss5—unix—send O实现向指定网络地址发送数据的功能。
7.根据权利要求1所述的可控分布式代理平台,其特征在于,通过调用下述函数实现监控模块的功能: 监控模块包括如下函数模块: ss5_socks_init_connectionO、ss5_socks_init—request ()、ss5_socks—handler ()、ss5_socks—parse—request_line ()、ss5_exhibit—handler ()、ss5_exhibit_response_to_client ()、ss5_exhibit_get_event()、ss5_exhibit_event_add—busy_list()、ss5_socks_exhibit—notify—worker ()、ss5—exhibit—wakeup—worker—thread ()、ss5_exhibit_init—moduble()、ss5_create_udp_socket()、ss5_socks_exhibit_create_thread()、ss5_exhibit—worker_thread—cycle ()、ss5_exhibit—nanager_thread—handler ()、ss5_exhibit—black—hit_log—status_serving()、ss5_exhibit_cache_structure_status_serving()、ss5_exhibit_proxy_serving_status_serving()、ss5_exhibit_cluster_internal_status_serving ()、ss5—exhibit—os—status—status—serving ()、ss5_exhibit—write—reply ()、ss5_exhibit—notify—write—response ()、ss5_exhibit_send_response_to_client()和 ss5_cond—timedwait(); 上述函数模块的调用流程包括如下: 函数ss5—exhibit—init—moduble O实现初始化监控模块的功能,然后调用函数ss5—create—udp_socket O ; 函数ss5—create—udp—socket O实现创建UDP套接字的功能,然后调用函数函数ss5—socks_exhibit_create_threadO, 函数 ss5—socks—exhibit—create—thread O 封装了 pthread—create ()函数,实现线程创建功能,然后调用函数 ss5—exhibit—worker—thread—cycle O ; 函数ss5—exhibit—worker—thread—cycle ()实现设置相关信号集,调用处理句柄的功能,然后调用函数 ss5—exhibit—manager—thread—handler O ; 函数ss5—exhibit—manager—thread—handler ()实现根据监控命令,调用相应的处理函数,向其他工作进程扩散监控命令的功能,当为ALL或BLACK—HIT—LOG命令时调用函数ss5—exhibit—black—hit—log—status—serving O,当为 ALL 或 CACHE—STRUCTURE—STATUS命令时调用函数 ss5—exhibit—cache—structure—status—serving(),当为 ALL 或 PROXY—SERVING—STATUS 命令时调用函数 ss5—exhibit—proxy—serving—status—serving (),当为 ALL 或 CLUSTER—INTERNAL—STATUS 命令时调用函数 ss5— exhibit—cluster—internal—status—serving(),当为 ALL 或者 OS—STATUS 命令时调用函数 ss5—exhibit—os—status—status_serving ();函数ss5_exhibit_black_hit_log_status_serving()实现将黑名单访问记录反馈给监控客户端的功能,然后调用函数ss5_exhibit_write_reply O ; 函数 ss5_exhibit_cache_structure_status_serving O 实现将缓存信息反馈给监控客户端的功能,然后调用函数ss5_exhibit_write_reply O ; 函数ss5_exhibit_proxy_serving_status_serving()实现将目前代理发送状态信息反馈给监控客户端的功能,然后调用函数ss5_exhibit_write_reply O ; 函数 ss5_exhibit_cluster_internal_status_servingO 实现将集群目前情况反馈给监控客户端的功能,然后调用函数ss5_exhibit_write_reply O ;。
函数ss5_exhibit_os_status_status_serving()实现将服务器运行状态反馈给监控客户端的功能,然后调用函数ss5_exhibit_write_reply O ; 函数ss5_exhibit_write_reply O实现向监控客户端发送回馈报文的功能,当前进程不是接收到监测命令的进程时,调用函数ss5_exhibit_notify_write_response O ,向接收至IJ监测命令的进程发送已完成监测任务的回馈;当接收到监测命令的进程收到所有其他工作进程的任务完成回馈时,调用函数ss5_exhibit_send_response_to_client O ; 函数ss5_exhibit_notify_write_response O实现向接收到监控客户端监测命令的进程发送已完成监测任务的回馈的功能,然后调用函数ss5_cond_timedwait O , 函数ss5_exhibit_send_response_td_client O实现接收到监测命令的进程向监控客户端发送数据传输完毕的回馈的功能,然后调用函数ss5_cond_timedwait(), 函数 ss5_cond_timedwait O 封装了 pthread_cond_timedwait O 函数,实现发送完成后工作线程进入睡眠状态,当接收到唤醒信号wake up时,调用函数ss5_exhibit_worker_thread_cycle(); 所述唤醒信号wake up的获取方法为: 函数ss5_socks_init_connection O ,实现初始化连接信息的功能,并在初始化之后调用函数 ss5_socks_init_request O, 函数ss5_socks_init_request()实现判断是否超时,并填充相关结构,为客户选择代理服务器,设置各种处理句柄的功能后,调用函数ss5_socks_handler O , 函数SS5_SOckS_handler()实现完整读取客户请求头部信息的功能,然后调用函数ss5_socks_parse_request_lineO, 函数ss5_socks_parse_request_line O实现判断出命令类型为EXHIBIT时则进入监控模块的功能;然后调用函数ss5_exhibit_handler O ; 函数SS5_exhibit_handler O实现读取EXHIBIT完整命令头部,解析命令,设置相关句柄的功能,然后调用函数 ss5_exhibit_response_to_client O ; 函数ss5_exhibit_send_response_to_client O ,实现向监控客户端发送对命令的解析结果功能,然后调用函数ss5_exhibit_get_event O , 函数ss5_exhibit_get_event O实现删除挂起的事件的功能,然后调用函数ss5_exhibit_event_add_busy_listO ; 函数ss5_exhibit_event_add_busy_list O实现添加事件的功能,然后调用函数ss5_socks_exhibit_notify_worker(); 函数ss5_ socks_exhibit_notify_worker O实现通知各个工作进程有EXHIBIT命令到达的功能,然后调用函数 ss5—exhibit—wakeup—worker—thread O ; 函数ss5—exhibit—wakeup—worker—threadO实现接待进程唤起自己的工作线程,对监控命令予以处理的功能,并向函数ss5—cond—timedwait O发送唤醒信号wake up。
8.根据权利要求1所述的可控分布式代理平台,其特征在于,进程管理模块包括如下函数模块:ss5—master—process_cycle O、ss5_spawn—process ()、ss5—reap—children()、fork ()和 woker—process_cycle (); 上述函数模块的调用流程包括如下: 函数ss5—master—process—cycle O实现初始化信号集,启动各种类型的工作进程,监听各种信号,进行相应的处理的功能,当需要建立新的进程时,调用函数ss5—spawn—process (),当有子进程退出时,调用函数ss5—reap—children O ; 函数ss5—spawn—process O实 现创建新的进程,完成进程相关信息的初始化的功能,然后调用函数fork O ; 函数fork O实现创建子进程的功能,然后调用函数ss5—woker—process—cycle O ;函数ss5—woker—process—cycle ()负责各种信号的监听和处理,负责事件注册与处理,向函数ss5—master—process—cycle O发送重新执行信号respwn ; 函数ss5—reap—chiIdrenO实现重启相应的子进程的功能。
9.根据权利要求1所述的可控分布式代理平台,其特征在于,事件管理模块包括如下函数模块:ss5—process_event_and—timers O、ss5_process_eventO、ss5_select_process_events()、ss5_epoll_process_events()、ss5—poll—process_events()、select ()、epoll—wait ()、poll ()和 event- > hanlder (); 事件管理模块包括三种事件模型,所述三种事件模型为select模型、poll模型和epoll模型; 上述函数模块的调用流程包括如下: 函数ss5—process—event—and—timers O实现处理事件的功能,若有信号和进程间信号的事件,然后再处理接受事件队列和其他事件队列中的事件,然后调用函数ss5—process_event (); 函数指针 ss5_process_event O, 若待处理的事件模型为select模型,则调用函数ss5—select—process—events O, 若待处理的事件模型为epoll模型,则调用函数ss5—epoll—process—events O, 若待处理的事件模型为poll模型,则调用函数ss5—poll—process—events O ;函数ss5_select_process_events O实现以select模式提交和处理事件的功能;然后调用函数select O ; 函数ss5_epoll_process_events O实现以epoll模式提交和处理事件的功能,然后调用函数 epoll_wait O ; 函数ss5_poll_process_events O实现以poll模式提交和处理事件的功能,然后调用函数poll O ; 函数selectO为实现允许进程等待和内核等待多个事件中的任何一个发生,并且只在一个或多个事件发生或经历一段指定的时间后才唤醒它,唤醒之后需要轮询各个事件以确保是否发生的功能,然后调用函数event- > hanlder O ; 函数印oll_wait()实现允许进程等待内核多个事件中的任何一个发生,事件发生后内核返回发生事件的详细信息,然后调用函数event- > hanlder O ; 函数poll O:为实现允许进程等待和内核等待多个事件中的任何一个发生,并且只在一个或多个事件发生或经历一段指定的之间后才唤醒它,唤醒之后需要轮询各个事件以确保是否发生,处理流设备时能提供额外信息的功能,然后调用函数event- > hanlder O ; 函数指针event- > handler O,实现根据事件模型的不同,调用相应的句柄处理函数的功能。
10.根据权利要求1所述的可控分布式代理平台,其特征在于,I/O管理模块包括如下函数模块:ss5_event_acceptO、Is- > connection_handlerO、ss5_unix_recvO、recv ()、ss5_unix_send ()和 send(); 上述函数模块的调用流程包括如下: 函数ss5_event_accept O实现检测是否有连接事件发生,当有读事件read event发生时,调用函数ss5_unix_recv O ;当有新事件new event发生时,调用函数ss5_event_accept ();当有写事件wirte event发生时,调用函数ss5_unix_send (); 函数ss5_unix_recv()封装了标准recv O函数,实现从网络中读取数据的功能,然后调用函数recv O ; 函数ss5_event_accept O实现接收TCP连接请求的功能,然后调用函数Is- >connection_handlerO ; 函数ss5_unix_send()封装了标准send()函数,实现向网络中发送数据的功能,然后调用函数send O ; 函数Is- > connection_handler O实现处理客户请求,建立代理平台与客户之间的TCP连接的功能; 函数recv O,实现从指定的网络套接字接收数据功能; 函数sendO实现用于从给 定的套接字发送数据功能。
全文摘要
可控分布式代理平台,涉及一种代理平台,为了解决一股平台没有审计和信任机制,致使不法用户对系统进行DDOS攻击或访问不法网站获取不良信息的问题。代理模块提供代理服务和分布式代理机群间协作功能,支持SOCKS4和SOCKS5版本的SOCKS协议;进程管理模块创建、运行、维护和销毁部分模块的进程和线程;配置文件管理模块为其他模块提供配置文件解析与加载;日志输出模块为其他模块提供日志输出;事件管理模块,处理各种请求;内存管理模块为部分模块内存管理;I/O管理模块为接收和发送网络数据;监控模块,用于接收控制中心发送的命令,根据所述命令执行相应操作。它用于为用户提供SOCKS代理服务。
文档编号H04L29/06GK103237035SQ20131015732
公开日2013年8月7日 申请日期2013年4月28日 优先权日2013年4月28日
发明者何慧, 张伟哲, 张宏莉, 李乔, 张永胜, 秦泓洋, 王健, 朱振广, 王冬, 范国涛 申请人:哈尔滨工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1