文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网站建设源码精华网站实时监控系统的设计与实现
精品推荐
特别推荐
·几种媒体文件(MediaPlayer,Realplay,QuickTime)的代码
·网页制作中九种用途特效按钮的代码
·对联式广告代码效果大全
·WEB编程开发常用的代码
·方法汇总 禁止查看网页源代码全攻略
·禁止查看网页源代码方法总结
·总结网页代码常用小技巧,网页制作必学
·做网页的一些技巧
·教你制作GBK与Unicode的对照表
·常用网页播放器代码
·42个网页设计小技巧
·网站设计和网站建设的65条原则
·网页背景设计技巧
·网站实时监控系统的设计与实现
·用ASP制作饼图、柱状图等
·太有创意了!看看这些让人称绝的404错误页面
·表格艺术经典回顾
·具有亲和力的表格
·滚动条特效代码收集
·whois信息查询大全
热点TOP10
·网页中的多媒体播放控制
·常用网页播放器代码
·编写简单的中文分词程序
·网页播放器代码全集及详细说明[精]
·网页在线播放器代码大全
·太有创意了!看看这些让人称绝的404错误页面
·三级菜单(通用版)
·QQ.COM的天气预报代码
·RegularExpressionValidator正则表达式验证电子邮件
·好用的轮播广告JavaScript源码
·Membership角色与权限管理
·十七款播放器的特点介绍 下载
·几种媒体文件(MediaPlayer,Realplay,QuickTime)的代码
·方法汇总 禁止查看网页源代码全攻略
·用PHP实现自己的搜索引擎
·总结网页代码常用小技巧,网页制作必学
·浮动对联广告---之左侧代码
·动态提示的下拉框
·拖动改变Table的列宽度
·blockquote标签应该怎样使用?

网站实时监控系统的设计与实现

日期:2007年5月19日 作者: 查看:[大字体 中字体 小字体]


摘 要: 本文提出了基于操作系统内核服务和多线程技术的网站实时监控系统,解决了以往监控系统不能及时恢复异常网页的问题。重点介绍了系统的传送控制部分和监控部分

  关键词: 实时监控;多线程;API

  引言

  对网页监控比较成熟的技术是定时监控,即由用户设定时间间隔,系统按时对需监控的网页文件轮询一遍,来判断文件是否被非法删除或篡改。若发现,立即用备份盘上的备份文件进行恢复。这样的监控存在一个缺陷:被非法删除或篡改的网页不能得到及时的恢复。

  本文介绍的网站实时监控系统创造性地利用操作系统内核提供的系统服务和多线程技术,所有的文件非法变更事件都会被操作系统及时通知监控程序,该机制完全区别于扫描技术,不需要与备份库对比分析的繁琐过程,可以做到监控的实时性和低耗性。 2 系统工作原理

  为了实现网站的实时自动恢复,系统需要由三个部分组成:网站监控,网站备份,传送控制。网站监控负责监视Web服务器内部的变化,发现对网页文件的非法篡改;网站备份是Web服务器内网页文件系统的映像,以及有关数据库系统;传送控制对网站监控部分实施控制并用于页面维护工作,而且还负责产生有关审计记录,报警信息等。这三个部分组成一个有机整体,工作原理如下:网站监控发现异常并分析出异常点,接着通知传送控制部分;传送控制部分控制网站备份部分将与异常点有关的正确内容传送到Web服务器覆盖异常部分,同时产生相应的审计记录和报警信息。

  传送控制部分

  使用本系统时,用户首先通过定制监控目录选择要监控的网页文件。当进行实时监控时,系统启动多个并发的监控线程对多个目录实施实时监控,一个线程监控一个目录。传送控制部分负责启动监控线程,接收监控线程传来目录变更的消息,并根据消息将备份文件覆盖异常文件,产生报警和审计信息。

  1、监控线程的启动

  由于用户定制的须监控网页的个数是不固定的,因此所须监控的目录的个数也是不固定的,所以要启动的线程的数目也将是不固定的。鉴于此,我们用链表结构来表示所须监控的目录。链表结构包括目录名和指向下一个监控目录结构的指针,结构为: struct list{

string dirname; //记录目录名称的字符串
struct list *next;} // 指向下一节点的指针

  如图1所示

网站实时监控系统的设计与实现(图一)网站实时监控系统的设计与实现(图二)网站实时监控系统的设计与实现(图三)
  图1 三节点的链表

  链表的数据来源可以是静态的用户配置文件或动态的用户操作选取。当链表中的一个节点指向下一节点的指针为NULL时,说明该节点是链表的末节点。根据链表,启动多个线程,链表有一个节点,就代表有一个目录需要监控,就需要启动一个监控线程,遍历整个链表,就可以根据用户需求启动所有线程,监控所有定制的目录。实现过程如图2所示。

网站实时监控系统的设计与实现(图四)

  链表的初始地址àP

P=NULL?
CreateThread( NULL,0,monitor,P,0,&ThreadId )
P=PàNEXT
终止
Y
N

  图2中P是指向链表中一个节点的指针,最初指向链表的首节点,每启动一个线程,P向后移一个节点。P同时作为参数传递给线程的控制函数,控制函数通过指针P可以知道自己正在监控的是哪一个目录。Windows系统函数CreateThread( NULL,0,monitor,P,0,&ThreadId )启动监控线程,monitor是线程控制函数的起始地址。

  2、变更消息的处理

  在传送控制部分定义一个DealFun函数专门用于处理网站监控部分发送的目录变更消息。网站监控部分发送的变更消息有三个参数:发生了什么样的改变,发生改变的文件名和发生改变的文件所在目录。DealFun函数根据文件名和目录名到文件备份数据库中找到该文件的备份文件,并用备份文件覆盖该文件;再根据改变的类型(比如文件被删除,文件被修改等)产生相应的报警信息。同时把每次变更写入日志数据库中。

  网站监控部分

  网站监控部分负责实现监控线程中的控制函数,对指定的一个目录进行监控,当该目录中有文件发生改变,负责把变更信息发送给传送控制部分。 Windows提供了对文件和目录监控的系统服务,并且为应用程序提供了两个API函数,它们分别是:FindFirstChangeNotification和ReadDirectoryChangesW。由于通过FindFirstChangeNotification函数只能监控到某一目录下有文件发生改变,而不能监控到具体是哪一文件发生改变,所以本系统选用ReadDirectoryChangesW函数。该函数的定义为:

BOOL ReadDirectoryChangesW(
HANDLE hDirectory,
LPVOID lpBuffer,
DWORD nBufferLength,
BOOL bWatchSubtree,
DWORD dwNotifyFilter,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped,
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);

  第一个参数hDirectory是要监控目录的句柄,可以通过指定目录名,利用CreateFile函数的返回值获得。用户代码通过第二个和第三个参数来告知操作系统该把目录变化通知放在首地址为lpBuffer, 长度为nBufferLength的一块内存区域当中的。但是该内存又是怎样组织的呢?操作系统是把他们放在FILE_NOTIFY_INFORMATION这个结构里面的:

typedef struct _FILE_NOTIFY_INFORMATION {
DWORD NextEntryOffset;
DWORD Action;
DWORD FileNameLength;
WCHAR FileName[1];
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;

  这是一个链表结构,第一个字段存储了要获得下一个记录需要跳过多少字节数,如果它的值为0,就表示本记录已经是链表中的最后一条记录了。该字段其实也可以看作是一个指向下一条记录的指针。第二个字段的含义是:本次通知了哪种类型的目录变化。第三个字段表示的是变化的文件名称的长度。第四个字段是一个存放变化的文件名称的Unicode字符数组的首地址。

  另外一个与本系统有关的参数是dwNotifyFilter。它是目录变化通知过滤器。要监控文件名发生变化,此参数应设为FILE_NOTIFY_CHANGE_FILE_NAME;文件被非法改写为FILE_NOTIFY_CHANGE_LAST_WRITE等等。根据过滤器的设置,ReadDirectoryChangesW函数可以监控文件名改变、文件属性改变、文件大小改变、文件内容被改写、文件被删除等多种类型的变化。

  监控线程的控制函数就是利用ReadDirectoryChangesW函数实现对一个目录进行监控的。具体的做法是:首先使用CreateFile获取要监控目录的句柄;然后在一个While循环里面调用ReadDirectoryChangesW,并且把自己分配的用来存放目录变化通知的内存首地址、内存长度、目录句柄传给该函数。用户代码在该函数的调用中进行同步等待。当目录中有文件发生改变,控制函数把目录变化通知存放在指定的内存区域内,并以消息的方式把发生改变的文件名、文件所在目录和改变的方式传递给传送控制函数。具体代码如下:

static DWORD WINAPI monitor( list lParam ) //入口参数为3.1节中描述的链表指针
{ HANDLE hdir;
hDir = CreateFile(
lParamà.c_str(),
GENERIC_READGENERIC_WRITE,
FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL
); //获取要监控目录的句柄。目录名称由入口参数指定

if( INVALID_HANDLE_VALUE == hDir ) return false;
char buf[ 2*(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH) ];
FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION *)buf; //指定存放目录变化通知的内存区域
DWORD BytesReturned;
while(true) //进入循环监控
{ if( ReadDirectoryChangesW(hDir,
pNotify,
sizeof(buf),
true, //监控子目录
//设置过滤器
FILE_NOTIFY_CHANGE_FILE_NAME
FILE_NOTIFY_CHANGE_DIR_NAME
FILE_NOTIFY_CHANGE_ATTRIBUTES
FILE_NOTIFY_CHANGE_SIZE
FILE_NOTIFY_CHANGE_LAST_WRITE
FILE_NOTIFY_CHANGE_LAST_ACCESS
FILE_NOTIFY_CHANGE_CREATION
FILE_NOTIFY_CHANGE_SECURITY,
&BytesReturned,
NULL,
NULL ) )
{ if( 0 != pNotify->NextEntryOffset )
{ PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset);
}

MonitorControl obj;//传送控制类,在传送控制部分中定义
objàDealFun( (ACTION)pNotify->Action, pNotifyàFileName,lParamàdirname );//将目录改变通知以消息的方式传递给传送控制部分
}

else
{break;
}
}
return 0;
}

  系统的模型用UML的活动图方式表示如图3所示:

网站实时监控系统的设计与实现(图五)
图3 系统模型

  结论

  本文针对传统的网站监控系统不能及时恢复非法删除和篡改的网页的问题,设计并实现了基于操作系统内核提供的服务和多线程技术网站实时监控系统。当非法篡改的事件发生时,本系统能够毫秒级报警和自动恢复,即使报警延迟和恢复时间相加,总和仍能够保持在毫秒级,从根本上杜绝了黑客利用报警和恢复延迟发布非法信息的可能。不足之处是本系统还只能在Windows操作系统下运行,我们正在研究能够跨平台的网站实时监控系统。

(出处:清风网络学院






上一篇:web2.0中流行的设计元素之颜色

下一篇:网页设计必须注意的29个问题

网站实时监控系统的设计与实现 相关文章:
·28个免费在线电影网站
·3DS Max 7卧室效果图设计:建模篇
·XP系统运行慢?小编自用7招解决
·将系统装到U盘中 如何自制XP@USB启动盘
·不用重装XP系统就可以解决全部故障
·中国十大免费电影网站排行
·学生成绩管理系统实习
·Vista系统使用技巧总结
·VB+Access设计图书管理系统
·打造极速XP系统之绝对秘籍
网站实时监控系统的设计与实现 相关软件:
·自己动手建立企业网站
·学校源码管理系统超靓版V2008
·美工设计教程
·如何安装双系统
·自己动手建设个人网站
·方正飞腾集成排版系统V4.1
·Dreamweaver 网页设计
·C语言程序设计
·Photoshop CS中文版平面设计师标准案例教程
·Photoshop CS经典创意设计200例

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot