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
-, ,

執筆者:

関連記事

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

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

宅内CentOS8にSoftEtherをインストールしてインターネット外部からLAN参加出来るVPN環境を無料で作る

2020/04現在、COVID-19の影響を受けて自宅から会社のVPNに繋いでリモートワークに移行している方も増えてきたんじゃないでしょうか。(残念ながら私はまだ出社必須ですが(-_-; そもそも、も …

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

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

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

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

JavaとPerlでTCPソケット通信

目次1 はじめに2 対象読者3 実装3.1 TCPサーバ(Perl)3.2 TCPクライアント(Java)3.3 実行4 まとめ はじめに 前回の続きです。One IT ThingJavaとPerlで …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯現役技術者を目指しています。健康第一。