Parse::DNS::Zone parses a Zonefile, defining a zone in a domain name hierarchy. The module then offers an object oriented way of getting values out of the zone.
Validation of RRs or RR-names are out of the scope of this module.
Consider the following zonefile, let's call it db.example.org
:
@ 3600 IN SOA ns1.example.net. hostmaster.example.net. (
2020121120
7200
3600
1209600
3600
)
86400 IN NS ns1.example.net.
86400 IN NS ns2.example.net.
86400 IN A 192.0.2.34
86400 IN MX 0 .
www 86400 IN A 192.0.2.34
And imagine we would want to programmatically extract information from that. Maybe this module can help?
use 5.020;
use Parse::DNS::Zone;
my $pdz = Parse::DNS::Zone->new(
zonefile=>'db.example.org',
origin=>'example.org.',
);
# Get the A record of www.example.org:
say "A ", $pdz->get_rdata(name=>'www', rr=>'A');
# Get example.org's MX record:
say "MX ", $pdz->get_rdata(name=>'@', rr=>'MX');
# Get example.org's NS records:
say "NS ", join(", ", $pdz->get_rdata(name=>'@', rr=>'NS'));
# or only the first:
say "NS ", scalar $pdz->get_rdata(name=>'@', rr=>'NS');
# or only the second (counting from 0):
say "NS ", scalar $pdz->get_rdata(name=>'@', rr=>'NS', n=>1);
# Getting SOA values
say "mname=", $pdz->get_mname();
say "rname=", $pdz->get_rname();
say "serial=", $pdz->get_serial();
perl Makefile.PL
make
make test
make install
(Note that the last step, make install
, may require you to have
root permissions. But avoid running it as root unless you trust
me for some weird reason. There are various solutions, but one of
the simpler is local::lib
, this sets up a user local perl
module install path in your home directory.)
This module is tested against simple Bind9 and nsd3 zones, please report success or failures on other nameds, with similar RFC1034 format. Patches/suggestions to the test suite for edge cases are especially appreciated, regardless if the module already handles it or not.
A design goal of this module is to have minimum knowledge of the RRTYPEs available, so that it does not need to kept up to date with further extensions of the DNS protocol.
The module is not designed to handle very large zones.
Latest stable version is available on CPAN. Current development version is available on https://github.com/olof/Parse-DNS-Zone.
Up until version 0.51
, the version numbers should be interpreted
as floating point numbers, and 0.5 is thus higher than 0.42. This
is true for later versions as well, but I will make sure the
ordering is correct also for lexical sorting (by appending
zeroes). For instance, 0.51 was followed by 0.60, not 0.6.
Have fun with DNS.