diff options
Diffstat (limited to 'scripts/dnsspam.pl')
| -rw-r--r-- | scripts/dnsspam.pl | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/scripts/dnsspam.pl b/scripts/dnsspam.pl new file mode 100644 index 0000000..4e0cdcf --- /dev/null +++ b/scripts/dnsspam.pl @@ -0,0 +1,170 @@ +use Irssi; +use strict; +use vars qw($VERSION %IRSSI); +use integer; + +### REQUIREMENTS +# +# You need spamcalc from http://spamcalc.net/ installed on your system in +# the perl path or in ~/.irssi/scripts/spamcalc +# +# The data directory (below) should be set to the spamcalc dir +# +# It should work afterwards +# + +require spamcalc::SpamCalc; + +my $irssidir = Irssi::get_irssi_dir(); +my $datafilesdir = $irssidir . "/scripts/spamcalc/data"; + +my($debug) = 0; +my $calc; + +################################################################################ + +$VERSION = "1.0.0"; +%IRSSI = ( + authors => "Pieter-Bas IJdens", + contact => "irssi-scripts\@nospam.mi4.org.uk", + name => "dnsspam", + description => "Checks for DNS Spam on JOIN", + license => "GPLv2 or later", + url => "http://pieter-bas.ijdens.com/irssi/", + changed => "2005-03-10" +); + +################################################################################ + +sub register_messages +{ + Irssi::theme_register([ + 'sc_spam_certain', + '%RSPAMCALC:%n {channick_hilight $0} from {hilight $1}'. + ' spam level: {hilight $2} on {channel $3}', + 'sc_spam_probable', + '%YSPAMCALC:%n {channick_hilight $0} from {hilight $1}'. + ' spam level: {hilight $2} on {channel $3}', + 'sc_spam_clean', + '%GSPAMCALC:%n {channick_hilight $0} from {hilight $1}'. + ' spam level: {hilight $2} on {channel $3}' + ]); +} + +################################################################################ + +sub run_spamcalc +{ + my($host) = @_; + + # Don't do anything for unresolved ipv6 ips + if ($host =~ /:/) { + return 0; + } + + # Don't do anything for unresolved ipv4 ips + if ($host =~ /[0-9]$/) { + return 0; + } + + my $score = $calc->get_host_score($host); + + return $score; +} + +################################################################################ + +sub event_join +{ + my ($server, $channame, $nick, $host) = @_; + + return if $server->{chat_type} ne "IRC"; + + my $chanrec = $server->channel_find($channame); + + if ($chanrec) + { + my($username, $hostname) = split('@', $host); + + my ($level) = run_spamcalc($hostname); + + if ($level > 100) + { + $chanrec->printformat( + MSGLEVEL_JOINS, + 'sc_spam_certain', + $nick, + "*!*@". $hostname, + $level, + $channame + ); + } + elsif ($level > 50) + { + $chanrec->printformat( + MSGLEVEL_JOINS, + 'sc_spam_probable', + $nick, + "*!*@". $hostname, + $level, + $channame + ); + } + elsif ($debug > 0) + { + $chanrec->printformat( + MSGLEVEL_JOINS, + 'sc_spam_clean', + $nick, + "*!*@". $hostname, + $level, + $channame + ); + } + } + else + { + Irssi::print("%RDNSSPAM:%n Chanrec not found for $channame%N"); + } + + return; +} + +################################################################################ + +sub event_load_settings +{ + return; +} + +################################################################################ + +sub cmd_spamcalc +{ + my ($data, $server, $item) = @_; + my ($level); + + $level = run_spamcalc($data); + + Irssi::print("SPAMCALC: $level ($data)"); +} + +################################################################################ + +$calc = SpamCalc->new(); +$calc->load_datafiles($datafilesdir); + +################################################################################ + +register_messages(); + +################################################################################ + +Irssi::signal_add({ + 'message join' => \&event_join, + 'setup changed' => \&event_load_settings +}); + +################################################################################ + +Irssi::command_bind("sc", \&cmd_spamcalc); |
