NAME
Net::DNS - Perl interface to the DNS resolver
DESCRIPTION
Net::DNS is a collection of Perl modules to interface with the Domain Name System (DNS) resolver. It allows the programmer to perform queries that are beyond the capabilities of gethostbyname
and gethostbyaddr
.
Resolver Objects
A resolver object is an instance of the Net::DNS::Resolver
class. A program can have multiple resolver objects, each maintaining its own state information such as the nameservers to be queried, whether recursion is desired, etc.
Packet Objects
Net::DNS::Resolver
queries return Net::DNS::Packet
objects. Packet objects have five sections:
The header section, a
Net::DNS::Header
object.The question section, a list of
Net::DNS::Question
objects.The answer section, a list of
Net::DNS::RR
objects.The authority section, a list of
Net::DNS::RR
objects.The additional section, a list of
Net::DNS::RR
objects.
Header Objects
Net::DNS::Header
objects represent the header section of a DNS packet.
Question Objects
Net::DNS::Question
objects represent the query section of a DNS packet.
RR Objects
Net::DNS::RR
is the base class for DNS resource record (RR) objects in the answer, authority, and additional sections of a DNS packet.
METHODS
version
print Net::DNS->version;
Returns the version of Net::DNS.
See the manual pages listed above for class-specific methods.
EXAMPLES
The following examples show how to use the DNS modules. Please note that most of the examples are simple and expect a successful query and certain record types. See the demo scripts included with the source code for examples of more robust code.
#
# Look up a host's addresses.
#
use Net::DNS;
$res = new Net::DNS::Resolver;
$query = $res->search("foo.bar.com");
foreach $record ($query->answer) {
print $record->address, "\n";
}
#
# Find the nameservers for a domain.
#
use Net::DNS;
$res = new Net::DNS::Resolver;
$query = $res->query("foo.com", "NS");
foreach $nameserver ($query->answer) {
print $nameserver->nsdname, "\n";
}
#
# Find the MX records for a domain.
#
use Net::DNS;
$res = new Net::DNS::Resolver;
$query = $res->query("foo.com", "MX");
foreach $mxhost ($query->answer) {
print $mxhost->preference, " ", $mxhost->exchange, "\n";
}
#
# Print a domain's SOA record in zone file format.
#
use Net::DNS;
$res = new Net::DNS::Resolver;
$query = $res->query("foo.com", "SOA");
($query->answer)[0]->print;
#
# Perform a zone transfer and print all the records.
#
use Net::DNS;
$res = new Net::DNS::Resolver;
$res->nameservers("ns.foo.com");
@zone = $res->axfr("foo.com");
foreach $rr (@zone) {
$rr->print;
}
#
# Send a background query and do some other processing while
# waiting for the answer.
#
use Net::DNS;
$res = new Net::DNS::Resolver;
$socket = $res->bgsend("foo.bar.com");
until ($res->bgisready($socket)) {
# do some work here
# ...and some more here
}
$packet = $res->bgread($socket);
$packet->print;
#
# Send a background query and use select() to determine when the answer
# has arrived.
#
use Net::DNS;
$res = new Net::DNS::Resolver;
$socket = $res->bgsend("foo.bar.com");
$rin = "";
vec($rin, $socket->fileno, 1) = 1;
# Add more descriptors to $rin if desired.
$timeout = 5;
$nfound = select($rout=$rin, undef, undef, $timeout);
if ($nfound < 1) {
print "timed out after $timeout seconds\n";
}
elsif (vec($rout, $socket->fileno, 1) == 1) {
$packet = $res->bgread($socket);
$packet->print;
}
else {
# Check for the other descriptors.
}
COPYRIGHT
Copyright (c) 1997 Michael Fuhr. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
SEE ALSO
perl(1), Net::DNS::Resolver, Net::DNS::Packet, Net::DNS::Header, Net::DNS::Question, Net::DNS::RR, RFC 1035