CountryCode IPList†
グローバルIPv4アドレス、ユニキャストIPv6アドレスは、
5つの地域インターネットレジストリ(RIR:Regional Internet Registry)で管理を行っており、
RIRで国別に割り当てたIPアドレスリストは都度更新される形でインターネット公開されている。
スクリプトで国別IPアドレスリストが必要になり、RIRのアドレスリストを利用する事があるが、
セグメント情報がCIDR形式で記載されておらず利用する際に工夫が必要となる。
これら配布ファイルをCIDR形式に修正して一般公開しているサイトも多数存在するにせよ、
ファイルをIPv4/IPv6両方生成しつつ、デュアルスタックで配布サイト運営している所が無かったので公開しました。
参考サイト†
注意事項†
- ファイル利用による損益について、一切の責任を負いません
- 状況に応じて、アクセス制限・ダウンロードURLの変更・ファイルの公開停止をする場合があります
- ファイルは一日二回、03:00,15:00頃に生成しますが、メンテナンスで更新の遅れる事があります
- ファイルを自動取得する場合、サーバ負荷軽減の為に圧縮ファイルをご利用下さい
- CC・セグメント間はタブ区切り、順序はCC・セグメントを昇順でソートしています
ファイル†
IPアドレスリストをCIDR形式に整形するスクリプトについて、当サーバで利用している物を公開。
スクリプトはLinuxでの実行を前提にPerlで作成してあります。
ライセンスについて、筆者が作成したスクリプトは好きに改変して問題ありませんが、
外部ライブラリのライセンスについてはライブラリ配布元に帰属とします。
参考サイト†
スクリプト†
初期設定†
実行パス・ファイル保存先は変数に直書きしている為、下記に従って実行前に該当箇所を書き換えてください。
また、スクリプトにヘルプも埋め込んであるので、必要に応じて「./script.pl --help」で確認してください。
+
| | make-country-iplist.pl
|
用途:スクリプト全体の統括、レポートメールの送信
---
$CIDR_ROOT_DIR = "出力ファイルの保存先"
$MAIL_FROM = "メールレポートの送信元アドレス"
$MAIL_TO = "メールレポートの宛先アドレス"
$SCRIPT_ROOT_DIR = "スクリプトの保存ディレクトリ"
$SCRIPT_OPTION = "スクリプトの共通オプション"
|
+
| | make-country-getrir.pl
|
用途:RIRのIPアドレスリスト取得
---
$CIDR_ROOT_DIR = "出力ファイルの保存先"
|
+
| | make-country-modify.pl
|
用途:IPアドレスリストをCIDR形式に整形
---
$CIDR_ROOT_DIR = "出力ファイルの保存先"
|
+
| | make-country-output.pl
|
用途:整形済IPアドレスリストのテキスト化、ファイル結合処理
---
$CIDR_SCRIPT = "外部ライブラリの実行パス"
$CIDR_ROOT_DIR = "出力ファイルの保存先"
|
+
| | make-country-webdir.pl
|
用途:整形済IPアドレスリストの圧縮、WEBディレクトリへ複製
---
$IPLIST_OWNER = "WEB公開ファイルのユーザ"
$IPLIST_GROUP = "WEB公開ファイルのグループ"
$IPLIST_PERMIT = "WEB公開ファイルのパーミッション"
$WEB_ROOT_PATH = "WEB公開ファイルの保存先ディレクトリ"
$CIDR_ROOT_DIR = "出力ファイルの保存先"
|
実行コマンド†
スクリプト変数を下記内容に設定し、未記載の変数をデフォルトとした場合の実行例。
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
エラー対処†