summaryrefslogtreecommitdiffstats
path: root/scripts/dnsspam.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/dnsspam.pl')
-rw-r--r--scripts/dnsspam.pl170
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);