↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] YouTubeも始めました→


2009-06-17(Wed) ルータから外側のアドレスを取得する [長年日記]

ルータから外側のアドレスを取得する

以前つかっていたNEC atermの時にはADSLモデム Aterm WD735GV の WAN 側 IP アドレスを取得する方法に書いてある

#!/usr/bin/perl

use SOAP::Lite;

my $soap = SOAP::Lite

->ns('urn:schemas-upnp-org:service:WANPPPConnection:1')

->proxy('http://te4100:2869/upnp/control/WANPPPConn1');

my $som = $soap->GetExternalIPAddress();

my $ip = $som->valueof('//GetExternalIPAddressResponse/NewExternalIPAddress');

print "$ip\n";

で取得できていたけど、最近利用しているFujitsu FA11-W5では、これでは動かなかった。

UPnPのサービス名がちがっているのかもしれないと思って、探してみることにした。

まず、ルータのUPuPを見つけるために「 適当なスクリプト集」のssdp:discoverの改良版を利用してルータのアクセスURLを見つけた

$ UPnPls.pl

M-SEARCH * HTTP/1.1

Host:239.255.255.250:1900

Man:"ssdp:discover"

ST:upnp:rootdevice

MX:3

------------------------------

HTTP/1.1 200 OK

Server: Unknown/0.0 UPnP/1.0 Web Server

EXT:

LOCATION: http://192.168.0.1:80/InternetGatewayDevice.xml

CACHE-CONTROL: max-age = 1830

ST: upnp:rootdevice

USN: uuid:69ab1a4c-ea86-b043-5396-19384cb7aebf::upnp:rootdevice

==============================

------------------------------

HTTP/1.1 200 OK

CACHE-CONTROL: max-age=60

EXT:

LOCATION: http://192.168.0.20:51001/MediaServerGen.xml

SERVER: MontaVista Linux/2.1 UPnP/1.0 SONY NSC SDK (UPnP Core)/1.3.4

ST: upnp:rootdevice

USN: uuid:68ea2c50-9bf1-129d-2813-123456789012::upnp:rootdevice

X-AV-Server-Info: av = 2.0 ; cn = "Sony Corporation" ; mn = "CSV-E77" ; mv = "1.0.0" ;

X-AV-Physical-Unit-Info: pa = "CoCoon Channel Server CSV-E77" ; pl = b13D2b9OuENPWd5ZufaWgVadfadyVIEeitVFtNec= ;

==============================

CoCoonも見つかっているけど、ルータはInternetGatewayDevice.xmlでルートデバイスのDevice description情報がとれることが分かった。

つぎに、そのURLにアクセスすると

<service>

<serviceType>urn:schemas-upnp-org:service:WANPPPConnection:1</serviceType>

<serviceId>urn:upnp-org:serviceId:WANPPPConn1</serviceId>

<SCPDURL>WANPPPConnection.xml</SCPDURL>

<controlURL>/EmWeb/UPnP/Control/4</controlURL>

<eventSubURL>/EmWeb/UPnP/Eventing/4</eventSubURL>

</service>

[http://FA11-W5/InternetGatewayDevice.xmlより引用]

となっていて、controlURLが分かった。そこで

*** atermGrobalIP 2007-09-25 13:46:41.000000000 +0900

--- fw11-w5-GrolbalIP 2009-06-17 14:09:00.000000000 +0900

***************

*** 2,8 ****

use SOAP::Lite;

my $soap = SOAP::Lite

->ns('urn:schemas-upnp-org:service:WANPPPConnection:1')

! ->proxy('http://te4100:2869/upnp/control/WANPPPConn1');

my $som = $soap->GetExternalIPAddress();

my $ip = $som->valueof('//GetExternalIPAddressResponse/NewExternalIPAddress');

print "$ip\n";

--- 2,8 ----

use SOAP::Lite;

my $soap = SOAP::Lite

->ns('urn:schemas-upnp-org:service:WANPPPConnection:1')

! ->proxy('http://te4100/EmWeb/UPnP/Control/4');

my $som = $soap->GetExternalIPAddress();

my $ip = $som->valueof('//GetExternalIPAddressResponse/NewExternalIPAddress');

print "$ip\n";

とproxyの所を微妙に変えれば良いみたい。念のために

<action>

<name>GetExternalIPAddress</name>

−<argumentList>

[http://FW11-W5/WANPPPConnection.xmlより引用]

で、同じサービスが有ることを確認して、実行した見たら見事外側のIPアドレスを取得できた。

参考: 「UPnPを利用してグローバルIPを取得する - 2」 UPnPでのグローバルIPを取る仕組みについて解説

本日のPingbacks(全0件)

Google Web検索 on-o.com内を検索