|
Packit Service |
f6e53a |
#!/usr/local/bin/perl -w
|
|
Packit Service |
f6e53a |
# $Id: perldig 264 2005-04-06 09:16:15Z olaf $
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
=head1 NAME
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
perldig - Perl script to perform DNS queries
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
=head1 SYNOPSIS
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
C<perldig> [ C<@>I<nameserver> ] I<name> [ I<type> [ I<class> ] ]
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
=head1 DESCRIPTION
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
Performs a DNS query on the given name. The record type
|
|
Packit Service |
f6e53a |
and class can also be specified; if left blank they default
|
|
Packit Service |
f6e53a |
to A and IN.
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
=head1 AUTHOR
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
Michael Fuhr <mike@fuhr.org>
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
=head1 SEE ALSO
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
L<perl(1)>, L<axfr>, L<check_soa>, L<check_zone>, L<mresolv>, L<mx>,
|
|
Packit Service |
f6e53a |
L<Net::DNS>
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
=cut
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use strict;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use File::Basename;
|
|
Packit Service |
f6e53a |
use Net::DNS;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
my $res = Net::DNS::Resolver->new;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
if (@ARGV && ($ARGV[0] =~ /^@/)) {
|
|
Packit Service |
f6e53a |
my $nameserver = shift;
|
|
Packit Service |
f6e53a |
$nameserver =~ s/^@//;
|
|
Packit Service |
f6e53a |
$res->nameservers($nameserver);
|
|
Packit Service |
f6e53a |
}
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
die "Usage: ", basename($0), " [ \@nameserver ] name [ type [ class ] ]\n"
|
|
Packit Service |
f6e53a |
unless (@ARGV >= 1) && (@ARGV <= 3);
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
my ($name, $type, $class) = @ARGV;
|
|
Packit Service |
f6e53a |
$type ||= "A";
|
|
Packit Service |
f6e53a |
$class ||= "IN";
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
if (uc($type) eq "AXFR") {
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
my @rrs = $res->axfr($name, $class);
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
if (@rrs) {
|
|
Packit Service |
f6e53a |
foreach my $rr (@rrs) {
|
|
Packit Service |
f6e53a |
$rr->print;
|
|
Packit Service |
f6e53a |
}
|
|
Packit Service |
f6e53a |
} else {
|
|
Packit Service |
f6e53a |
die "zone transfer failed: ", $res->errorstring, "\n";
|
|
Packit Service |
f6e53a |
}
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
} else {
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
my $answer = $res->send($name, $type, $class);
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
if ($answer) {
|
|
Packit Service |
f6e53a |
$answer->print;
|
|
Packit Service |
f6e53a |
} else {
|
|
Packit Service |
f6e53a |
die "query failed: ", $res->errorstring, "\n";
|
|
Packit Service |
f6e53a |
}
|
|
Packit Service |
f6e53a |
}
|