SOHOルータの状態を取得(Net::UPnP::ControlPointを利用)
最近は、NATを利用したSOHOルータを使ってイントラネットを構築する事が一般的になってきました。 それらのSOHOルータの多くは、UPnP機能を有しています。 UPnPを利用すると、SOHOルータの情報を取得したり、設定を行ったりできます。
ここでは、PPPを使って接続しているSOHOルータの状態を取得する方法を説明したいと思います。 取得できる情報は、外部との接続性があるかどうか、最新のエラー、SOHOルータの起動継続時間です。
IPアドレス取得サンプル
サンプルです。
#!/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";
# 状態取得サービスを指定
$resp = $serv->postaction("GetStatusInfo");
if ($resp->getstatuscode() != 200) {
next;
}
# 結果の取得
$args = $resp->getargumentlist();
# 接続状態
print "ConnectionStatus : ";
print $args->{'NewConnectionStatus'};
print "\n";
# 最も最近発生したエラー
print "LastConnectionError : ";
print $args->{'NewLastConnectionError'};
print "\n";
# 起動継続時間(秒)
print "Uptime : ";
print $args->{'NewUptime'};
print "\n";
}
exit;
ConnectionStatusは以下の値をとり得ます。 Optionalと書いてある状態は実装されていない可能性があります。
値 | Required/Optional | 内容 |
---|---|---|
Unconfigured | R | 未設定 |
Connecting | O | 接続作業中 |
Authenticating | O | 認証中 |
Connected | R | 接続済み |
PendingDisconnect | O | Disconnecting状態へ移行中 |
Disconnecting | O | 切断作業中 |
Disconnected | R | 未接続 |