#author("2017-12-16T01:24:13+09:00","default:nowsky","nowsky")
#author("2017-12-16T15:52:33+09:00","default:nowsky","nowsky")
*CountryCode IPList [#d36c24e3]
グローバルIPv4アドレス、ユニキャストIPv6アドレスは、
5つの地域インターネットレジストリ(RIR:Regional Internet Registry)で管理を行っており、
RIRで国別に割り当てたIPアドレスリストは都度更新される形でインターネット公開されている。
|LEFT:80|LEFT:|c
|CENTER:~RIR|CENTER:~IPLIST|
|[[ARIN:+https://www.arin.net/]]| http://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest|
|[[RIPE NCC:+https://www.ripe.net/]]|http://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest|
|[[APNIC:+https://www.apnic.net/]]|http://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest|
|[[LACNIC:+https://www.lacnic.net/]]|http://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest|
|[[AfriNIC:+https://www.afrinic.net/]]|http://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest|
 
国別IPアドレスリストが必要になりRIRの公開しているファイルを利用する事があるのだが、
セグメント情報がCIDR形式で記載されていない為、利用する際に工夫が必要となる。
これら配布ファイルをCIDR形式に修正して一般公開しているサイトは多数あるのだが、
ファイルをIPv4/IPv6両方生成しつつ、デュアルスタックで配布サイト運営している所が無かったのでやってみた。
~
*注意事項 [#hb126ce1]
+ ファイル利用による損益について、&color(#ff0000){一切の責任を負いません};
+ 配布状況によって、ダウンロードURLの変更・ファイルの公開停止をする場合があります
+ 毎日深夜1時頃にファイルを更新しますが、メンテナンスで更新が遅れる事もあります
+ ファイルを自動取得する場合、負荷軽減の為に&color(#ff0000){圧縮ファイルをご利用下さい};
~
* ファイル [#fed9af0e]
|LEFT:80|CENTER:100|CENTER:100|c
|CENTER:~Format|~IPv4|~IPv6|
|text|hoge.txt|hoge.txt|
|gzip|hoge.txt|hoge.txt|
|bzip2|hoge.txt|hoge.txt|
|xz|hoge.txt|hoge.txt|
|md5|hoge.txt|hoge.txt|
#iframe(https://www.ns-lab.org/files/iplist/,style=width:400px;height:150px;)
 
#iframe(https://www.ns-lab.org/iplist/,style=width:100%;height:220px;,iestyle=width:100%;height:220px;)
----
~
* スクリプト [#tc5b9b72]
IPアドレスリストをCIDR形式に整形するスクリプトも、実際に利用している物を公開。
今回はLinuxでの実行を前提にPerlでスクリプトを作成してみました。
ライセンスについて、筆者が作成した整形スクリプトは好きに改変して大丈夫ですが、
&color(#ff0000){外部ライブラリのライセンスについてはライブラリ配布元に帰属とします。};
~
* 参考サイト [#p360c105]
- [[Mark Suter:+https://zwitterion.org/software/aggregate-cidr-addresses/]]
- [[AbacusTechnologies:+https://kana.me/entry/ip-ranges-by-country]]
- [[てくにかるむ:+http://multix.jp/delegated-apnic-acl/]]
~
* スクリプト [#dc097c60]
|LEFT:80|CENTER:100|CENTER:100|c
|CENTER:~公開日|~ファイル名|~MD5|
|2017/12/15|[[iplist_20151215.zip:https://www.ns-lab.org/files/iplist/iplist_20171215.zip]]|b1d878a9d2f8472891b0a24b6b779d25|
~
* 初期設定 [#qb8d13b2]
スクリプトにヘルプを埋め込んであるので「./script.pl --help」で内容を確認しつつ初期設定をして下さい。
ただし、スクリプト実行パス・ファイル保存先などは変数に直書きしている為、
下記解説に従ってヘルプ閲覧前に該当箇所を書き換えてください。
 
#region(&color(#ff0000){make-country-iplist.pl};)
 用途:スクリプト全体の統括、レポートメールの送信
 ---
 $CIDR_ROOT_DIR   = "出力ファイルの保存先"
 $MAIL_FROM       = "メールレポートの送信元アドレス"
 $MAIL_TO         = "メールレポートの宛先アドレス"
 $SCRIPT_ROOT_DIR = "スクリプトの保存ディレクトリ"
 $SCRIPT_OPTION   = "スクリプトの共通オプション"
#endregion
#region(&color(#ff0000){make-country-getrir.pl};)
 用途:RIRのIPアドレスリスト取得
 ---
 $CIDR_ROOT_DIR   = "出力ファイルの保存先"
#endregion
#region(&color(#ff0000){make-country-modify.pl};)
 用途:IPアドレスリストをCIDR形式に整形
 ---
 $CIDR_ROOT_DIR   = "出力ファイルの保存先"
#endregion
#region(&color(#ff0000){make-country-output.pl};)
 用途:整形済IPアドレスリストのテキスト化、ファイル結合処理
 ---
 $CIDR_SCRIPT     = "外部ライブラリの実行パス"
 $CIDR_ROOT_DIR   = "出力ファイルの保存先"
#endregion
#region(&color(#ff0000){make-country-webdir.pl};)
 用途:整形済IPアドレスリストの圧縮、WEBディレクトリへ複製
 ---
 $IPLIST_OWNER    = "WEB公開ファイルのユーザ"
 $IPLIST_GROUP    = "WEB公開ファイルのグループ"
 $IPLIST_PERMIT   = "WEB公開ファイルのパーミッション"
 $WEB_ROOT_PATH   = "WEB公開ファイルの保存先ディレクトリ";
 $CIDR_ROOT_DIR   = "出力ファイルの保存先"
#endregion
~
* 実行コマンド [#f18f6174]
スクリプト変数を下記内容に設定し、未記載の変数をデフォルトとした場合の実行例。
CPU処理速度にも左右されますが処理完了まで5分かかります。
-変数設定例
 $CIDR_ROOT_DIR   = "/var/iplist";
 $SCRIPT_ROOT_DIR = "/usr/local/bin/iplist";
 $CIDR_SCRIPT     = "/usr/local/bin/iplist/aggregate-cidr-addresses";
 $IPLIST_OWNER    = "www";
 $IPLIST_GROUP    = "www";
 $IPLIST_PERMIT   = "644";
 $WEB_ROOT_PATH   = "/var/www/htdocs";
~
-実行準備
 # cd /usr/local/bin/iplist
 # wget "https://zwitterion.org/software/aggregate-cidr-addresses/aggregate-cidr-addresses"
 # diff aggregate-cidr-addresses.orig aggregate-cidr-addresses
   89c89
   <     print $_->prefix(), "\n";
   ---
   >     print 6 eq $_->version ? $_->print() : $_->prefix(), "\n";
 
 # mkdir /var/iplist
 # chmod 755 make-country-*.pl aggregate-cidr-addresses
 # ls
   aggregate-cidr-addresses  make-country-iplist.pl  make-country-output.pl
   make-country-getrir.pl    make-country-modify.pl  make-country-webdir.pl
~
-実行方法
ローカル用IPリストの生成(WEB公開無し)
 $ ./make-country-iplist.pl
 
WEB公開用IPリストの生成
 $ ./make-country-iplist.pl --web
 
ヘルプの表示
 $ ./make-country-iplist.pl --help