Net::DNSServer::Base is a Perl module meant to be the base class for all resolving module handlers.
SYNOPSIS
Example Usage:
#!/usr/bin/perl -w -T
use strict;
use Net::DNSServer;
use Net::DNSServer::Cache;
use MyTestResolver;
my $resolver1 = new Net::DNSServer::Cache;
my $resolver2 = new MyTestResolver {dom => "test.com"};
run Net::DNSServer {
priority => [$resolver1,$resolver2],
}; # Never returns
Example MyTestResolver.pm Contents:
package MyTestResolver;
use strict;
use Exporter;
use Net::DNSServer::Base;
use Net::DNS::Packet;
use vars qw(@ISA);
@ISA = qw(Net::DNSServer::Base);
# resolve subroutine must be defined
sub resolve {
my $self = shift;
my $dns_packet = $self -> {question};
my ($question) = $dns_packet -> question();
if ($question -> qname eq $self->{dom} &&
$question -> qtype eq "A") {
my $response = bless \%{$dns_packet}, "Net::DNS::Packet"
|| die "Could not initialize response packet";
$response->push("answer",
[Net::DNS::RR->new
("$self->{dom} 1000 A 127.0.0.100")]);
$response->push("authority",
[Net::DNS::RR->new
("$self->{dom} 1000 NS ns1.$self->{dom}")]);
$response->push("additional",
[Net::DNS::RR->new
("ns1.$self->{dom} 1000 A 127.0.0.200")]);
my $response_header = $response->header;
$response_header->aa(1); # Make Authoritative
return $response;
}
return undef;
}
The main invoker program should call the new() method for each resolver to create an instance of each. Each resolver ISA Net::DNSServer::Base which must explicitly define a resolve() method. A reference to a list of these objects is passed to run() as the "priority" argument as demonstrated in the SYNOPSIS above. Net::DNSServer->run() never returns.
Product's homepage
Requirements:
· Perl