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());
                }
 
 
 
监控程序:
public void WatchFolder(string filetype)
        {
           
            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);//重命名,如果有人新建个文件,他是新建,然后重命名的。
            }
        }
 
 
每个事件触发:
简单只是如果有触发后,在监视结果显示,如果你想进一步来做,可以入库或者自动发邮件通知。

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, "删除");
        }