#!/usr/bin/perl
# -*- perl -*-
#
# $Id: rbllookup,v 1.1 1999/08/14 16:16:15 cm Exp $
#
# look up IP address or hostname in the MAPS RBL, ORBS, or similiar DNS-
# based spamblocking service.
#

use Net::DNS;
use Socket;
use Getopt::Std;

%srv = ( "MAPS RBL" => "rbl.maps.vix.com.",
	 "ORBS" => "relays.orbs.org.",
	 "imrss" => "mr-out.imrss.org.",
	 "imrss DSSL" => "dssl.imrss.org.",
	 "MAPS DUL" => "dul.maps.vix.com.",
	 "radparker RSS" => "relays.radparker.com.");

$res = new Net::DNS::Resolver;

$usage = "$0 [-d service] [-D domain] [-l] [-v] hostname | address\n";

&getopts("d:D:lv") || die "$usage";

if($opt_d) {
    die "-d and -D don't go together\n" if $opt_D;
    $srv{$opt_d} || die "No such service: \"$opt_d\"\n";
    $domain = $srv{$opt_d};
}

if($opt_D) {
    $domain = $opt_D;
}

if($opt_l) {
    foreach (sort keys %srv) {
	print "$_\t$srv{$_}\n";
    }
    exit;
}

$verbose = $opt_v;
    

while($name = shift) {
    ($addr = inet_aton($name)) || ($addr = gethostbyname($name)) ||
	die "bad name: \"$name\"\n";

    $rev = join(".", reverse(split(/\./, inet_ntoa($addr))));

    foreach $srv ($domain ? $domain : keys %srv) {
	$d = ($domain || $srv{$srv});

	print "querying $rev.$d ...\n" if $verbose;
	$query = $res->query("$rev.$d", "TXT");
    
	if($query) {
	    foreach $rr ($query->answer) {
		$rr->print;
	    }
	} else {
	    print "No match.\n";
	}
    }
}

__END__
#
# $Log: rbllookup,v $
# Revision 1.1  1999/08/14 16:16:15  cm
# Initial revision
#
# Revision 1.2  1999/06/29 21:30:07  cm
# some fixes, tnx to andreas pommer...
#
# Revision 1.1  1999/06/29 21:28:18  cm
# Initial revision
#
#
