As a small contribution to the project that has saved me and my users
from thousands of spam messages, I would like to offer a simple perl
script that I wrote that does some simple calculations.  I mainly
wrote it to see how effective Spamdyke was, what kind of errors
spammers were getting, and how much spam actually hit my secondary MX
server.  I hope someone out there finds it useful, or at least
interesting.  As with most contributed code, I do not take any
responsibility for (mis)use of my code.  I'm still learning perl so
there may be errors, so please review the code before executing it on
your system.  It works in my situation and gives me the results I was
looking for so hopefully it will do the same for you.

Output:

[EMAIL PROTECTED] root]# cat /var/log/qmail/smtpd/current |
/usr/local/etc/spam-statistics.pl
3775    DENIED_RBL_MATCH
3294    DENIED_RDNS_MISSING
1780    DENIED_RDNS_RESOLVE
932     DENIED_IP_IN_RDNS
425     ALLOWED
124     DENIED_SENDER_NO_MX
25      TIMEOUT
23      DENIED_OTHER
12      ERROR:
3       DENIED_EARLYTALKER

Allowed: 425
Denied : 9968
% Spam : 95.91%
[EMAIL PROTECTED] root]#


Code:

[EMAIL PROTECTED] root]# more /usr/local/etc/spam-statistics.pl
#!/usr/bin/perl -w
use diagnostics;
use strict;

# Usage:  # cat /var/log/qmail/smtpd/current | ./this_file

my %status = ();        # hash of status connections
my ($allow,$deny,$spampercentage);

while(<>){
        my $line = $_;
        if( /[A-Z].{5,5}/ ){
                my ($timestamp,$sdstatus) = split(/\s/ , $line);
                next if $sdstatus eq "CHKUSER";
                $status{$sdstatus}++;
        }

}

foreach my $stat (sort keys %status){
        if( $stat =~ m/ALLOWED/){
                $allow = $status{$stat};
        }
        else{
                $deny += $status{$stat};
        }
}

$spampercentage = sprintf("%.2f", ($deny/($allow+$deny)*100) );

foreach my $key (sort { $status{$b} <=> $status{$a} || $a cmp $b; }
keys %status){
    print "$status{$key}\t$key\n";
}
print "\n";
print "Allowed: $allow \n";
print "Denied : $deny \n";
print "% Spam : $spampercentage% \n";
[EMAIL PROTECTED] root]#

Respectfully contributed,
ken schweigert
-- 
Have a nice day ... unless you've made other plans.
_______________________________________________
spamdyke-users mailing list
spamdyke-users@spamdyke.org
http://www.spamdyke.org/mailman/listinfo/spamdyke-users

Reply via email to