Blame demo/perldig

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
}