APP下载

基于多线程架构的网页预扫描系统的设计与实现

2015-05-09赵新元

网络安全技术与应用 2015年12期
关键词:线程队列报文

◆赵新元 年 梅

(新疆师范大学计算机科学技术学院 新疆 830054)

0 引言

随着互联网技术的不断发展,互联网在文化信息交互中已经成为了主要的传播媒体。在这些信息中存在着不少恶意、反动等不健康的内容。本文提出了一个基于多线程架构的网页预扫描系统,系统对监听到的网页采用跨层直接扫描的方式进行粗扫描,初步判定在网页中是否含有非法的内容,然后再决定是否对该网页进行详细的内容分析确定其安全性。

1 关键技术

1.1 数据包捕获技术

常见的网络数据采集的方案是基于libpcap[1]库的。采用libpcap捕获数据包流程简单,可供调用的函数接口只有几个且易于实现。但对重负载的监控节点来说直接采用libpcap可能会丢包。文献[2]提出了一种基于零拷贝思想的高速网络I/O架构netmap,该架构能在千兆或万兆网卡上达到网卡的线速收发包速率。因此该技术在高速网络数据处理领域有着广泛的应用。文献[3]提出一种将netmap与libpcap相结合的方式来进行数据采集,使用简单且移植性较好,因此本系统的数据采集线程采用文献[3]的思想来设计。

1.2 跨层直接扫描HTTP报文

通常当数据采集模块捕获到数据包后,为了能够交付给应用层使用,必须要先进行数据流还原然后再构造并提取应用层的内容,最后将结果交给应用层。但对本文所提出预处理系统来说,这样处理会极大的影响系统的处理速度。由于本系统专门针对网页信息进行扫描,因此可考虑绕过传统的数据还原后再扫描的思想,进行跨层直接扫描,即对采集到的包含HTTP数据的TCP报文直接进行扫描。

由于HTTP报文的数据传输可以采用压缩/非压缩方式来传送,因此在设计跨层扫描时要考虑这一点。若网页中数据未采用压缩方式传输,则可直接对收到TCP报文(包含HTTP内容)进行扫描而不必等待网页内容完全传送完成,但这需要对扫描算法做一点修正,使之能够适应这种片断式的扫描。但若网页中是采用压缩方式传输,则只能在收到全部数据并解压后再进行扫描。

无论在扫描时是否需要还原网页内容,都需要知道当前网页元素的数据是否传输完毕。早期的HTTP1.0规定网页中的每个元素都通过一个TCP连接来传输,而现行的HTTP1.1则采用了持续性连接技术。因此对于HTTP1.0来说,只要连接关闭则当前网页元素数据必然传输完成,但对于HTTP1.1来说不能直接采用这种方式来确定。在HTTP1.1的报文中确定信息长度的方法有两种:一种是遵循了HTTP1.0的长度标识方法;第二种则采用新标识Transfer-Encoding,表明信息体采用了Chunked编码,利用文献[5]给出算法就可以确定TCP报文流中网页元素内容是否传输完成。

2 系统总体设计

2.1 关键词过滤的多线程架构

为了能够提高监听节点的工作效率,系统采用多线程机制来设计。如图1所示,在整个架构中包括四个队列和多个线程。四个队列中QT用来存储含有HTTP数据的TCP报文,RH存放要进行网页内容还原的TCP报文,QS中存放的是待扫描的部分或全部的HTTP数据,QE中存放多个扫描线程的预扫描结果。这四个队列负责在不同的线程中传递数据,多线程之间的同步实际就上是经典的读写者问题。

图1 多线程架构图

在该多线程架构中,包捕获线程采用1.1中所述的方法来采集网页数据,并将采集的TCP报文送入队列QT中;主处理线程负责分析TCP报文并将其送入到队列QS或RH中;报文还原线程则从RH中获取TCP报文对其重组并解压后送入队列QS中等待扫描;扫描管理线程则负责启动多个多关键词扫描线程,属于同一网页数据的TCP报文将被送入同一扫描线程。

2.2 主处理线程处理逻辑

在系统架构中主处理线程处于核心地位,其处理逻辑如图2所示。当主线程从队列QT里取出TCP报文后,首先根据报文头部构造一个流ID标记当前TCP流C(若该流不存在则创建)。如果流C没有结束则获取TCP报文中的HTTP头部信息,标志f用来判定当前流C是否正在接收一个网页元素的数据,f=0表明流C目前还未开始接收新的网页元素数据。由于系统监听的是网页信息,因此只对HTTP协议中的RESPONSE和POST方法产生的报文进行扫描,其它的则直接略过。目前能对网页内容进行过滤的仅限于文本类型的元素,因此可以通过报文头部的Content-Type字段来确定,凡是不是文本类型的元素均不扫描。之后需要再根据头部内容判定该元素的内容是否采用压缩传输,若采用则将其送入队列RHTTP,否则送入队列QS以便让扫描线程进行扫描。最后再利用文献[5]的思路判定网页元素的数据是否接收完成,并设置f标志。

图2 主处理线程流程图

3 结语

在实际应用中,由于监控节点的流量负载很大,因此在监控系统的设计中需要考虑系统架构的优化,如采用多线程技术、零拷贝技术等。本文提出了一种基于多线程架构的网页预扫描系统,系统在Linux平台上采用QT编程实现,经过实验,取得了预期的目的,为今后设计完整的网络内容分析系统提供了一个基础。

猜你喜欢

线程队列报文
基于J1939 协议多包报文的时序研究及应用
CTCS-2级报文数据管理需求分析和实现
队列里的小秘密
基于多队列切换的SDN拥塞控制*
浅析反驳类报文要点
在队列里
丰田加速驶入自动驾驶队列
浅谈linux多线程协作
ATS与列车通信报文分析
Linux线程实现技术研究