メールの Received を見て何らかの処理をするために使えそうなモジュールだなぁと思ったので、まずは、データを更新することにした。
ちなみにこのモジュールは、Plagger の Filter::GuessTimeZoneByDomain に使われているモジュールらしい。
とりあえず、ファイルの準備をする。
$ wget http://search.cpan.org/CPAN/authors/id/N/NW/NWETTERS/IP-Country-2.23.tar.gz
$ tar xzf IP-Country-2.23.tar.gz
$ cd IP-Country-2.23
$ mkdir rir_data
$ cd rir_data
$ wget ftp://ftp.arin.net/pub/stats/afrinic/delegated-afrinic-latest
$ wget ftp://ftp.arin.net/pub/stats/lacnic/delegated-lacnic-latest
$ wget ftp://ftp.apnic.net/public/apnic/stats/apnic/delegated-apnic-latest
$ wget ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz
$ wget ftp://ftp.arin.net/pub/stats/arin/delegated-arin-latest
で、dbmScripts/ipcc_loader.pl を実行する。うちの北森 2.6Hz な Celeron だと 30 分かかった。30 分もあるので、ヌいてすっきりする等の生産的な活動を行うと時間の節約になってよいだろう。
メモリは 750M ほど食われた。これで 2M ほどの sorted_countries.txt ができる。
$ time perl ../dbmScripts/ipcc_loader.pl
loading data from delegated-afrinic-latest
loading data from delegated-lacnic-latest
loading data from delegated-apnic-latest
loading data from ripe.db.inetnum
loading data from delegated-arin-latest
optimizing by joining neighbouring ranges
repeating (714116 joins)
repeating (229049 joins)
repeating (71680 joins)
repeating (21495 joins)
repeating (6440 joins)
repeating (1913 joins)
repeating (520 joins)
repeating (127 joins)
repeating (22 joins)
repeating (2 joins)
removing overlapping ranges
repeating (576743 overlapping ranges)
repeating (35071 overlapping ranges)
repeating (11 overlapping ranges)
performing final optimizations
repeating (376904 joins)
repeating (276636 joins)
repeating (195295 joins)
repeating (132263 joins)
repeating (88548 joins)
repeating (59143 joins)
repeating (39704 joins)
repeating (26317 joins)
repeating (17423 joins)
repeating (11329 joins)
repeating (7136 joins)
repeating (4456 joins)
repeating (2748 joins)
repeating (1450 joins)
repeating (770 joins)
repeating (424 joins)
repeating (170 joins)
repeating (73 joins)
repeating (35 joins)
repeating (14 joins)
repeating (3 joins)
real 29m10.890s
user 27m18.838s
sys 0m8.461s
次に、dbmScripts/ipcc_maker.pl を実行する。
メモリの消費は 40M ほど。../lib/IP/Country/Fast/ip.gif と ../lib/IP/Country/Fast/cc.gif が更新される。
$ time perl ../dbmScripts/ipcc_maker.pl
Building registry... this will take a moment...
Saving ultralite IP registry to disk
Saving ultralite country database to disk
Finished.
real 0m53.124s
user 0m50.998s
sys 0m0.223s
とりあえず使ってみる。
$ cat test.pl
#!/usr/bin/perl
use strict;
use IP::Country::Fast;
my $me = "pub.woremacx.com";
my $reg = IP::Country::Fast->new();
print $reg->inet_atocc($me) ."\n";
print localtime($reg->db_time()) ."\n"; # revision date
$ perl -Ilib test.pl
JP
Sun Dec 17 21:20:26 2006

Leave a comment