(本サイトは、アフィリエイト広告を利用しています)

ルーターのWAN側アドレスの表示 プログラムから行う方法も解説!

2024年1月16日エントランスシステム

以前、ルーターのWAN側アドレスを知る方法を解説する記事を書きました。本日は、その続編です。プログラミング的な内容になっております。

以前の記事はこちらでご覧ください↓

ちなみに、あなたが、アクセスしてきているIPv4アドレス(WAN側アドレス)は以下のアドレスです。

3.149.233.72

テック大家さんのサーバーでも表示

以前の記事では、cman.jpさんのサーバ上でWAN側IPアドレスが表示できるよ、という説明をしました。

しくみは、以下のようになっています。

LAN内部のクライアント(下図だと192.168.0.100のPC)からルーターを経由してサーバー(下図だとcman.jp)にアクセスします。サーバー側では、クライアントのアドレスが分かるのでそれをHTMLに含めて要求元に返すと、ブラウザの表示を通してWAN側のIPアドレスがわかる、というしくみでした。

冒頭の赤文字のIPアドレスは、この図の「サーバー」が筆者テック大家さんのブログ・サーバーとした場合の結果です。

実は、ちょっとしたPHPのプログラムを書いて表示できるようにしました。テック大家さんのブログサーバーはWordPressなのでPHPのプログラムが動作します。以下のようなコードを埋め込んでみたのでした。

function ( $args, $contents ) {
  $addr = "";
  if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
      $xForwardedFor = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
      if (!empty($xForwardedFor)) {
          $addr = trim($xForwardedFor[0]);
      }
  }
  if ($addr == "" && isset($_SERVER['REMOTE_ADDR'])) {
      $addr = (string)$_SERVER['REMOTE_ADDR'];
  }
  $contents = '<span class="tl-external-ip-address">' . $addr . '</span>';
  return $contents;
};

HTTPのリクエスから判断するコードです。ただし、ホスティングサービス側でロードバランサなどWordPressが動作するサーバーとインターネットの間に中間的な何かが入っている可能性も考慮しています。(参考: HTTPプロキシやロードバランサーを通過して接続したクライアントのIPアドレスを取得するには

ちょっとWAN側IPを知りたい、という趣旨から外れますが、しくみとしてはこんな感じになっているというわけです。

本題とは外れますがWordPressに関しては以下↓の記事に詳しくあります。こちらもご興味あれば合わせてご覧下さい。

コマンドラインからWAN側IPを知りたい

さて、これまではWebブラウザに表示してもらうことでWAN側IPアドレスを知ろう、という発想の解決方法でした。

コマンドライン、または、自分で作ったプログラムを実行することでWAN側IPアドレスを知りたい、という方もいるかも知れません。

そんなときに便利なのがno-ip.comのサービスです。以前、本サイト、テック大家さんでDynamic DNSの記事を書いたときに登場したものです。

no-ip.comを利用するうえでNATのWANアドレスを知りたいときあるでしょう。そんな意図で冒頭の赤字のIPアドレス相当のWAN側IPアドレスを返してくれるURLを用意してくれています。

For IPv4 networks make a request to:

http://ip1.dynupdate.no-ip.com/

For IPv6 networks make a request to:

http://ip1.dynupdate6.no-ip.com/

https://www.noip.com/integrate/ip-detection

サイトによると上記のように、IPv6のアドレスも取得可能です。すばらしいです!

これを使うと(もちろん、ブラウザでも表示されますが)、プログラム的にWAN側IPアドレスを知ることができます。

ちょっとやってみましょう。

curl プログラムを使います。コンソールで以下を叩いてみましょう。

$ curl http://ip1.dynupdate.no-ip.com/

とすると、IPアドレスが返ってきます。以下の動画では、echoコマンドも打っています。これは表示される結果の見やすさのためです。なくても構いません。

プログラムからWAN側IPを知りたい(JavaScript)

次は、別のやり方です。Nodejsのプログラムを書いてWAN側のIPアドレスを取り出します。上記同様にno-ip.comのURLを使っています。

fetch()関数を用いて一行のプログラムでWAN側IPアドレスをコンソールに表示します。

Nodejsを起動して以下をコピペでOKです。Nodejsのバージョンはv18.19.0です。バージョンが古いとfetch()関数が存在しないのでご注意を。

fetch("http://ip1.dynupdate.no-ip.com/").then((r) => r.text()).then((t) => console.log(t))

くれぐれも、上の図で説明したように知りたいルーターの管理するLANの中のPCで実行してくださいね。Cloudのリモートホストにログインなどして上記のコマンドを実行すると違う結果になります。絵を見ておわかりでしょうが、そのホストがいるネットワークのIPアドレスになってしまいます。そこだけご注意を。

ねっ。面白いでしょう。

プロフィール

テック大家さん
ソフトエンジニア兼不動産オーナー。
某超有名日本メーカーにおいてソフトウエア開発畑を30年近く勤務。
かつてはWindowsのアプリ開発や、組み込み機器のソフト開発を行う。プロジェクトマネジメント・オフショア開発・要件管理などの経験あり。現在は、個人開発で、JavaScript/TypeScript/React/Express、PHP/Laravel、Firebase、Google cloud、Arduino(C++)などでプログラミングを楽しむ。
サラリーマンの傍ら不動産経営を始め、現在、1棟モノの賃貸4物件を東京・神奈川に所有。夫婦でおよそ20年の賃貸経営の実績。
最近の物件では、入居者向けフリーWiFiなど、テック系の設備はDIYで自ら構築。
海外MBA取得。