use Net::DNS;
The programmer should be somewhat familiar with the format of a DNS packet and its various sections. See RFC 1035 or DNS and BIND (Albitz & Liu) for details.
Do not assume that RR objects will be of the type requested. The type of an RR object must be checked before calling any methods.
print Net::DNS->version, "\n";
Returns the version of Net::DNS.
# Use a default resolver -- can not get an error string this way. use Net::DNS; my @mx = mx("example.com"); # Use your own resolver object. use Net::DNS; my $res = Net::DNS::Resolver->new; my @mx = mx($res, "example.com");
Returns a list of Net::DNS::RR::MX objects representing the MX records for the specified name. The list will be sorted by preference. Returns an empty list if the query failed or no MX record was found.
This method does not look up A records; it only performs MX queries.
See ``EXAMPLES'' for a more complete example.
# RRset exists (value-independent) $update->push(pre => yxrrset("host.example.com A"));
Meaning: At least one RR with the specified name and type must exist.
# RRset exists (value-dependent) $packet->push(pre => yxrrset("host.example.com A 10.1.2.3"));
Meaning: At least one RR with the specified name and type must exist and must have matching data.
Returns a "Net::DNS::RR" object or "undef" if the object could not be created.
$packet->push(pre => nxrrset("host.example.com A"));
Meaning: No RRs with the specified name and type can exist.
Returns a "Net::DNS::RR" object or "undef" if the object could not be created.
$packet->push(pre => yxdomain("host.example.com"));
Meaning: At least one RR with the specified name must exist.
Returns a "Net::DNS::RR" object or "undef" if the object could not be created.
$packet->push(pre => nxdomain("host.example.com"));
Meaning: No RR with the specified name can exist.
Returns a "Net::DNS::RR" object or "undef" if the object could not be created.
$packet->push(update => rr_add("host.example.com A 10.1.2.3"));
Meaning: Add this RR to the zone.
RR objects created by this method should be added to the ``update'' section of a dynamic update packet. The TTL defaults to 86400 seconds (24 hours) if not specified.
Returns a "Net::DNS::RR" object or "undef" if the object could not be created.
# Delete an RRset. $packet->push(update => rr_del("host.example.com A"));
Meaning: Delete all RRs having the specified name and type.
# Delete all RRsets. $packet->push(update => rr_del("host.example.com"));
Meaning: Delete all RRs having the specified name.
# Delete an RR. $packet->push(update => rr_del("host.example.com A 10.1.2.3"));
Meaning: Delete all RRs having the specified name, type, and data.
RR objects created by this method should be added to the ``update'' section of a dynamic update packet.
Returns a "Net::DNS::RR" object or "undef" if the object could not be created.
$successor = $soa->serial( SEQUENTIAL );
The existing serial number is incremented modulo 2**32.
$successor = $soa->serial( UNIXTIME );
The Unix time scale will be used as the basis for zone serial numbering. The serial number will be incremented if the time elapsed since the previous update is less than one second.
$successor = $soa->serial( YYYYMMDDxx );
The 32 bit value returned by the auxiliary YYYYMMDDxx() function will be used as the base for the date-coded zone serial number. Serial number increments must be limited to 100 per day for the date information to remain useful.
use Net::DNS qw(rrsort); @sorted = rrsort( $rrtype, $attribute, @rr_array );
rrsort() selects all RRs from the input array that are of the type defined by the first argument. Those RRs are sorted based on the attribute that is specified as second argument.
There are a number of RRs for which the sorting function is defined in the code. The function can be overidden using the set_rrsort_func() method.
For instance:
@prioritysorted = rrsort( "SRV", "priority", @rr_array );
returns the SRV records sorted from lowest to highest priority and for equal priorities from highest to lowest weight.
If the function does not exist then a numerical sort on the attribute value is performed.
@portsorted = rrsort( "SRV", "port", @rr_array );
If the attribute is not defined then either the default_sort() function or ``canonical sorting'' (as defined by DNSSEC) will be used.
rrsort() returns a sorted array containing only elements of the specified RR type or undef.
rrsort() returns undef when arguments are incorrect.
See the "Net::DNS::Update" manual page for an example of performing dynamic updates.
use Net::DNS; my $res = Net::DNS::Resolver->new; my $reply = $res->search("host.example.com"); if ($reply) { foreach my $rr ($reply->answer) { next unless $rr->type eq "A"; print $rr->address, "\n"; } } else { warn "query failed: ", $res->errorstring, "\n"; }
use Net::DNS; my $res = Net::DNS::Resolver->new; my $reply = $res->query("example.com", "NS"); if ($reply) { foreach $rr (grep { $_->type eq 'NS' } $reply->answer) { print $rr->nsdname, "\n"; } } else { warn "query failed: ", $res->errorstring, "\n"; }
use Net::DNS; my $name = "example.com"; my $res = Net::DNS::Resolver->new; my @mx = mx($res, $name); if (@mx) { foreach $rr (@mx) { print $rr->preference, " ", $rr->exchange, "\n"; } } else { warn "Can not find MX records for $name: ", $res->errorstring, "\n"; }
use Net::DNS; my $res = Net::DNS::Resolver->new; my $reply = $res->query("example.com", "SOA"); if ($reply) { ($reply->answer)[0]->print; } else { print "query failed: ", $res->errorstring, "\n"; }
use Net::DNS; my $res = Net::DNS::Resolver->new; $res->nameservers("ns.example.com"); my @zone = $res->axfr("example.com"); foreach $rr (@zone) { $rr->print; }
use Net::DNS; my $res = Net::DNS::Resolver->new; my $socket = $res->bgsend("host.example.com"); until ($res->bgisready($socket)) { # do some work here while waiting for the answer # ...and some more here } my $packet = $res->bgread($socket); $packet->print;
use Net::DNS; use IO::Select; my $timeout = 5; my $res = Net::DNS::Resolver->new; my $bgsock = $res->bgsend("host.example.com"); my $sel = IO::Select->new($bgsock); # Add more sockets to $sel if desired. my @ready = $sel->can_read($timeout); if (@ready) { foreach my $sock (@ready) { if ($sock == $bgsock) { my $packet = $res->bgread($bgsock); $packet->print; $bgsock = undef; } # Check for the other sockets. $sel->remove($sock); $sock = undef; } } else { warn "timed out after $timeout seconds\n"; }
For other items to be fixed, or if you discover a bug in this distribution please use the CPAN bug reporting system.
Portions Copyright (c)2002-2004 Chris Reinhardt.
Portions Copyright (c)2005 Olaf Kolkman (RIPE NCC)
Portions Copyright (c)2006 Olaf Kolkman (NLnet Labs)
Portions Copyright (c)2014 Dick Franks
Between 2002 and 2004 Net::DNS was maintained by Chris Reinhardt.
Net::DNS was created by Michael Fuhr.
For more information see:
http://www.net-dns.org/
Stay tuned and syndicate:
http://www.net-dns.org/blog/