利用旁路监听技术约束数字资源过量下载*
王政军, 俞小怡, 金玉玲
大连理工大学图书馆 大连 116023
王政军, ORCID: 0000-0001-9489-0494, E-mail: zhengjun@dlut.edu.cn

作者贡献声明:王政军: 提出项目设计方案和研究思路, 项目开发的主要实施者,论文最终版本修订; 俞小怡: 设计项目实施方案, 采集和分析数据, 撰写论文和统稿; 金玉玲: 参与项目开发和实施, 算法分析、代码实现和系统测试。

摘要
目的为解决高校图书馆存在的数字资源过量下载问题, 设计基于网络旁路监听技术的数字资源监控管理系统。【应用背景】现有过量下载问题的解决方案中存在一定的缺陷, 为弥补这些缺陷, 提出基于旁路监听技术的优化解决方案。方法引入旁路监听技术方式探讨图书馆约束数字资源过量下载的设计思路, 以大连理工大学图书馆数字资源监控系统为例, 阐述系统的技术支撑原理、设计思路及功能模块解决方案。结果在不影响原有的网络拓扑和使用习惯的前提下, 准确识别并记录读者对数字资源的访问下载情况, 对过量下载的可疑用户进行警告提醒乃至屏蔽阻断。结论基于旁路监听方式的数字资源监控系统可以对数字资源实施准确监控, 有效防止过量下载事件的发生。
关键词: 旁路监听; 混杂模式; 包过滤; 过量下载
中图分类号:TP393 G250
Using Sniffer Technology to Constraint Electronic Resource Excessive Downloading
Wang Zhengjun, Yu Xiaoyi, Jin Yuling
Dalian University of Technology Library, Dalian 116023, China
Abstract

[Objective] To solve the problem of excessive downloading of digital resources in university libraries, design digital resource monitoring and management system based on the network sniffer technology. [Context] There are some defects in the existing solutions for the excessive downloading problems. To compensate for these defects, the optimization solution scheme based on the network sniffer technology is proposed. [Methods] This paper introduces network sniffer technology to constraint electronic resource excessive downloading. Taking the digital resource monitoring and management system of Dalian University of Technology Library as an example, it describes the technical support principles, design thinking and modules achievement. [Results] Under the premise of not affecting the topology structure and users’ habits of the original network, this system can identify and record the readers’ access and download to electronic resources, and can finally effectively prevent the occurrence of the event of excessive downloading by warning and even blocking the shield of the suspect users of excessive downloading. [Conclusions] The digital resource monitoring system based on the sniffer technology can accurately monitor the digital resources and effectively prevent the occurrence of the event of excessive downloading.

Keyword: Sniffer; Promiscuous mode; Netfilter; Excessive downloading
1 引言

由于数字资源的实时性和准确性, 检索和下载成为教学科研的重要环节。随着数字资源下载率的逐年提高, 很多高校数字资源服务出现数字资源过量下载甚至恶意下载的行为, 导致部分数据资源服务暂停, 影响到全校师生对数字资源的正常使用。究其原因, 主要是因为管理机构对所订购的数字资源缺少合理的监控方法, 不能对恶意下载的行为进行有效的预警和拦截[1]

目前解决数字资源过量下载问题有三种方案:

(1) 对数字资源服务发布端进行监控, 此种方式需要在数字资源的服务端部署安装监控模块, 但大多商业数字库供应商不会为客户开放和提供此种服务, 图书馆作为客户端难于协调实施。

(2) 直接采用NetFlow[2]、Cacti[3]、MRTG[4]等开源软件进行网络监控, 虽然图书馆可以自行实施该方案, 但只能对网络流量进行监控, 不能对数字资源的下载数量进行监控和管理。

(3) 使用代理服务器进行数字资源的监控管理, 该方案通过网络数据包的分析进行数字资源访问的监控管理: 对数字资源的网络流量、访问次数和下载量等数据进行综合的评价分析, 并可以实时监控读者的访问状态, 对非法访问进行跟踪提醒。但是代理服务器方式存在重大的技术缺陷: 主流的计算机硬件系统满足不了庞大的网络数据包分析计算需求, 因计算不足产生网络瓶颈的问题, 并且部署代理服务器会对原有的网络拓扑和网络使用习惯产生影响, 很难在实践中得以真正部署[5]

大连理工大学图书馆联合校园网络中心, 针对上述问题进行综合分析, 开发了基于网络旁路监听技术的数字资源访问监控系统。该系统在不改变原有网络拓扑和性能的前提下, 实时跟踪读者对数字资源的访问情况, 在不产生网络瓶颈的前提下对过量下载的用户进行警告提醒和约束, 有效减少恶意下载的事件发生。

2 技术原理与设计

读者从客户端访问数字资源, 必须经过校园网的网络出口, 如果利用网络旁路监听技术将校园网网络出口的数据包提取出来, 实时分析网络数据包中的源IP地址和目的IP地址判断读者对电子资源的访问, 并且通过分析读者的访问文件类型判断读者的访问行为是浏览或者下载, 实时跟踪读者对每个数字资源的点击数和下载数, 最终以每个电子资源的合理阈值来比较读者在单位时间内的下载量是否过载, 对于过载访问的用户在一定的保护时间内自动进行警告提醒并屏蔽访问, 当保护时间过后自动解除屏蔽[6]

考虑到校园网络出口的流量比较大, 如大连理工大学网络中心出口流量峰值达到8Gbps, 为减轻旁路监听分析服务器的流量压力, 在核心交换机和监听服务器之间部署地址筛选交换机, 将与电子资源有关的网络数据包筛选出来后再发给监听服务器。理论上监听服务器接受到的数据带宽在1Gbps之内, 而实际大连理工大学部署方案筛选后峰值在500Mbps, 所以能够保证系统对数据包的实时分析处理。其网络拓扑结构如图1所示:

图1 网络拓扑结构

具体的实现方法是旁路监听分析服务器利用网卡混杂模式捕捉数据包进行分析, 分析模块先将不需要分析的数据包进行丢弃, 包括非数字资源的信息包、非TCP连接传输数据包、非HTTP协议数据包。监控模块对纯数字资源信息数据包进行分析, 计算读者对数字资源的点击数和下载数, 将这些访问日志存于后台数据库中, 同时实时查看每位读者单位时间内的下载数是否超过下载上限阈值。对于下载过量的用户, 警告提醒模块发送警告信息予以拦截。查询分析模块对数据库中的访问日志进行查询统计, 便于管理员对违规的读者进行查找和锁定。数字资源监控系统的工作过程如图2所示:

图2 系统工作过程

数据捕获模块运行于Linux操作系统的内核空间, 采用Linux内核模块开发技术, 动态加载于Linux内核对网络数据包进行捕获。数据包分析模块、监控模块、警告提醒模块采用C/C++开发, 部署于Linux操作系统的捕获分析主机之上。后台数据库采用关系型数据库, 根据数据量的情况可以选择Oracle或者MySQL两种数据库。统计分析模块采用跨平台Java EE技术开发, 构建于Struts+ Spring+Hibernate框架之上, 表现层使用ExtJS技术, 以提高查询界面的友好性和用户的体验度。

3 系统实现
3.1 数字资源链表的设计

为提高对数字资源访问的统计效率, 程序将所有需要计算的数据调入内存中, 设计合理的数字资源的存储结构对系统的性能影响很大[7]。本系统采用链表的形式存储数字资源的相关信息, 如图3所示:

图3 数字资源链表结构

对于构建数字资源的链表, 虽然Linux操作系统有现成的API函数, 但是由于数字资源链表中含有两个子链表, 所以在构建这样一个复杂链表时, 使用系统开放链表函数使代码更加复杂, 逻辑更加不清晰, 并且在实际测试时发现其性能也不够理想[8]。本系统采用自行设计的链表结构, 主要体现对链表查询功能的优化。链表的元素定义如下:

typedef struct iplist /* IP链表结构* /

{

uint32_t ipaddr; /* IP地址* /

struct iplist * next; /* 链表指针* /

}IPINFO;

typedef struct ipon /* 在线IP链表* /

{

uint32_t ipaddr; /* IP地址* /

unsigned long percount; /* 周期访问次数* /

time_t time; /* 最近一次访问时间* /

struct ipon * next; /* 链表指针* /

}IPONLINE;

typedef struct erinfo /* 数字资源信息* /

{

char name[50]; /* 资源名称* /

unsigned long downCount; /* 下载次数* /

unsigned long accessCount; /* 访问次数* /

int threshold; /* 限制阈值* /

IPINFO iplist; /* 数字资源IP链表* /

IPONLINE iponline; /* 在线访问IP链表* /

struct erinfo * next; /* 链表指针* /

}ERINFO;

其中, ERINFO链表记录所有数字资源的基本信息, 包括数字资源的使用情况和IP地址, 因为IP地址众多, 所以使用子链表IPINFO存储。ERINFO链表中比较关键的是IPONLINE子链表, 该子链表记录有哪些客户端访问了该数字资源, 其中ipaddr是读者使用机器的IP地址, percount表明单位时间内对该数字资源的访问计数, time是单位时间的开始值, 每过一个单位时间就更新该值。程序主要依赖于IPONLINE中的信息检查单位时间内, 该客户端对此数字资源的访问是否超过数字资源下载的上限阈值。

3.2 数据捕获模块

数据包捕获模块运行于网络旁路监听服务器上, 监听服务器的网卡设置为混杂模式, 这样能保证所有到达该服务器的数据包能被系统读取。通过Linux内核的Netfilter框架捕获到达混杂模式网卡的所有网络包, 通过Netlink套接字的方式发送给用户空间的数据包分析模块进行分析。

Netfilter框架在Linux内核模块程序至少包括两个函数, 一个是init_module在模块插入内核时调用, 另外一个是cleanup_module在模块被移出时调用。本系统在内核模块初始化的过程中, 注册了Netfilter的NF_IP_PRE_ROUTING检察点的钩子函数。NF_IP_ PRE_ROUTING是Netfilter框架中最靠前段的检查点, 所有到达网卡的网络数据帧必定首次接受该检查点的检查, 所以在该处设置钩子函数, 可以比较完整全面地获取到达网卡的网络帧[9]。钩子函数如下:

/* 注册的hook函数的实现* /

unsigned int hook_func(unsigned int hooknum,

struct sk_buff * * skb,

const struct net_device * in,

const struct net_device * out,

int (* okfn)(struct sk_buff * ))

{

/* 其中sk_buff就是网络帧* /

send_to_user(sk_buff); /* 将数据帧发送给用户空间* /

return NF_DROP Or NF_ACCEPT; /* 丢弃或者返回数据包* /

}

在数字资源监控系统中, 内核需要将sk_buff数据帧通过Netlink的套接字方式发送到用户空间, 以上代码段中的send_to_user函数就是套接字的回调处理函数, 向用户空间发送数据。

3.3 数据包分析模块

数据包分析模块接受到数据包捕获模块发送来的数据包后, 对数字资源的IP数据包进行分析。分析用户要访问的信息属于哪个数字资源, 并对访问次数进行计数。数据包分析模块由两个部分组成: 数据包过滤和网址匹配。数据包过滤将捕获的非数字资源的数据包丢弃掉, 然后提取数字资源的IP数据包交给网址匹配处理。网址匹配将读者请求的IP地址和数字资源列表中的IP地址进行比对, 分析统计数字资源的访问情况。该模块流程如图4所示。

网址匹配采用优化的算法将用户IP数据包中的目的IP地址与系统内存中的数字资源IP列表逐一比对。如果发现用户IP包中的目的地址在数字资源IP链表中, 则沟通监控模块判断访问是否合法。在3.1节中介绍了本系统设计数字资源链表的数据结构, 链表中IP的存储类型为32位无符号整型, 为了更好地提高网址匹配工作效率, 对于数字资源链表中的IP地址链表在构建时进行索引, 并利用折半查找算法对IP地址与链表中的IP进行对比, 以提高查询效率。

图4 数据包过滤流程图

3.4 监控模块

监控模块是要实时监测读者对数字资源的访问情况, 当有需要检测的数据包的时候, 遍历数字资源链表, 比较是否是哪个数字资源的IP地址, 如果是就表明访问数字资源一次。然后查看HTTP协议头中的Content-Type字段中是否含有数字资源下载文件的扩展名, 如pdf、nk、caj等, 如果是的话则表明下载一次。将新的访问计数和下载计数更新于数字资源的链表中。该模块流程图如图5所示:

图5 监控模块流程

对于下载阈值的监控需要依赖于每次下载时间的记录和下载次数的记录。如果新下载时间与上次下载时间跨度大于单位时间(例如设置1分钟下载不超过10篇, 则单位时间为1分钟), 则将下载时间更新为当前时间, 并且查看计数是否超过下载阈值。如果超过阈值, 则通知警告提醒模块进行读者警告提醒。如果未超过阈值, 则计数器清零。如果新下载时间与上次下载时间跨度不大于单位时间, 则只进行计数累加的处理, 不进行更新时间的处理。

3.5 警告提醒模块

监控模块实时监控到用户对数字资源的访问超过限制阈值时, 由警告提醒模块对用户的访问进行拦截。由于系统是基于旁路监听的架构并不能直接进行读者访问数据的拦截, 所以采用的拦截原理是向过量下载的用户发送伪装的HTTP响应报文, 伪造报文先于正常报文到达读者浏览器, 因此使用户浏览器显示警告提醒的网页。在系统设置的屏蔽期内, 该读者对受限电子资源的访问一直是伪数据报文的内容, 屏蔽期过后自动解除。

警告提醒报文实际上是完整的HTTP响应报文, 只是并不是数字资源服务器填充响应的报文, 而是数字资源监控系统中填充形成的完整报文, 呈现在用户面前的就是监控系统所发出的警告网页。警告提醒模块所发送的HTTP伪数据包利用其中的200响应代码, 具体响应报文内容如下:

HTTP/1.1 200 OK\r\n

Content-Type: text/html; charset=iso-8859-1\r\n

Content-length: 13\r\n

\r\n

< html>

< head>

< title>

大连理工大学图书馆数字资源访问警告

< /title>

< /head>

< body>

< br> < br> < br> < br>

< p align=center> < font size=18 color=red> 警告信息!

< /font> < /p>

< p align=center> 你对【* * * * 数字资源】的下载过快, 请稍后

再试!< /p>

< /body>

< /html>

发送伪数据包包括IP层的首部填充和TCP协议的首部填充。正常情况下操作系统API能够自动填写TCP/IP协议的首部, 而本系统要自主填写协议首部。参照正常响应报文填写伪数据包并不困难, 但要根据伪报文的情况填写正确的IP首部长度以及TCP首部的序号和确认号, 最后通过具体的报文内容计算正确的校验和[10]

协议首部填充完后, 将其按照TCP/IP协议的封装顺序发送到缓存中, 准备通过Socket套接字发送给读者浏览器。Linux操作系统网络编程使用Socket实例, 利用原始套接字设置套接字选项IP_HDRINCL实现, 最后通过sendto()函数将缓存区的内容发送给用户浏览器, 该函数的原型为int sendto(socket s, const void * msg, int len, unsigned int flags, const struct sockaddr * to, int tolen), 其中msg参数设置为笔者构建的数据包。

3.6 统计分析模块

用户对数字资源的访问记录完整保存在数据库中, 设计B/S架构的程序进行数据的查询分析。主要是设计合理的SQL查询语句, 对读者访问数字资源的情况进行查询统计, 作为系统对读者进行警告提醒的事实依据。还可以查询一段时间以来警告提醒的统计数据, 对约束了的读者或者数字资源有总体的把握。另外, 通过系统日志库的查询, 还可以了解数字资源的下载排序、点击排序以及一段时间内读者的访问情况排序, 并统计分析出各个数据库的利用率、下载量和利用热门时间段以及读者的下载行为分析等。具体分析页面如图6所示:

图6 数据库的查询分析页面

4 结语

采用旁路监听技术可以在不影响访问速度的前提下准确有效地监测数字资源的使用情况, 实现了对每位用户的在线使用情况的实时监控; 对非法使用的用户进行拦截并给出动态警告, 避免超量下载导致的中断数据库服务的恶性事件。目前, 该系统在大连理工大学图书馆实际运行两年多以来, 曾经多次对有恶意下载嫌疑的读者进行警告提醒和屏蔽, 无论读者是恶意或者无意进行过量下载的行为, 该平台都会引导读者回归到正常合理的访问频率。该平台的投入使用, 对图书馆提升服务质量、规范服务行为、提高资源有效利用率、快速响应读者需求以及进一步发展学科研究型图书馆具有示范意义。

系统以读者IP地址作为计数点, 如果读者在访问数字资源过程中使用的不是本地固定实IP地址的话, 会存在计数不准确的问题, 如通过代理服务器的方式或者持续修改IP地址。下一步的研究方向为避免以IP地址作为计数点的局限性, 将在系统中建立读者登录会话Session的机制, 以读者会话标识(Session ID)作为计数点, 可以唯一用户身份进行准确计数。

该系统的运行过程中也存在着技术人员维护工作量较大的问题。原因如下: 大连理工大学图书馆采购的数字资源有160多种, 部分数据商的服务平台涉及多个域名和IP地址, 并且域名和IP经常会有更新情况。本系统内置的所有数据资源的地址列表, 必须实时与最新地址列表保持同步[11]。虽然有专人维护和更新其地址列表, 但是因为数据量较大且地址变更存在不可预知性, 对地址列表的维护也存在一定的滞后性。由于涉及面广和成因复杂, 该问题解决起来有一定难度, 是下一步改进的方向。

参考文献
[1] 赵俊颜. 国内外数字资源绩效评价研究综述[J]. 高校图书馆工作, 2012, 32(2): 62-66.
(Zhao Junyan. Overview of the Research on the Performance Evaluation of Digital Resources at Home and Abroad[J]. Library Work in Colleges and Universities, 2012, 32(2): 62-66. ) [本文引用:1]
[2] 曹建业, 董永吉, 冶晓隆, . 基于NetFlow的流量统计系统的设计与实现[J]. 计算机工程与设计, 2014, 35(2): 381-385.
(Cao Jianye, Dong Yongji, Ye Xiaolong, et al. Design and Implementation of Network Traffic Statistics System Based on NetFlow[J]. Computer Engineering and Design, 2014, 35(2): 381-385. ) [本文引用:1]
[3] 董凯. 基于Cacti的网络运行监测系统的设计与实现[D]. 济南: 山东大学, 2013.
(Dong Kai. The Design and Implementation of Network Monitoring System Based on Cacti [D]. Ji’nan: Shand ong University, 2013. ) [本文引用:1]
[4] 马东, 袁志野. 基于MRTG软件的高校图书馆网络监控系统探究[J]. 现代情报, 2010, 30(12): 84-86.
(Ma Dong, Yuan Zhiye. Study on Net Control System of University Library Based on MRTG[J]. Journal of Modern Information, 2010, 30(12): 84-86. ) [本文引用:1]
[5] 朱强. 变化中的服务与管理——美国大学图书馆访问印象[J]. 图书情报研究, 2011, 4(4): 1-4.
(Zhu Qiang. Services and Management in Change: Impression from a Visit to American University Libraries[J]. Library and Information Studies, 2011, 4(4): 1-4. ) [本文引用:1]
[6] 袁方方. 基于Netfilter的内容过滤系统的设计与实现[D]. 北京: 北京邮电大学, 2012.
(Yuan Fangfang. The Design and Implementation of the Netfilter-based Content Filtering System [D]. Beijing: Beijing University of Posts and Telecommunications, 2012. ) [本文引用:1]
[7] 周旭晨. 网络流量监控系统的搭建, 应用与数据分析[D]. 武汉: 武汉科技大学, 2012.
(Zhou Xuchen. The Structures, Application and Data Analysis of the Network Flow Monitoring System [D]. Wuhan: Wuhan University of Science and Technology, 2012. ) [本文引用:1]
[8] 伍丽芳. 局域网安全行为监控系统的设计与实现[D]. 成都: 电子科技大学, 2012.
(Wu Lifang. Design and Implementation of Security Behavior Monitoring System for LAN [D]. Chengdu: University of Electronic Science and Technology, 2012. ) [本文引用:1]
[9] Duarte V, Farruca N. Using libPcap for Monitoring Distributed Applications [C]. In: Proceedings of 2010 International Conference on High Performance Computing and Simulation (HPCS), Caen, France. IEEE, 2010: 92-97. [本文引用:1]
[10] 叶兰. 电子资源管理系统实施与应用研究[J]. 图书情报工作, 2012, 56(13): 89-94.
(Ye Lan. Planning and Implementing an Electronic Resource Management System[J]. Library and Information Service, 2012, 56(13): 89-94. ) [本文引用:1]
[11] Silton K, LeMaistre T. Innovative Interfaces’ Electronic Resources Management System: A Survey on the State of Implementation and Usage[J]. Serials Review, 2011, 37(2): 80-86. [本文引用:1]