A Method to Process the Huge Logging Files of Serv-U
CUI Zhi-yun1, ZHANG Mei-xin2
(1.Office of Information and Network Management, Command College of the Chinese Armed Police Forces, Tianjin 300350; 2.Forensic Science Lab, the College of Political Science and Law, Hebei University, Baoding 071000, China)
Abstract: Serv-U is a Windows-based FTP file server, which support the logging ofuploading, downloading and deleting of files in details. Sometimes, the size of logging file is too big to be opened by normal Text editor, such as notepad and word, cause it is hard to process. A method is proposed in this paper, which can be used to search informations in huge logging files.
Key words: Serv-U; FTP; logging file; streamReader; visual studio 2008
1 概述
为了便于在局域网用户交换文件,我们在局域网中建立了FTP服务器。现在FTP服务器软件很多,我们经过比较后,最终选择使用Serv-U作为FTP服务器软件。之所以选择Serv-U,是因为其出众的安全性能及详细的日志记录功能。Serv-U支持实时多用户连接,匿名用户访问,可以基于IP对用户授予或者拒绝访问权限,支持文件上传和下载过程中的断点续传,能够设置硬盘空间配额和网络使用带宽,而且可以设置日志,详细记录用户的上传、下载、删除等所有操作,是一款优秀的FTP服务器软件[1]。
为保障网络安全,我们要对详细记录FTP服务器中文件上传、下载、删除等信息。我们启用Serv-U的日志功能,在日志中详细记录了系统信息、安全信息、文件下载、文件上传和IP名称,并将记录保存在文件中。
经过一段时间的运行后,在需要查看文件上传日志时,发现了一个问题: 设置Serv-U日志时,“自动新建日志文件”的周期选择的是“每月”,一个月的日志记录都保存在了同一个文件里面,一个日志文件的大小就达到2.6G。对于这么大的文件,常用的记事本、写字板根本无能为力,而Word也只能打开小于512 MB的文件[2]。
如果能把大文件切割成小文件,就可以打开了。从网上搜索到一个文本切割程序,用它切割日志文件,结果程序出错,文件切割失败。即使切割成功,在一大堆切割后的文件中搜索需要的信息,也不是一件令人愉快的事情。
既然日志中记录的是文件上传、删除等操作的信息,我们只需从日志中搜索出感兴趣的信息,比如,哪个用户上传或者删除了哪个文件,将这些信息抽取出来存为一个单独的文件就可以,而不需要浏览整个日志文件的内容。
2 程序实现
下面我们编写一个程序,从日志文件中搜索所需要的信息,将其保存到文本文件中。
在Visual Studio 2008中,新建一个Projects,选择Visual C#下面的windows Forms Application模板,将工程命名为FtpLogAnalyze。
在Form上添加一个文本框,命名为textBox1,添加一个按钮,命名为btnSearch,添加一个OpenFileDialog,命名为openFileDialog1。
双击btnSearch按钮,在btnSearch按钮单击事件中,将文件框中输入的信息作为参数,调用SearchStrInFile方法。
private void btnSearch_Click(object sender, EventArgs e)
{SearchStrInFile(textBox1.Text.Trim());
}
方法SearchStrInFile的功能是利用openFileDialog对话框打开日志文件,从日志文件中搜索信息,并调用StreamWriter.WriteLine方法把包含所需信息的行写入到文本文件中[3-4],
private void SearchStrInFile(string strToFind)
{try
{//利用OpenFileDialog打开日志文件
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{ //定义StreamReader对象,将打开的日志文件赋给StreamReader
using(StreamReader sr = new StreamReader(openFileDialog1.FileName, Encoding.GetEncoding(936), true))
{
int i = 0;//记录日志文件的总行数
string line = "";
string str = "";
//读取日志文件中的每一行
while ((line = sr.ReadLine()) != null)
{i++;
//检查该行中是否包含我们要搜索的信息
if (line.IndexOf(strToFind) > 0)
{//如果该行包含要搜索的信息,将该行保存到字符串str中
str += line;
//换行
str += System.Environment.NewLine;
}}
//将包含所需信息的行写入到文本文件中
using (StreamWriter sw = new StreamWriter(i.ToString() + ".txt"))
{sw.WriteLine(str);
}}
}}
catch (Exception ex)
{// 显示错误信息
MessageBox.Show(ex.Message);
}}
为了简单,我们把文本文件名设置为日志文件的行数,当然,我们也可以选择系统当前的日期时间或者其他的什么作为文本文件名。
一般来说,新生成的文本文件会很小,使用记事本或者写字本就很容易打开。
在Serv-U日志中,上传文件对应的记录内容为:
STOR 上传的文件名
如果我们想要查找是哪个用户上传了文件zhangsan.doc,在程序的文本框中输入:
STOR zhangsan.doc
然后单击搜索按钮,程序就会在日志文件夹中生成以日志文件行数命名的txt文件。在该文件中应该有类似的记录:
[2] Mon 25Apr11 18:47:22 - (007117) STOR zhangsan.doc
其中,Mon 25Apr11 18:47:22表示文件上传的日期、时间,(007117)中的数字是上传该文件的用户本次访问Serv-U服务器时的用户ID号,该ID号在同一个日志文件中对应一个用户,不会重复。然后再次在程序中搜索这个ID号,就可以把日志中该ID连接FTP服务器时的所有操作记录在文本文件中。其中,第一行,就有该ID对应的IP地址。如:
[5] Mon 25Apr11 18:46:14 - (007117) Connected to 192.168.248.245 (Local address 192.168.254.16) (责任编辑:南粤论文中心)转贴于南粤论文中心: http://www.nylw.net(南粤论文中心__代写代发论文_毕业论文带写_广州职称论文代发_广州论文网)