App-DNS-Adblock
view release on metacpan or search on metacpan
lib/App/DNS/Adblock.pm view on Meta::CPAN
package App::DNS::Adblock;
{
$App::DNS::Adblock::VERSION = '0.015';
}
use strict;
use warnings;
use Net::DNS 0.74;
use Net::DNS::Nameserver;
use Sys::HostIP;
use Capture::Tiny qw(capture);
use LWP::Simple qw($ua getstore);
$ua->agent("");
use Mozilla::CA;
use POSIX qw( strftime );
use Carp;
use Data::Dumper;
use Storable qw(freeze thaw);
my $attributes;
sub new {
my ( $class, %self ) = @_;
my $self = { %self };
bless $self, $class;
$attributes = freeze($self);
$self->read_config();
my $host = Sys::HostIP->new;
my %devices = reverse %{ $host->interfaces };
my $hostip = $host->ip;
$self->{interface} = $devices{ $hostip };
$self->{host} = $hostip unless $self->{host};
$self->{port} = 53 unless $self->{port};
$self->{debug} = 0 unless $self->{debug};
my $ns = Net::DNS::Nameserver->new(
LocalAddr => $self->{host},
LocalPort => $self->{port},
ReplyHandler => sub { $self->reply_handler(@_); },
Verbose => ($self->{debug} > 1 ? 1 : 0)
) || die "couldn't create nameserver object: $!";
$self->{nameserver} = $ns;
my $res = Net::DNS::Resolver->new(
nameservers => [ @{ $self->{forwarders} } ],
port => $self->{forwarders_port} || 53,
recurse => 1,
debug => ($self->{debug} > 2 ? 1 : 0),
);
$self->{resolver} = $res;
return $self;
}
sub run {
my ( $self ) = shift;
$self->set_local_dns() if $self->{setdns};
$SIG{KILL} = sub { $self->signal_handler(@_) };
$SIG{QUIT} = sub { $self->signal_handler(@_) };
$SIG{TERM} = sub { $self->signal_handler(@_) };
$SIG{INT} = sub { $self->signal_handler(@_) };
$SIG{HUP} = sub { $self->read_config() };
$self->log("nameserver accessible locally @ $self->{host}", 1);
$self->{nameserver}->main_loop;
};
sub set_local_dns {
( run in 3.372 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )