my $DATE = `date +%Y%m%d`;
my $MATCHIP = '(?:::(?:f{4}:)?)?(*1)';
my $MATCHHOST = '[0-9a-zA-Z\-]+.?[0-9a-zA-Z\-]+|[0-9a-zA-Z\-]?\.?[0-9a-zA-Z\-]+';
if ( @ARGV == 0 ) {
$ARGV[0] = 0;
}
open( DNSRR, "/home/user/dnsrr" );
if ( $ARGV[0] eq "-f" ) {
&ffile;
} elsif ( $ARGV[0] eq "-r" ) {
&rfile;
} elsif ( $ARGV[0] eq "-c" ){
print "\nreverse lookup start\n\n";
while (<DNSRR>) {
chomp;
if (/.*$MATCHIP.*/) {
s/($MATCHIP)//;
my $IP = $1;
my $DIG = `/usr/sbin/dig -x $IP ptr|grep 'IN PTR'`;
if ($DIG) {
print $DIG;
} else {
print "########$IP is no match!!########\n";
}
}
}
close( DNSRR );
open( DNSRR, "/home/user/dnsrr" );
print "\nforward lookup start\n\n";
while (<DNSRR>) {
chomp;
if (/.*$MATCHIP.*/) {
s/($MATCHIP)//;
/($MATCHHOST)/;
my $HOST = $1;
$HOST .= "\.example\.com\.";
my $DIG = `/usr/sbin/dig $HOST a|grep $HOST|grep 'IN A'`;
if ($DIG) {
print $DIG;
} else {
print "########$HOST is no match!!########\n";
}
}
}
} else {
&ffile;
close( DNSRR );
open(DNSRR, "/home/user/dnsrr" );
&rfile;
}
close( DNSRR );
sub ffile {
while (<DNSRR>) {
chomp;
if (/.*$MATCHIP.*/) {
s/($MATCHIP)//;
my $IP = $1;
/($MATCHHOST)/;
my $HOST = $1;
if (length( $HOST ) <= 7) {
print "$HOST\t\t\tIN\tA\t$IP\t\;$DATE";
} elsif (length( $HOST ) <= 15) {
print "$HOST\t\tIN\tA\t$IP\t\;$DATE";
} else {
print "$HOST\tIN\tA\t$IP\t\;$DATE";
}
}
}
}
sub rfile {
while (<DNSRR>) {
chomp;
if (/.*$MATCHIP.*/) {
s/($MATCHIP)//;
my $IP = $1;
my @OCTET = split /\./,$IP;
s/\s?//g;
/($MATCHHOST)/;
my $HOST = $1;
$HOST .= "\.example\.com\.";
if (length( $HOST ) <= 23) {
print "$OCTET[3]\tIN\tPTR\t$HOST\t\t\t\t\t\;$DATE";
} elsif (length( $HOST ) <= 31) {
print "$OCTET[3]\tIN\tPTR\t$HOST\t\t\t\t\;$DATE";
} elsif (length( $HOST ) <= 39) {
print "$OCTET[3]\tIN\tPTR\t$HOST\t\t\t\;$DATE";
} elsif (length( $HOST ) <= 47) {
print "$OCTET[3]\tIN\tPTR\t$HOST\t\t\;$DATE";
} else {
print "$OCTET[3]\tIN\tPTR\t$HOST\t\;$DATE";
}
}
}
}
*1 ?:0*(?:2[0-4]\d|25[0-5]|[01]?\d\d|\d)\.){3}0*(?:2[0-4]\d|25[0-5]|[01]?\d\d|\d