繁体   English   中英

如何从Apache服务器日志中解析IP地址?

[英]How to parse IP addresses from Apache Server Log?

我必须从apache日志中找到常见的IP地址。

12.1.12.1 9000 127.0.0.1-坦率[10 / Oct / 2000:13:55:36 -0700]“ GET /apache_pb.gif HTTP / 1.0” 200 2326“ http://www.example.com/start.html “” Mozilla / 4.08 [zh](Win98; I; Nav)“

12.1.12.1 9000 192.145.1.23-坦率[10 / Oct / 2000:13:55:36 -0700]“ GET /apache_pb.gif HTTP / 1.0” 200 2326“ http://www.example.com/start.html “” Mozilla / 4.08 [zh](Win98; I; Nav)“

如何使用Java中的正则表达式提取IP地址(即每行中的第3个字)? 另外,我还必须从中找到最常见的IP地址,以查找机械手访问权限。 该日志包含数百万行,因此regexp可能适用于此。

如果您确定它始终是第三个单词(如您所说),那么也许根本不需要正则表达式。 您可以通过简单的拆分来取第三个单词。

但是,已经有人问过: 正则表达式匹配DNS主机名还是IP地址? ...

正如其他人指出的那样,您不需要正则表达式。 您也不应该使用String.split,因为它也使用了正则表达式。 您可以改用StringTokenizer。 假设您使用BufferedReader br读取每一行:

String line = br.readLine();
StringTokenizer st = new StringTokenizer(line, " ");
st.nextToken();
st.nextToken();
String ip = st.nextToken();

这是一种解决方案:

String str1 = "12.1.12.1 9000 127.0.0.1 - frank [10/Oct/2000:13:55:36"
            + " -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326 "
            + "\"http://www.example.com/start.html\" \"Mozilla/4.08 "
            + "[en] (Win98; I ;Nav)\"";

String str2 = "12.1.12.1 9000 192.145.1.23 - frank [10/Oct/2000:13:55"
            + ":36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326 "
            + "\"http://www.example.com/start.html\" \"Mozilla/4.08 "
            + "[en] (Win98; I ;Nav)\"";

Pattern p = Pattern.compile("\\S+\\s+\\S+\\s+(\\S+).*");

Matcher m = p.matcher(str1);
if (m.matches())
    System.out.println(m.group(1));

m = p.matcher(str2);
if (m.matches())
    System.out.println(m.group(1));

正则表达式细分:

  • \\S+ ,一个或多个非空白字符。
  • \\s+ ,一个或多个空格字符。
  • ...
  • (\\\\S+)组1中捕获的一个或多个非空白字符。

访问日志文件的格式始终取决于配置文件设置。 最好不要假设IP地址是第三个“单词”,而是读取当前配置文件并根据LogFormat条目解析访问日志文件。

Apache httpd根据httpd.conf和Tomcat对server.xml进行操作 server.xml是一个XML文件,它使解析AccessLogValve成为标准过程。

这需要做更多的工作,但是如果需要保留,它将使您的应用程序更灵活。 我认为,对于这种方法,字符串方法将比正则表达式更易于使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM