#!/usr/bin/perl # użycie: show-reason N # gdzie N jest liczbą (patrz niżej punkt 2) # # wydruk składa się z 2 części # 1) zawiera posortowaną listę IPków ze statystyką ilości odrzuconych przesyłek # 2) to lista ostatnich 60 (można podać jako parametr skryptu) odrzuconych przesyłek. $n=$ARGV[0]?$ARGV[0]:60; $i=0; open(plik,'/var/log/mail/info'); while () { if ( /^(.{15}).+NOQUEUE.+\s([a-zA-Z0-9\.-]+)\[(\d+\.\d+\.\d+\.\d+)\].+(55[0-9]).+((Client|Helo|Sender|Recipient)[^;]+)(\[\d+\.\d+\.\d+\.\d+\])?[!;,]/ ) { $ipek=$3; $ip{$3}++; $reason{$3}=$5; $host{$3}=$2; $reply{$5}++; $x{$i}=sprintf "%s %s %s %s %s\n",$1,$2,$3,$4,$5; $i++; if ($i>=$n) { $i=0; } } if ( /^(.{15}).+reject: (body|header).+from ([a-zA-Z0-9\.-]+)\[(\d+\.\d+\.\d+\.\d+)\]?[!;,]/ ) { $ipek=$4; $ip{$ipek}++; $reason{$ipek}=$2; $host{$ipek}=$3; $x{$i}=sprintf "%s %s %s %s\n",$1,$2,$3,$4; $i++; if ($i>=$n) { $i=0; } } } foreach $key (sort keys %reason) { $x=sprintf "%47s %3s %-85.85s\n",substr($host{$key}." ".$key,-47),$ip{$key},$reason{$key}; print $x; } printf "\n\n"; for ($j=0;$j<$n;$j++) { print $x{$i}; $i++; if ($i>=$n) { $i=0; } }