Edited at

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

More than 3 years have passed since last update.


はじめに

コマンドラインからグローバル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単位で指定します。