… | |
… | |
33 | |
33 | |
34 | use Socket qw(AF_INET SOCK_DGRAM SOCK_STREAM); |
34 | use Socket qw(AF_INET SOCK_DGRAM SOCK_STREAM); |
35 | |
35 | |
36 | use AnyEvent (); |
36 | use AnyEvent (); |
37 | use AnyEvent::Handle (); |
37 | use AnyEvent::Handle (); |
|
|
38 | use AnyEvent::Util qw(AF_INET6); |
38 | |
39 | |
39 | our @DNS_FALLBACK = (v208.67.220.220, v208.67.222.222); |
40 | our @DNS_FALLBACK = (v208.67.220.220, v208.67.222.222); |
40 | |
41 | |
41 | =item AnyEvent::DNS::a $domain, $cb->(@addrs) |
42 | =item AnyEvent::DNS::a $domain, $cb->(@addrs) |
42 | |
43 | |
… | |
… | |
147 | my ($ip, $cb) = @_; |
148 | my ($ip, $cb) = @_; |
148 | |
149 | |
149 | $ip = AnyEvent::Socket::parse_address ($ip) |
150 | $ip = AnyEvent::Socket::parse_address ($ip) |
150 | or return $cb->(); |
151 | or return $cb->(); |
151 | |
152 | |
152 | if (4 == length $ip) { |
153 | my $af = AnyEvent::Socket::address_family ($ip); |
|
|
154 | |
|
|
155 | if ($af == AF_INET) { |
153 | $ip = join ".", (reverse split /\./, $ip), "in-addr.arpa."; |
156 | $ip = join ".", (reverse split /\./, $ip), "in-addr.arpa."; |
|
|
157 | } elsif ($af == AF_INET6) { |
|
|
158 | $ip = join ".", (reverse split //, unpack "H*", $ip), "ip6.arpa."; |
154 | } else { |
159 | } else { |
155 | $ip = join ".", (reverse split //, unpack "H*", $ip), "ip6.arpa."; |
160 | return $cb->(); |
156 | } |
161 | } |
157 | |
162 | |
158 | resolver->resolve ($ip => "ptr", sub { |
163 | resolver->resolve ($ip => "ptr", sub { |
159 | $cb->(map $_->[3], @_); |
164 | $cb->(map $_->[3], @_); |
160 | }); |
165 | }); |