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

news/2024/5/11 3:17:41/文章来源:https://blog.csdn.net/ecitnet/article/details/1820609
引言

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

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

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

   传送控制部分

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

  1、监控线程的启动

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

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

  如图1所示

XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />网站实时监控系统的设计与实现(图一)网站实时监控系统的设计与实现(图二)网站实时监控系统的设计与实现(图三)
  图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和Read DirectoryChangesW。由于通过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操作系统下运行,我们正在研究能够跨平台的网站实时监控系统。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_842137.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[BOF]高性能网站设计、开发、部署

北京 TechED 上,计划中的一个BOF(同类人)的主题是:高性能网站设计、开发、部署,下面是我初步整理需要讨论的主题: 网站是信息展示平台,它的核心职责是把信息展示出来。当然,他也有部…

值得网站开发者收藏的JAVASCRIPT图形图表库

http://www.uirss.com/blog-39451-6411.html 图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等。可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和Web应用和项目的可靠性。…

seo按天扣费系统_扒拉一些搞SEO关键词排名赚钱的几个行业秘密

互联网上的赚钱方式各式各样,干什么的几乎都有,但是搞网站的、搞SEO的,最终目的也是赚钱,可是赚钱跟赚钱相比,SEO排名赚钱的还是出现了几个极端化。今天诺伊网小编给你深扒一些SEO行业的秘闻吧,估计很多干货…

:https web服务器ssl认证项目,网站启用https后的SSL的安全配置和检测

现在的网站通常开启SSL已经是标配了,不过,配置好了SSL后,还需要判断一下服务器部署的是否安全,如果没有配置好的话,会带来很多安全隐患。SSL/TLS 系列中有六种版本:SSL v2,SSL v3,TL…

国内的服务器网站,国内主流网站服务器

国内主流网站服务器 内容精选换一换在大型网络应用中,通常会使用多台服务器提供同一个服务。为了平衡每台服务器上的访问压力,通常会选择采用负载均衡来实现,提高服务器响应效率。云解析服务支持解析的负载均衡,也叫做带权重的记录…

国内外IGS数据及产品下载网站

国内外 IGS数据及产品下载网站 连接有所变更: CLK ,SP3 https://cddis.nasa.gov/archive/gnss/products/2220/ 本文是转载博客地址:https://blog.csdn.net/SmartTiger_CSL/article/details 一、转自http://geodesy.blog.sohu.com/274775667.html IG…

好吧我摊牌了,这是C++最好的5 个网站

相对其他语言来说,C 算是难度比较高的了,这一点无法否认。但是如果能有一些好的网站,则会让 C 的学习事半功倍。 那就来介绍几个最常用的(最好的)吧,包含了参考手册、教程、框架/库列表 ...... 1.cpprefer…

谷歌浏览器使用bing搜索引擎发现打开网站会替换搜索页

今天更新谷歌浏览器发现搜索东西,点击搜索结果网站,打开后的网站页会替换掉当前搜索页,就得点回退,很烦 后来发现不是谷歌浏览器的问题,是搜索引擎的问题,设置下搜索引擎就行 我使用的是bing搜索引擎 勾…

网站如何集成markdown编辑器

收藏(4)Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。它用简洁的语法代替排版,而不像一般我们用的文字处理软件 Word 等有大量的排版、字体设置。这使得我们能够专心的码字&…

Linux测试网速(linux服务器测试网站,命令行)

第一步:wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py 第二步: chmod arx speedtest.py 第三步: sudo mv speedtest.py /usr/local/bin/speedtest 第四步:sudo chown root:root /usr/local…

巧用VS2005解决VS2005网站发布不便问题

关键字:VS2005,网站发布,编译一、问题引入在VS2005网站开发过程中,网站发布问题一直是个问题.VS2005创建的网站有几个默认的目录:App_Code,App_Data,App_Themes........如果是但cs/vb文件,比如UploadFile.cs类UploadFile,这个类文件没有可视的aspx文件,那么这个文件就必须放到A…

各类常见的网站检查工具

一、网站基础查询 1.域名基础信息查询 http://tool.chinaz.com/Ip/Whois.asp 通过在线查询你可以知道自己网站的基本信息,当然很多时候你是清楚自己网站的情况的。但是你不一定知道对手网站的情况。 2.详细的网站历史查询 http://www.archive.org/web/web.php 3.网站…

USTC一个开源下载的网站

QT下载路径,版本5.12.6 http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/5.12/5.12.6/

最新10款精美的免费PSD网站模板下载

这篇文章收集了10款免费的 PSD 网站模板分享给大家,您可以免费下载使用。这些高质量的免费 PSD 网站模板可以让您的工作得心应手,帮助您节省大量的时间和精力。感谢那些优秀的设计师分享他们的劳动成果,让更多的人可以使用他们的创意设计&…

精选30个富有想象力的网站设计作品

在设计网站的时候,有几项事情需要牢记,其中很重要的事情之一就是为设计的品牌选择合适的风格。在这篇文章中,你将发现很多创意的,吸引眼球的网站设计作品,设计师们可通过这些优秀的设计作品来获取创作灵感,…

一个网站直接跳转引起的一些思考

近日看了一个站&#xff0c;网站的界面是这样的。 发现鼠标放上去&#xff0c;都是直接跳转&#xff0c;于是我查看了一下源代码 复制代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transit…

IIS6.0asp网站文件上传大小限制和图片上传大小的限制解决方法

win2003的iis6限制了asp的上传文件大小为200k&#xff0c;aspx的上传程序没有影响1、先勾选IIS设置中的选项&#xff1a;IIS服务器属性&#xff0d;&#xff0d;&#xff1e;允许直接编辑配置数据库2、在服务里关闭iis admin service服务.3、找到windows\system32\inesrv\下的m…

用ssl加密apache服务器来建立连接加密网站

2019独角兽企业重金招聘Python工程师标准>>> ssl介绍: SSL&#xff08;Secure Sockets Layer&#xff0c;SSL&#xff09;是一种安全协议&#xff0c;在网景公司&#xff08;Netscape&#xff09;推出首版Web浏览器的同时提出&#xff0c;目的是为网络通信提供安全及…

windows server 2003 发布asp.net2.0网站流程及问题

aaa6263 windows server 2003 发布asp.net2.0网站流程及问题 问题&#xff1a; windows server 2003 发布asp.net2.0网站时&#xff0c;会遇到各种问题&#xff0c;整理如下&#xff0c;以备后用。 流程&#xff1a; 1.安装iis6.0 首先从网上下载iis6.0安装包&#xff0c;然后…

C# 通过WebService方式 IIS发布网站 上传文件到服务器

C# 通过WebService方式 IIS发布网站 上传文件到服务器 (2014-08-11 14:57:19) 转载▼标签&#xff1a; it 应用场景&#xff1a;要将本地的文件 上传到服务器的虚拟机上 网络环境&#xff1a;公司局域网&#xff08;如下图中第二种&#xff09; 开发环境&#xff1a;VS20…