我的程序从服务器日志文件读取IP地址时出现错误
本文关键字:地址 错误 IP 读取 程序 服务器 日志 文件 我的 | 更新日期: 2023-09-27 17:49:15
我是c#新手,有一个问题。
我的服务器有像
这样的日志文件行2015-05-14 20:56:50 72.167.255.87 GET//电子邮件/site_05_12_2015/email-contactus-button.png图像Mozilla/5.0+(兼容;+MSIE+9.0;+Windows+NT+6.2;+WOW64;+Trident/7.0;+Microsoft+Outlook+15.0.4711;+Microsoft+Outlook+15.0.4711;+ms-office;+ moffice +15)304 0 0 46
和我的程序旨在收集请求某个资产的唯一IP地址。在上面的行中,如果程序正在搜索"email-contactus-button.png"
,我将提取"50.48.46.50"
。
在这里:
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
class Test
{
static void Main(string[] args)
{
// args[0] = expression to search for, e.g. "cloudrealized-email-top-banner"
try
{
string [] logs = System.IO.Directory.GetFiles(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine("{0} log files found", logs.Length);
HashSet<string> ipList;
string ipreg = "^(?:[0-9]{1,3}'.){3}[0-9]{1,3}$";
foreach (string thislog in logs)
{
using (StreamReader sr = new StreamReader(thislog))
{
Console.WriteLine("Checking log file {0} for expression '{1}' ...'n", thislog, args[0]);
String line = sr.ReadToEnd();
if (line.Contains(args[0]))
{
Match thisip = Regex.Match(line,ipreg);
thisip = thisip.NextMatch();
if (thisip.ToString() != args[1]) ipList.Add(thisip);
}
//for (Match m = Regex.Match(line,regx); m.Success; m = m.NextMatch()) ++count;
}
}
Console.WriteLine("'n'nRESULT:'n'nThe asset {0} was requested {1} times.", args[0], ipList.Count());
Console.WriteLine("Unique IPs:");
foreach (string s in ipList) Console.WriteLine(s);
}
catch (Exception e)
{
Console.WriteLine("Error occured: ");
Console.WriteLine(e.Message);
}
}
}
我得到的第一个编译器警告是在
行string ipreg = "^(?:[0-9]{1,3}'.){3}[0-9]{1,3}$";
因为它认为我试图转义.
字符。我怎样才能解决这个问题呢?
另外两个警告是关于我在iplist
上调用的方法。他们没有被认出来,我不知道为什么。我正在寻找的HashSet
的文档是https://msdn.microsoft.com/en-us/library/bb359438%28v=vs.110%29.aspx.
下面是一个基本的c#示例,使用正则表达式提取IP地址。这是假设所有日志文件的结构都是相同的。
string strRegex = @"(?<=-'s)([0-9]{1,3}'.){3}[0-9]{1,3}";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"2015-05-14 20:56:50 72.167.255.87 GET /images/email/site_05_12_2015/email-contactus-button.png - 80 - 50.48.46.50 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.2;+WOW64;+Trident/7.0;+Microsoft+Outlook+15.0.4711;+Microsoft+Outlook+15.0.4711;+ms-office;+MSOffice+15) 304 0 0 46";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
// Add your code here
}
}