network

グローバルIPアドレスの確認をコマンド化する

投稿日:2019年8月11日

「Dynamic DNSサービスで定期的にDNS更新をしなきゃいけないけど、固定IPじゃなくて変わった時に調べるのが煩わしい」

といった時に手作業が発生しないようにWeb APIがあるサービスを使ってコマンド化しておき、cronなどで自動実行できるようにしておきます。

実行環境

  • CentOS 7.6
  • curlコマンド
  • jqコマンド

Web APIがあるグローバルIP確認サービス

ドメイン創設年をサービス開始年として判断しています。

ip-api.com

サービス開始:2012年

whois情報や緯度経度も返してくれるスーパー便利API。

httpbin.org

サービス開始:2011年

リクエストを編集したりBasic認証を付けてシミュレーションしたり、も出来るプログラマ向けAPI。

inet-ip.info

サービス開始:2013年

レスポンスフォーマットはjson、yaml、toml。

globalip.me

サービス開始:2014年

レスポンスフォーマットはjson、csv、xml。

ip-api.comでグローバルIP取得を自動化

今回はip-api.comを採用します。

コマンドラインJSONパーサ「jq」をインストール

Web APIが返却するフォーマットは大半JSONに対応している為、curlで受け取ったJSONを解析できるようにjqコマンドを入れておきます。

# yum install jq

インストール:
  jq.x86_64 0:1.5-1.el7

結果をjsonで貰う

ip-api.com/jsonをGETするとjsonが貰えます。

# curl -Ss http://ip-api.com/json/ | jq
{
  "as": "プロバイダ",
  "city": "市区町村",
  "country": "Japan",
  "countryCode": "JP",
  "isp": "プロバイダ名",
  "lat": 緯度,
  "lon": 軽度,
  "org": "組織名",
  "query": "IPアドレス",
  "region": "13",
  "regionName": "Tokyo",
  "status": "success",
  "timezone": "Asia/Tokyo",
  "zip": "郵便番号"
}

queryキーにIPアドレスが入っていることが分かったのでjqコマンドで抜き出します。

curlの-sで余分な進捗表示を消し、-Sでエラーは表示するようにしておきます。
jqの-rオプションはダブルクォートを省いて表示してくれます。

# curl -sS http://ip-api.com/json/ | jq -r '.query'
118.xxx.xxx.xxx

無事自宅のグローバルIPアドレスが取れました。

-network
-, ,

執筆者:

関連記事

LANに接続しているPCをWindowsから見つける

家庭内LANでNASのIPアドレスを忘れたので調べたい職場LANに接続中のホストを調べたい NetEnumを入れられれば取れる情報も多く、ポートスキャンやパケットキャプチャも出来て幸せになれます。 単 …

インターネット速度テストサービスの結果を比較してみる

「インターネット疎通の速度が帯域通りになっているか確かめたい」 仕事でもプライベートでもそんなニーズがあります。 数多あるインターネット速度計測サービスを試してみて「日本国内で使う場合、最も正確な速度 …

JavaとPerlでUDPソケット通信

目次1 はじめに2 対象読者3 実装3.1 UDPサーバ(Perl)3.2 UDPクライアント(Java)3.3 実行4 まとめ はじめに 本棚を整理していたらラクダ本が出てきました。うわー懐かしい、 …

特定ドメインのサブドメインを探る

注:dnsmapは第三者サーバに対しては使用せず、自分の管理ドメインに対してセキュリティ確認用途でご使用ください。 昨今のDNSサーバはゾーン転送が抑制されており、サブドメイン情報を引っ張ってくること …

SSHトンネルを使ってリモートデータベースをBI

クラウド上のDB分析環境構築を想定して、ローカルPCにSSHトンネル(ポートフォワード)環境を作ります。 リモートDBポートにクラウド外からセキュアに接続できれば、クラウドにBIツールを入れる手間が省 …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。