… | |
… | |
8 | use Coro; |
8 | use Coro; |
9 | use Coro::Event; |
9 | use Coro::Event; |
10 | use Coro::Semaphore; |
10 | use Coro::Semaphore; |
11 | use Coro::SemaphoreSet; |
11 | use Coro::SemaphoreSet; |
12 | use Coro::Socket; |
12 | use Coro::Socket; |
|
|
13 | |
|
|
14 | use BerkeleyDB; |
13 | |
15 | |
14 | $Event::DIED = sub { |
16 | $Event::DIED = sub { |
15 | Event::verbose_exception_handler(@_); |
17 | Event::verbose_exception_handler(@_); |
16 | #Event::unloop_all(); |
18 | #Event::unloop_all(); |
17 | }; |
19 | }; |
… | |
… | |
202 | $whois; |
204 | $whois; |
203 | } |
205 | } |
204 | |
206 | |
205 | package netgeo; |
207 | package netgeo; |
206 | |
208 | |
|
|
209 | use Socket; |
207 | use BerkeleyDB; |
210 | use BerkeleyDB; |
208 | use Socket; |
|
|
209 | |
211 | |
210 | sub ip2int($) { |
212 | sub ip2int($) { |
211 | unpack "N", inet_aton $_[0]; |
213 | unpack "N", inet_aton $_[0]; |
212 | } |
214 | } |
213 | |
215 | |
… | |
… | |
239 | } |
241 | } |
240 | } |
242 | } |
241 | |
243 | |
242 | my ($arin, $ripe, $apnic); |
244 | my ($arin, $ripe, $apnic); |
243 | |
245 | |
244 | $whois = $WHOIS{APNIC}->ip_request($ip) |
246 | $whois = $WHOIS{RIPE}->ip_request($ip) |
245 | || $WHOIS{RIPE} ->ip_request($ip) |
|
|
246 | || $WHOIS{ARIN} ->ip_request($ip); |
247 | || $WHOIS{ARIN} ->ip_request($ip) |
|
|
248 | || $WHOIS{APNIC} ->ip_request($ip); |
247 | |
249 | |
248 | $whois =~ /^\*in: ([0-9.]+)\s+-\s+([0-9.]+)\s*$/mi |
250 | $whois =~ /^\*in: ([0-9.]+)\s+-\s+([0-9.]+)\s*$/mi |
249 | or do { warn "$whois($ip): no addresses found\n", last }; |
251 | or do { warn "$whois($ip): no addresses found\n", last }; |
250 | |
252 | |
251 | my ($ip0, $ip1) = ($1, $2); |
253 | my ($ip0, $ip1) = ($1, $2); |