File Coverage

blib/lib/IP/Country/DNSBL.pm
Criterion Covered Total %
statement 22 41 53.6
branch 1 8 12.5
condition 1 11 9.0
subroutine 7 10 70.0
pod 2 4 50.0
total 33 74 44.5


line stmt bran cond sub pod time code
1             package IP::Country::DNSBL;
2 1     1   7518 use strict;
  1         3  
  1         34  
3 1     1   7 use warnings;
  1         2  
  1         33  
4              
5 1     1   1034 use Socket;
  1         4513  
  1         649  
6 1     1   961 use Net::DNS;
  1         100950  
  1         114  
7 1     1   8 use Carp;
  1         3  
  1         62  
8              
9 1     1   6 use vars qw ( $VERSION );
  1         2  
  1         513  
10             $VERSION = '1.02';
11              
12             my $resolver = Net::DNS::Resolver->new;
13             my $ip_match = qr/^(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])$/o;
14              
15             sub new ()
16             {
17 1     1 0 16 my ($caller,$server) = @_;
18 1 50       4 $server = defined($server) ? $server : 'country.netop.org';
19 1   33     8 my $class = ref($caller) || $caller;
20 1         9 return bless \$server, $class;
21             }
22              
23             sub db_time
24             {
25 0     0 0   return 0;
26             }
27              
28             sub inet_atocc
29             {
30 0     0 1   my ($self,$inet_a) = @_;
31 0           my $server = $$self;
32 0           my $dnsbl_host;
33 0 0         if ($inet_a =~ $ip_match){
34 0           $dnsbl_host = "$4.$3.$2.$1.$server";
35             } else {
36 0   0       my $inet_n = inet_aton($inet_a) || return undef; # host lookup
37 0   0       $inet_a = inet_ntoa($inet_n) || return undef;
38 0 0         if ($inet_a =~ $ip_match){
39 0           $dnsbl_host = "$4.$3.$2.$1.$server";
40             } else {
41 0           return undef;
42             }
43             }
44 0   0       my $packet = $resolver->query($dnsbl_host,"TXT") || return undef;
45 0           foreach my $rr($packet->answer){
46 0 0         next unless $rr->type eq 'TXT';
47 0           return $rr->txtdata();
48             }
49 0           return undef;
50             }
51              
52             sub inet_ntocc
53             {
54 0     0 1   my $inet_n = $_[1];
55 0   0       my $inet_a = inet_ntoa($inet_n) || return undef;
56 0           return $_[0]->inet_atocc($inet_a);
57             }
58              
59             1;
60             __END__