#!/usr/bin/perl #COUNTER INITIALIZE $str = 1; $izc = 1; #処理用ファイルOPEN(入力/出力) open(IN,"< /var/log/iptables/iptables.log"); open(OUT,"> /var/log/iptables/iptables_count.log"); #IPアドレス格納及びカウント部分(LOOP1) while(){ $rawstr = $_; @trimstr = split(/ /, $rawstr); #IPアドレスが格納済みかどうか調べる(LOOP2) for ($iz=1; $iz<=$izc; $iz++) { #既に格納済みの場合の処理 if (@ipaddress[$iz] == @trimstr[5]){ #IPアドレスが何回出たかのカウント @ipcount[$iz] += 1; #新規格納しないフラグを立てておく $newcount_flag = 0; #LOOP1強制終了 $izcend = $izc; $izcend += 1; $iz = $izcend; } #当該IPが格納されていない場合、新規格納フラグを立てる else { $newcount_flag = 1;} } #新規格納処理 if ($newcount_flag == 1) { @ipaddress[$str] = @trimstr[5]; @ipcount[$str] = 1; #次の格納用に数値を増大させる。 $str += 1; } #LOOP2用数値格納 #$strを利用してLOOP2実行すると毎回新規格納されるのでそれを防ぐ処理 $izc = $str; $izc -= 1; } #出力用 for ( $i=1; $i<=$izc; $i++) { print OUT @ipaddress[$i]." ".@ipcount[$i]."\n"; } close(IN); close(OUT);