全部博文(1144)
分类: LINUX
2009-12-09 12:03:27
#!/usr/local/bin/perl # SORBS DNS Server v.2b # # the folks at SORBS () can take a break.. # this program forecasts all SORBS actions and is much more # comprehensive than an organization can ever be. # Guaranteed to block 100% of your spam. # due to amazing response, please note this program is for # entertainment purposes only. use strict; use Net::DNS::Nameserver; # blocking my $ns = Net::DNS::Nameserver->new( LocalAddr => '127.0.0.1', LocalPort => 53, ReplyHandler => \&reply_handler, Verbose => 0, ) || die "couldn't create nameserver object\n"; $ns->main_loop; sub reply_handler { my ($qname, $qclass, $qtype, $peerhost) = @_; my ($rcode, @ans, @auth, @add); if($qname =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.([a-z]{3,7}\.)?(rh|dn)sbl\.sorbs\.net\.?$/){ my ($a,$b,$c,$d) = ($4,$3,$2,$1); $rcode = 'NOERROR'; if($qtype eq 'A' || $qtype eq 'ANY' || $qtype eq 'TXT'){ my $ttl = 172800; if($qtype eq 'A' || $qtype eq 'ANY'){ my @a = (2..12); my $r = $a[rand(@a)]; my $rdata = "127.0.0.$r"; push @ans, Net::DNS::RR->new("$qname $ttl IN A $rdata"); } if($qtype eq 'TXT' || $qtype eq 'ANY'){ my $ip = "$a.$b.$c.$d"; push @ans, Net::DNS::RR->new("$qname $ttl IN TXT \"See: \""); } my @servers = qw/rbl1.oregonstate.edu rbl2.oregonstate.edu sorbs.bl.xs4all.nl sorbs-sql1.vix.com rbldns0.sorbs.net rbldns2.sorbs.net rbldns3.sorbs.net/; my $num = @servers; while($num > 0){ my $element = rand(@servers); $element =~ s/\..*//; my $server = $servers[$element]; splice @servers, $element, 1; push @auth, Net::DNS::RR->new("dnsbl.sorbs.net $ttl IN NS $server"); $num--; } push @add, Net::DNS::RR->new("sorbs.net $ttl IN TXT "); }else{ push @auth, Net::DNS::RR->new("dnsbl.sorbs.net. 86400 IN SOA rbldns0.sorbs.net dns.isux.com. $^T 120 120 604800 3600"); } }else{ $rcode = 'NXDOMAIN'; } return ($rcode, \@ans, \@auth, \@add, { aa => 1 }); }