#author("2019-01-02T02:32:28+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両方生成しつつ、デュアルスタックで配布サイト運営している所が無かったので公開しました。 ~ * 参考サイト [#j5e5914d] - [[世界の国別 IPv4 アドレス割り当てリスト:+http://nami.jp/ipv4bycc/]] - [[国別 IPv6アドレス割当リスト:+https://foxmaster.jp/ipv6bycc/]] ~ *注意事項 [#hb126ce1] + ファイル利用による損益について、&color(#ff0000){一切の責任を負いません}; + 状況に応じて、アクセス制限・ダウンロードURLの変更・ファイルの公開停止をする場合があります + 毎日深夜0時30分頃にファイルを生成しますが、メンテナンスで更新の遅れる事があります + ファイルを自動取得する場合、サーバ負荷軽減の為に&color(#ff0000){圧縮ファイルをご利用下さい}; + CC・セグメント間はタブ区切り、順序はCC・セグメントを昇順でソートしています ~ * ファイル [#fed9af0e] #iframe(https://www.ns-lab.org/iplist/,style=width:100%;height:240px;,iestyle=width:100%;height:240px;) - 展開コマンド $ gzip -cd cidr_ipv4.gz > cidr_ipv4.txt $ bunzip2 -cd cidr_ipv4.bz2 > cidr_ipv4.txt $ xzcat -cd cidr_ipv4.xz > cidr_ipv4.txt ---- ~ * 説明 [#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|LEFT:100|LEFT:200|c |CENTER:~公開日|~FILE|RIGHT:~SIZE|CENTER:~MD5|CENTER:~更新内容| |2019/01/02|[[iplist_20190102.zip:https://www.ns-lab.org/files/iplist/iplist_20190102.zip]]|9.9KB|a6a92accfd4b90be44a1df772f4248a0|CIDR変換時のハッシュ処理を最適化| |2017/12/17|[[iplist_20171217.zip:https://www.ns-lab.org/files/iplist/iplist_20171217.zip]]|9.9KB|6aed24625f0aea04a4e4888a53560f7d|IPリストの圧縮処理を変更| |2017/12/15|[[iplist_20171215.zip:https://www.ns-lab.org/files/iplist/iplist_20171215.zip]]|9.9KB|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分程時間が必要となります。 外部ライブラリ(aggregate-cidr-addresses)は、IPv6対応の為に1行書き換えてください。 -変数設定例 $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 #author("2019-05-10T08:02:56+09:00","default:nowsky","nowsky")