サーバへの接続元のIPアドレスがどこの国なのか調べたいことがある。
1つ、2つなら、geoiplookupコマンドを使ってやっても不便はない。
# geoiplookup IPアドレス
ただし、膨大な量のIPアドレスを調べるとなると毎回ツールが起動して時間がかかりすぎる。
オンメモリで一気に回したい。
そこで、Rubyのライブラリを使うことにする。
◆ geoipのインストール
geoipパッケージ内にgeoiplookupのコマンドも含まれている。
# yum install geoip
gemを使ってruby用のgeoipモジュールをインストールする。
# /usr/local/ruby-2.0.0/bin/gem install geoip -p http://192.0.2.1:8080/
※ rubyのインストール先は下段の"◆ 補足"を参照のこと。
※ -pオプション以降はプロキシの設定である。
環境依存するところなので適宜読み替えること。
◆ geoipのデータベースの用意
geoipのデータベースをダウンロードする。
geoipのパッケージにもデータベースは含まれているが最新のものを
利用したほうがいいだろう。また月一ぐらいで更新はかけておきたい。
# http_proxy=192.0.2.1:8080 wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz -O /var/tmp/GeoIP.dat.gz
# gunzip /var/tmp/GeoIP.dat.gz
# /bin/mv /var/tmp/GeoIP.dat /usr/share/GeoIP/GeoIP.dat
◆ ツールの用意
今回は例として以下の形式のIPアドレスのリストを読み込ませ、
国コードを出力させる。
# vi ip_list
203.216.227.176
74.125.95.104
# vi geoip.rb
#!/usr/local/ruby-2.0.0/bin/ruby
require 'geoip'
geo = GeoIP.new('/usr/share/GeoIP/GeoIP.dat')
open(ARGV.shift) do |file|
file.each_line do |line|
ip=line.chomp
country3 = geo.country(ip).country_code3
printf "%15s : %s\n",ip, country3
end
end
exit 0
◆ ツールの実行
# chmod 755 geoip.rb
# ./geoip.rb
203.216.227.176 : JPN
74.125.95.104 : USA
◆ 補足(Rubyインストール先)
# cd /usr/local/src/
# ftp_proxy=192.0.2.1:8080 wget ftp://core.ring.gr.jp/pub/lang/ruby/ruby-2.0-stable.tar.gz
# tar zxvf ruby-2.0-stable.tar.gz
# cd ruby-2.0.0-p195/
# ./configure --prefix=/usr/local/ruby-2.0.0
# make
# make install