この記事は公開から1年以上が経過しています。内容が古い場合があるのでご注意下さい。

curlで簡単にIPアドレスやその他の情報を取得できるサービスがありましたので、ご紹介します。
curl以外にもPythonやRubyなどでも利用できるようです。
http://ipinfo.io/

特徴

  • JSON形式で取得できる
  • JSONPをサポートしている
  • IPv6サポート
  • 無償プランでは1日1000リクエストまで
  • MaxMindのデータを元にしている
  • レイテンシベースDNSルーティングによるレスポンス高速化

JSON形式で取得できるので、データ加工がし易く使い勝手が良さそうです。
また、JSONPをサポートしているのでクロスドメインで利用できて、何かシステム開発するときは便利なのかなと思います。
(あまりよく分かってませんが。。)

SSLアクセスしたい時や1000リクエスト以上使う場合は、上位の有償プランを選択することになります。
https://ipinfo.io/pricing

IPアドレスの全情報を取得する

$ curl ipinfo.io/52.193.175.205

{
  "ip": "52.193.175.205",
  "hostname": "ec2-52-193-175-205.ap-northeast-1.compute.amazonaws.com",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP",
  "loc": "35.6850,139.7514",
  "org": "AS16509 Amazon.com, Inc.",
  "postal": "100-0001"
}

取得できる項目とその意味は下記の通りです。

項目 意味
ip 知りたいIPアドレス
hostname 対象IPのホスト名
city 対象組織のある都市
region 地域情報
country 国名 (ISO 3166-1 alpha-2準拠のカントリーコード)
loc 緯度と経度
org AS番号と組織名
postal 郵便番号

アクセスしているクライアントのIP情報を取得する

自分のPCやサーバのIPに関する情報は、何も付けずにアクセスします。
下記は、TokyoリージョンのEC2インスタンスから実行した例です。

$ curl ipinfo.io

{
  "ip": "52.193.175.205",
  "hostname": "ec2-52-193-175-205.ap-northeast-1.compute.amazonaws.com",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP",
  "loc": "35.6850,139.7514",
  "org": "AS16509 Amazon.com, Inc.",
  "postal": "100-0001"
}

特定のフィールド情報だけ取得する

上記の各フィールドを指定すれば取得できます。

# ホスト名のフィールドだけ取得
$ curl ipinfo.io/52.193.175.205/country
ec2-52-193-175-205.ap-northeast-1.compute.amazonaws.com

# 組織情報のフィールドだけ取得
$ curl ipinfo.io/52.193.175.205/org
AS16509 Amazon.com, Inc.

国名を取得する

上記のようにフィールド指定すれば、カントリーコードを取得できます。

$ curl ipinfo.io/52.193.175.205/country
JP

カントリーコードを国名にしたい時は、coutry.ioで公開されているデータを取得してマッピングすればできる、と紹介されています。
https://ipinfo.io/developers/full-country-name

このデータもJSON形式なので加工しやすいと思います。

$ curl -s country.io/names.json |jq '.'

{
  "MZ": "Mozambique",
  "QA": "Qatar",
  "UA": "Ukraine",
  "ID": "Indonesia",

(中略)

 "FI": "Finland",
 "FJ": "Fiji"
}

特定の国だけ抽出したいときは、以下のようにします。

$ curl -s country.io/names.json |jq '.JP'
"Japan"

バルクルックアップ

下記にある通りですが、紹介しようと思います。(汗)
https://ipinfo.io/developers/bulk-lookup

ipinfo.ioは一度に1つのIPアドレスしかルックアップできませんが、LinuxなどのCLIと組み合わせることで複数IPを検索するバルクルックアップが可能です。

まず、下記のようなIPリストのファイル(ips.txt)を用意します。

52.193.175.205
205.251.254.122
8.8.4.4

このIPリストをxagsを使って処理します。

例1) カントリーコードをバルクルックアップ

$ cat ips.txt | xargs -I% curl http://ipinfo.io/%/country

JP
US
US

例2) ルックアップしたIPも表示する
pasteコマンドを使います。

$ cat ips.txt | xargs -I% curl -s http://ipinfo.io/%/org | paste -d"," ips.txt -

52.193.175.205,AS16509 Amazon.com, Inc.
205.251.254.122,AS16509 Amazon.com, Inc.
8.8.4.4,AS15169 Google Inc.

利用用途

レスポンスも早く使い方が簡単なので、用途はたくさんあると思います。

  • 国別でコンテンツ言語の違うサイトを見せる
  • 国別でアクセスを許可したり拒否したり

実際に、上記のサンプルが公開されています。
http://ipinfo.io/developers/customize-content-based-on-country

余談

データソースは、GeoIPで有名なMaxMindのデータを使っているとのことです。
http://ipinfo.io/developers

This product includes GeoLite2 data created by MaxMind, available from
http://www.maxmind.com.

 
また、レイテンシベースDNSルーティングについては、Route53へのリンクが貼られているので、Route53を採用しているのかと思います。
実際、ホームページはEC2で動いているようです。
http://ipinfo.io/

以上です。

関連記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です