簡體   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