#!/usr/bin/perl use strict; use warnings; use Net::DNS; our $VERSION="0.001000"; our $ID='$Id: rbl,v 1.1 2003/08/10 10:13:51 nemesis Exp $'; if (scalar(@ARGV)!=3) { die "Usage: $0 DNS_ADDR RBL_DOMAIN IP_TO_CHECK\n"; } my ($server,$domain,$ip)=@ARGV; my $res; if (!defined($res=Net::DNS::Resolver->new( nameservers => [$server], recurse => 1, #debug => 1, retry => 1, tcp_timeout => 10, udp_timeout => 10, ))) { die "Cannot create my rbl resolver"; } my $name=join(".",reverse(split(/\./,$ip))).".".$domain; my $query = $res->send($name,'A'); # Did we get an answer? if (defined($query)) { my @addr = grep { $_->type eq 'A' } $query->answer; my $addr=$addr[0] ? $addr[0]->address : undef; # Is there a addr for this host? if (defined($addr) && $addr eq "127.0.0.2") { #warn "$ip: SPAMMER\n"; exit(0); # matches rbl! } else { #warn "$ip: Clean?\n"; exit(1); # does not match rbl } } else { my $reason = $res->errorstring; if ($reason eq "NXDOMAIN") { #warn "$ip: Clean\n"; } else { #warn "$ip: server failed: $reason\n"; } exit(1); # does not match rbl }