network

グローバルIP確認をコマンド化

投稿日:

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

手で調べるのは面倒くさいです。停電なんかでONUが再起動してIPが変わったりするとゲンナリしたりします。

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

この類のサービスは古くから数有れど、ip-api.comで取れる情報量の多さは若干怖いです。

実行環境

  • 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が貰えます。
(jqにパイプして整形しています)

正確ではないにせよ情報取れ過ぎて怖い。

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

執筆者:

関連記事

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

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

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

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

whoisコマンドで新興TLDのドメイン創設日を調べる

各ドメインの情報は属するトップレベルドメイン(.jpなど)が管理するDNSサーバによって管理されています。この情報を辿って指定したドメインの情報を参照する仕組みが「whois」です。 最近は各トップレ …

JavaとPerlでUDPソケット通信

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

JavaとPerlでTCPソケット通信

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

 

shingo.nakanishi
 

東京在勤、職歴2n年中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めたアウトプット用プライベートWeb日記数が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけど仲間が居なくて孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。