My perl based subroutine that does Net::DNS based checking follows,
comments please...

sub dns_rev_resolve()
{ # Check for a PTR record and try to match it up with an A query...

    ($ipsrc)=@_;
    my $target_IP = join('.', reverse split(/\./,
$ipsrc)).".in-addr.arpa";

    my $res = Net::DNS::Resolver->new;
    my $query = $res->query("$target_IP", "PTR");

    if ( $query ) # Okay, there is a PTR record...
    {
         foreach my $rr ($query->answer)
         {
            next unless $rr->type eq "PTR";
            $rev_addr = $rr->rdatastr;
         }

         my $res2 = Net::DNS::Resolver->new;
         my $forward_query = $res2->query("$rev_addr");

         if ( $forward_query ) 
         # Okay, the PTR record forward resolved...
         {
              foreach my $rr2 ($forward_query->answer)
              {
                 next unless $rr2->type eq "A";
                 $forward_addr = $rr2->address;
              }
         }
    }
    else # NO PTR record will be treated as a match for now...
    {
         return "YES";
    }


    if ( $forward_addr =~ /$ipsrc/ ) 
    # Check for a real match in this case...
    {
         return "YES";
    }
    else
    {
         return "NO";
    }

} # END of dns_rev_resolve...


_______________________________________________
PLUG mailing list
PLUG@lists.pdxlinux.org
http://lists.pdxlinux.org/mailman/listinfo/plug

Reply via email to