Check reverse and forward resolution for (IPv4) address
This commit is contained in:
parent
469ef14cb4
commit
3944b561fd
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/perl -w
|
||||
use strict;
|
||||
use Net::DNS;
|
||||
|
||||
sub usage {
|
||||
print STDERR "Usage: $0 ip-address\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
usage() unless (@ARGV == 1);
|
||||
|
||||
# generic resolver
|
||||
my $res0 = new Net::DNS::Resolver;
|
||||
|
||||
my $ipv4 = $ARGV[0];
|
||||
|
||||
my $rev_domain = join(".", reverse (split(/\./, $ipv4)), "in-addr", "arpa");
|
||||
print STDERR "$rev_domain\n";
|
||||
|
||||
my $reply = $res0->send($rev_domain, 'PTR');
|
||||
|
||||
if ($reply->answer) {
|
||||
for my $rr ($reply->answer) {
|
||||
if ($rr->type eq 'PTR') {
|
||||
print STDERR "\t", $rr->ptrdname, "\n";
|
||||
check_a($rr->ptrdname, $ipv4);
|
||||
}
|
||||
}
|
||||
} elsif ($reply->authority) {
|
||||
for my $rr ($reply->authority) {
|
||||
if ($rr->type eq 'SOA') {
|
||||
print STDERR "\t", $rr->mname, "\n";
|
||||
my $res1 = Net::DNS::Resolver->new();
|
||||
$res1->nameservers($rr->mname);
|
||||
my @zone = $res1->axfr($rev_domain);
|
||||
for my $rr (@zone) {
|
||||
if ($rr->type eq 'PTR') {
|
||||
print STDERR "\t\t", $rr->ptrdname, "\n";
|
||||
my $ipv4 = join(".", (reverse(split(/\./, $rr->name)))[2..5]);
|
||||
check_a($rr->ptrdname, $ipv4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$reply->print
|
||||
}
|
||||
|
||||
sub check_a {
|
||||
my ($domain_name, $a) = @_;
|
||||
# check that $domain_name resolves to $a
|
||||
|
||||
my $reply = $res0->send($domain_name, 'A');
|
||||
|
||||
if ($reply->answer) {
|
||||
for my $rr ($reply->answer) {
|
||||
if ($rr->type eq 'A') {
|
||||
print STDERR "\t\t", $rr->address, "\n";
|
||||
if ($rr->address eq $a) {
|
||||
print STDERR "\t\t\tfound\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print " $a $domain_name FWD_FAIL\n";
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue