はじめに
コマンドラインからグローバルIPを取得したい場合、curl ifconfig.me
とかcurl ip-net.info
あたりがよく紹介されています。ただ、これらのサイトは(特にifconfig.meは)しばしば繋がりにくい状態で、cron
での自動実行などを考えるとエラー処理含めいろいろ面倒です。
そこで複数のサイトを順次試行するツールを作ってみました。仮にいくつかのサイトか落ちていても、どこか1つでも繋がれば結果は表示されるようになっています。
念のためですが、あまり高頻度で使用しないようご注意ください。例えばmyexternalip.comの場合、30回/分でアクセス制限されるようです。多くても1回/時間程度が良いかと思います。
リンク
使い方
ダウンロードしたファイルをPATHの通った場所に展開してください。
使い方は以下のような感じです。
gip //プレーンテキスト出力
gip -s //プレーンテキスト出力(改行なし)
gip -j //JSON出力
gip -j --json-key addr //JSON出力(キー指定)
デフォルトで以下のサイトを使っています。
負荷分散のため試行順序はランダムです。また、ifconfig.meは特に繋がりにくいので外しました。
また、接続先をカスタマイズしたい場合、$HOME/.gip.toml
で上書き可能です。
$HOME/.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を入れてください。プレーンテキストで返ってくる場合はptype
をPlane
に、JSONで返ってくる場合はptype
をJson
にした上で、key
にJSONオブジェクトのパスをTOMLの配列で設定できます。timeout
は各試行のタイムアウトをms単位で指定します。