我的程序中从服务器日志文件中读取IP地址的错误

时间:2015-05-15 22:52:26

标签: c# regex

我是C#的新手并且有一个问题。

我的服务器的日志文件包含

等行
  

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 +(兼容; + MSIE + 9.0; + Windows + NT + 6.2; + WOW64; + Trident / 7.0; + Microsoft + Outlook + 15.0.4711; + Microsoft + Outlook + 15.0.4711 ; + MS-办公室; +的MSOffice + 15)   304 0 0 46

我的程序旨在收集请求某项资产的唯一IP地址。在上面一行中,如果程序正在搜索dynamic sql,我会提取"50.48.46.50"

这是:

"email-contactus-button.png"

我得到的第一个编译器警告就行了

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查看的文档是https://msdn.microsoft.com/en-us/library/bb359438%28v=vs.110%29.aspx

1 个答案:

答案 0 :(得分:0)

这是一个用于提取该IP地址的正则表达式的基本C#示例。这假设所有日志文件的结构都是相同的。

String service = "http://dbpedia.org/sparql";