SOHOルータのExternal IPアドレスを取得(Net::UPnP::ControlPointを利用)

最近は、NATを利用したSOHOルータを使ってイントラネットを構築する事が一般的になってきました。 それらのSOHOルータの多くは、UPnP機能を有しています。 UPnPを利用すると、SOHOルータの情報を取得したり、設定を行ったりできます。

ここでは、PPPを使って接続しているSOHOルータの外部側ネットワークインターフェースに割り当てられているIPアドレスを取得する方法を説明したいと思います。

IPアドレス取得サンプル

SOHOルータがPPPで取得した外部アドレス(一般的にはグローバルIPアドレス)を、UPnPを使ってイントラネット側(家庭側)から取得する方法です。


#!/usr/bin/perl

use Net::UPnP::ControlPoint;

$upnp = Net::UPnP::ControlPoint->new();

# UPnP deviceを検索
@devs = $upnp->search(st => 'upnp:rootdevice', mx => 3);

$n = 0;
foreach $dev (@devs) {
  print $n;
  print "\n";
  $n++;

  $type = $dev->getdevicetype();
  if ($type ne 'urn:schemas-upnp-org:device:InternetGatewayDevice:1') {
    next;
  }

  $serv = $dev->getservicebyname(
             'urn:schemas-upnp-org:service:WANPPPConnection:1');
  unless ($serv) {
    next;
  }

  # デバイスの通名を表示
  print $dev->getfriendlyname();
  print "\n";

  # 外部IPアドレス取得サービスを指定
  $resp = $serv->postaction("GetExternalIPAddress");
  if ($resp->getstatuscode() != 200) {
    next;
  }

  # 結果を取得
  $args = $resp->getargumentlist();

  # 外部IPアドレスを表示
  print $args->{'NewExternalIPAddress'};
}

exit;

プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!