2012/4/1 9:04:00
网站建设服务器常用功能-文件监控代码
网站建设服务器常用功能-文件监控代码
维护服务器,比较烦的一个事情,就是有些网站老是被人家放马,遇到这种情况,因为很多网站本身不是自己写的,要找漏洞不容易,或者修改不容易,这样只能用最笨的方法,监控。监控是否有修改,如果有修改,即时做出处理,这样相对有个处理方法。
下面是C#的winform里面文件监控代码,使用的是FileSystemWatcher类,其他很简单,但是有一点,就是需要过滤文件类型,如果全部文件监控,程序很容易崩溃,也达不到监控效果。
主调用方法:
//多个监控类型,每个监控创建一个watch,这本身是一个线程,建议不要再使用线程了,要不很复杂。
string [] filetypes=txtWatchFiletype.Text.Split(',');
for (int i = 0; i < filetypes.Length; i++)
{
WatchFolder(filetypes[i].ToString());
}
{
WatchFolder(filetypes[i].ToString());
}
监控程序:
public void WatchFolder(string filetype)
{
fsw = new FileSystemWatcher(txtWatchFolder.Text);
//fsw.Filter = "";
//fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
{
fsw = new FileSystemWatcher(txtWatchFolder.Text);
//fsw.Filter = "";
//fsw.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
//每次修改有2次显示,试了很多次都是一样...以为是文件内容和文件属性修改了,因此显示2次,用修改类型过滤,但是没效果,网上很多人用其他方法解决,但是官方一点的方法,貌似没有,奇怪。
fsw.Filter = filetype;//过滤文件类型
fsw.EnableRaisingEvents = true;
fsw.IncludeSubdirectories = true;
if (cbWatchAdd.Checked)
{
fsw.Created += new FileSystemEventHandler(p_Created);//增加
}
if (cbWatchEdit.Checked)
{
fsw.Changed += new FileSystemEventHandler(p_Changed);//修改
}
if (cbWatchDel.Checked)
{
fsw.Deleted += new FileSystemEventHandler(p_Deleted);//删除
}
if (cbWatchRname.Checked)
{
fsw.Renamed += new RenamedEventHandler(p_Renamed);//重命名,如果有人新建个文件,他是新建,然后重命名的。
}
}
fsw.Filter = filetype;//过滤文件类型
fsw.EnableRaisingEvents = true;
fsw.IncludeSubdirectories = true;
if (cbWatchAdd.Checked)
{
fsw.Created += new FileSystemEventHandler(p_Created);//增加
}
if (cbWatchEdit.Checked)
{
fsw.Changed += new FileSystemEventHandler(p_Changed);//修改
}
if (cbWatchDel.Checked)
{
fsw.Deleted += new FileSystemEventHandler(p_Deleted);//删除
}
if (cbWatchRname.Checked)
{
fsw.Renamed += new RenamedEventHandler(p_Renamed);//重命名,如果有人新建个文件,他是新建,然后重命名的。
}
}
每个事件触发:
简单只是如果有触发后,在监视结果显示,如果你想进一步来做,可以入库或者自动发邮件通知。
private void p_Renamed(object sender, FileSystemEventArgs e)
{
ShowWatchResult(e.FullPath, "重名");
}
private void p_Changed(object sender, FileSystemEventArgs e)
{
ShowWatchResult(e.FullPath,"修改");
}
private void p_Created(object sender, FileSystemEventArgs e)
{
ShowWatchResult(e.FullPath, "创建");
}
private void p_Deleted(object sender, FileSystemEventArgs e)
{
ShowWatchResult(e.FullPath, "删除");
}