LoginSignup
14

More than 5 years have passed since last update.

グローバルIP取得ツールを作ってみた

Last updated at Posted at 2016-02-21

はじめに

コマンドラインからグローバルIPを取得したい場合、curl ifconfig.meとかcurl ip-net.infoあたりがよく紹介されています。ただ、これらのサイトは(特にifconfig.meは)しばしば繋がりにくい状態で、cronでの自動実行などを考えるとエラー処理含めいろいろ面倒です。
そこで複数のサイトを順次試行するツールを作ってみました。仮にいくつかのサイトか落ちていても、どこか1つでも繋がれば結果は表示されるようになっています。
念のためですが、あまり高頻度で使用しないようご注意ください。例えばmyexternalip.comの場合、30回/分でアクセス制限されるようです。多くても1回/時間程度が良いかと思います。

リンク

Download
Source

使い方

ダウンロードしたファイルをPATHの通った場所に展開してください。
使い方は以下のような感じです。

gip                    //プレーンテキスト出力
gip -s                 //プレーンテキスト出力(改行なし)
gip -j                 //JSON出力
gip -j --json-key addr //JSON出力(キー指定)

デフォルトで以下のサイトを使っています。
負荷分散のため試行順序はランダムです。また、ifconfig.meは特に繋がりにくいので外しました。

また、接続先をカスタマイズしたい場合、$HOME/.gip.tomlで上書き可能です。
$HOME/.gip.tomlがなかった場合のデフォルト値は以下のような感じなので、ここから追加・削除するのが楽です。

gip.toml
[[providers]]
    name    = "inet-ip.info"
    ptype   = "Plane"
    timeout = 1000
    url     = "http://inet-ip.info/ip"
[[providers]]
    name    = "myexternalip.com"
    ptype   = "Plane"
    timeout = 1000
    url     = "http://myexternalip.com/raw"
[[providers]]
    name    = "globalip.me"
    ptype   = "Plane"
    timeout = 1000
    url     = "http://globalip.me?ip"
[[providers]]
    name    = "ipify.org"
    ptype   = "Plane"
    timeout = 1000
    url     = "https://api.ipify.org"
[[providers]]
    name    = "httpbin.org"
    ptype   = "Json"
    timeout = 1000
    url     = "http://httpbin.org/ip"
    key     = ["origin"]

nameは適当な名前を、urlにGETするURLを入れてください。プレーンテキストで返ってくる場合はptypePlaneに、JSONで返ってくる場合はptypeJsonにした上で、keyにJSONオブジェクトのパスをTOMLの配列で設定できます。timeoutは各試行のタイムアウトをms単位で指定します。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14