golangでGeoIPできるの作ってみた2
2013-10-29 / Go
IPから国名がわかるコマンドラインツール。
前回
作ったやつを修正して、標準入力も受け取るようにした。
使い方
前回とほぼ同じだけど改めて書くと。
GeoLite Free Downloadable Databases « Maxmind Developer Site
↑こちらのページから、GeoLite Country のバイナリデータを持ってくる。適当に解凍しておく。解凍済みのファイルは、GeoIP.datのはず。
1.オプションでIPを渡す
ip2country –db GeoIP.datのパス IPアドレス …
IPアドレスは複数渡せるようにした。
2.標準入力でIPを渡す
ip2country –db GeoIP.datのパス < iplist.txt
こんな感じでリダイレクトとかパイプでIPのリストが渡せる。1行1IP。
実際に使う場合には、awkとかと併用すると思う。こんな感じかな。
cat access.log | grep wp-comment.php | awk ‘{print $1}’ | sort | uniq | ip2country
ファイルのパス指定
以下の順番でDBファイルのパスを探索する。
- 環境変数
GEOIP_DB_PATH
で指定する
- オプション
- -db オプション
- カレントディレクトリ
- カレントディレクトリのGeoIP.dat
作った感想
golangの使い道は色々とあると思うんだけど、自分は今回みたいなコマンドラインツールとかがメインかな~と思っているので、今回のテーマはちょうど良かった。かかった時間は、10時間くらいかな。
エラー処理を後回しにせずに、都度処理するというスタイルにあまり慣れていないので、ちょっと記述が冗長になりそうな気もする。
けど、後回しにするとざっくりとした例外処理になっちゃうことが多いので、細かく処理する方が良いのかなと思ったりもする。
後は、コードの作法的なのがまだ分かってないので、既存のプロダクトのコード読むとかした方が良いかな。
ポインタに慣れてないので、やっぱその辺がちょっと抵抗感があるかな〜というのが正直なところ。