The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Net::DNS::Paranoid - paranoid dns resolver

SYNOPSIS

my $dns = Net::DNS::Paranoid->new();
$dns->blocked_hosts([
    'mixi.jp',
    qr{\.dev\.example\.com$},
]);
$dns->whitelisted_hosts([
    'twitter.com',
]);
my ($addrs, $errmsg) = $dns->resolve('mixi.jp');
if ($addrs) {
    print @$addrs, $/;
} else {
    die $errmsg;
}

DESCRIPTION

This is a wrapper module for Net::DNS.

This module detects IP address / host names for internal servers.

METHODS

my $dns = Net::DNS::Paranoid->new(%args)

Create new instance with following parameters:

timeout

DNS lookup timeout in secs.

Default: 15 sec.

blocked_hosts: ArrayRef[Str|RegExp|Code]

List of blocked hosts in string, regexp or coderef.

whitelisted_hosts: ArrayRef[Str|RegExp|Code]

List of white listed hosts in string, regexp or coderef.

resolver: Net::DNS::Resolver

DNS resolver object, have same interface as Net::DNS::Resolver.

my ($addrs, $err) = $dns->resolve($name[, $start_time[, $timeout]])

Resolve a host name using DNS. If it's bad host, then returns $addrs as undef, and $err is the reason in string.

$start_time is a time to start your operation. Timeout value was counted from it. Default value is time().

$timeout is a timeout value. Default value is $dns-timeout>.

USE WITH Furl

You can use Net::DNS::Paranoid with Furl!

use Furl::HTTP;
use Net::DNS::Paranoid;

my $resolver = Net::DNS::Paranoid->new();
my $furl = Furl->new(
    inet_aton => sub {
        my ($host, $errmsg) = $resolver->resolve($_[0], time(), $_[1]);
        die $errmsg unless $host;
        Socket::inet_aton($host->[0]);
    }
);

USE WITH LWP

I shipped LWPx::ParanoidHandler to wrap this module. Please use it.

THANKS TO

Most of code was taken from LWPx::ParanoidAgent.

AUTHOR

Tokuhiro Matsuno < tokuhirom @A gmail DOT. com>

LICENSE

Copyright (C) Tokuhiro Matsuno

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.