CountryCode IPList

グローバルIPv4アドレス、ユニキャストIPv6アドレスは、
5つの地域インターネットレジストリ(RIR:Regional Internet Registry)で管理を行っており、
RIRで国別に割り当てたIPアドレスリストは都度更新される形でインターネット公開されている。

 
スクリプトで国別IPアドレスリストが必要になり、RIRのアドレスリストを利用する事があるが、
セグメント情報がCIDR形式で記載されておらず利用する際に工夫が必要となる。
これら配布ファイルをCIDR形式に修正して一般公開しているサイトも多数存在するにせよ、
ファイルをIPv4/IPv6両方生成しつつ、デュアルスタックで配布サイト運営している所が無かったので公開しました。

参考サイト

注意事項

  1. ファイル利用による損益について、一切の責任を負いません
  2. 状況に応じて、アクセス制限・ダウンロードURLの変更・ファイルの公開停止をする場合があります
  3. ファイルは一日二回、03:00,15:00頃に生成しますが、メンテナンスで更新の遅れる事があります
  4. ファイルを自動取得する場合、サーバ負荷軽減の為に圧縮ファイルをご利用下さい
  5. CC・セグメント間はタブ区切り、順序はCC・セグメントを昇順でソートしています

ファイル

  • 展開コマンド
    $ gzip    -cd cidr_ipv4.gz  > cidr_ipv4.txt
    $ bunzip2 -cd cidr_ipv4.bz2 > cidr_ipv4.txt
    $ xzcat   -cd cidr_ipv4.xz  > cidr_ipv4.txt


説明

IPアドレスリストをCIDR形式に整形するスクリプトについて、当サーバで利用している物を公開。
スクリプトはLinuxでの実行を前提にPerlで作成してあります。
ライセンスについて、筆者が作成したスクリプトは好きに改変して問題ありませんが、
外部ライブラリのライセンスについてはライブラリ配布元に帰属とします。

参考サイト

スクリプト

公開日FILESIZEMD5更新内容
2019/01/02iplist_20190102.zip9.9KBa6a92accfd4b90be44a1df772f4248a0CIDR変換時のハッシュ処理を最適化
2017/12/17iplist_20171217.zip9.9KB6aed24625f0aea04a4e4888a53560f7dIPリストの圧縮処理を変更
2017/12/15iplist_20171215.zip9.9KBb1d878a9d2f8472891b0a24b6b779d25初公開


初期設定

実行パス・ファイル保存先は変数に直書きしている為、下記に従って実行前に該当箇所を書き換えてください。
また、スクリプトにヘルプも埋め込んであるので、必要に応じて「./script.pl --help」で確認してください。
 

 make-country-iplist.pl
 make-country-getrir.pl
 make-country-modify.pl
 make-country-output.pl
 make-country-webdir.pl


実行コマンド

スクリプト変数を下記内容に設定し、未記載の変数をデフォルトとした場合の実行例。
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";

  • パッケージインストール
    RHEL8 and Clone's
    # dnf install epel-release
    # dnf install mailx  tar wget perl-File-Path perl-Net-IP
     
    RHEL9 and Clone's
    # dnf install epel-release
    # dnf install s-nail tar wget perl-File-Path perl-Net-IP


  • 実行準備
    # 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

エラー対処

  • インタプリタエラーが出る
    実行環境の文字コード次第で、スクリプト実行時に'/usr/bin/perl^M: bad interpreter'とエラーが出ます
    行末についているLF文字(Line Feed)を消せば直るので、sedやtrあたりで消して下さい。
    # cd /usr/local/bin/iplist
    # sed -i 's/\r//' make-country-*.pl