ありがちな作業なのでそのものずばりなツールはごまんとありそうですが、極力先人の知恵を組み合わせて手抜きしながらIPv6対応のものを自力生成してみます。net-mgmt/p5-Net-IPが超便利です。最近はaggregateされたものは置いてないようなので aggregate-cidr-addresses を使います。NANOG MLのメールのとおりにIPv6の場合はprefix()をprint()に変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#!/usr/bin/perl # -*- mode: cperl; coding: iso-8859-1; tab-width: 8 -*- use Net::IP; use strict; my $cc = 0 > $#ARGV ? 'JP' : $ARGV[0]; foreach (<stdin>) { chomp; if ($_ =~ /\|$cc\|ipv([46])\|([^\|]+)\|(\d+)\|/) { if (4 == $1) { my $ip = new Net::IP ("$2 + " . ("$3" - 1)) || die ('argument for Net::IP'); foreach ($ip->find_prefixes ()) { print "$_\n"; } } else { print "$2/$3\n"; } } } close (AGR); # end of file |
上を hoge.pl とでもして保存。先ほどの aggregate-cidr-addresses もその名前のままダウンロードして、最後の
|
foreach (@addrs) { print $_->prefix(), "\n"; } |
の部分を
|
foreach (@addrs) { if ($_) { print 6 eq $_->version ? $_->print() : $_->prefix(), "\n"; } } |
に置き換えます。日本のサイダーであればfetchなりwgetなりを使って
|
fetch 'ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest' perl hoge.pl JP <delegated-apnic-latest | perl aggregate-cidr-addresses >jp |
お気楽日本のサイダー jp のできあがり。全部のRIR statsは以下のとおり。
|
ftp://ftp.apnic.net/pub/stats/apnic/ ftp://ftp.lacnic.net/pub/stats/lacnic/ ftp://ftp.ripe.net/pub/stats/ripencc/ ftp://ftp.arin.net/pub/stats/arin/ ftp://ftp.afrinic.net/stats/afrinic/ |
頻繁にRIRにftpしないように良い子はちゃんとftpしたファイルを保存します。あとRIR dbはただの登録情報なので、実際に設置されている国と異なったりanycastだったりする場合も多いので、もう少し精度良く場所を知りたい場合はGeoIPなどの他、looking glass, traceroute, whoisなどを使って推察していくことになります。