愛島発電所

QT SOLAR 愛島発電所

本日の発電量
0 kWh
現在の日射量
5 Wh/㎡
現在の外気温
20.0 ℃

(2024/09/14 06:07 更新)

下増田発電所

QT SOLAR 下増田発電所

本日の発電量
0 kWh
現在の日射量
1.7 Wh/㎡
現在の外気温
20.6 ℃

(2024/09/14 06:03 更新)

北原東発電所

QT SOLAR 北原東発電所

本日の発電量
0 kWh
現在の日射量
9 Wh/㎡
現在の外気温
21.0 ℃

(2024/09/14 05:49 更新)

長久良辺発電所

QT SOLAR 長久良辺発電所

本日の発電量
0 kWh
現在の日射量
6 Wh/㎡
現在の外気温
19.9 ℃

(2024/09/14 06:07 更新)

白坂発電所

QT SOLAR 白坂発電所

本日の発電量
0 kWh
現在の日射量
6 Wh/㎡
現在の外気温
20.4 ℃

(2024/09/14 05:52 更新)

清水沢発電所

QT SOLAR 清水沢発電所

本日の発電量
0 kWh
現在の日射量
9 Wh/㎡
現在の外気温
19.3 ℃

(2024/09/14 06:00 更新)

グローバルIPの取得[基本編] | Perlで作るサーバーサービス

割り当てられたグローバルIPの取得方法です。

各種サーバーサービスの運営では、その場所(IPアドレス)をユーザーに伝える仕組みが必要となりますが、通常これをドメイン名を通して行います。

固定IPの場合は、DNSにドメイン名とIPアドレスの対応関係を登録して終わりですが、動的IPの場合(プロバイダと特別に契約をしない限り動的IPです)、その都度、DNSに対して登録内容の更新を行っていかなければなりません。

これを行う仕組みは、DDNSと呼ばれるものでDNSサーバー側がIPアドレス更新のためのサービスプログラムを用意することで実現しています。

さて、グローバルIPの取得方法です。

意外なことにLAN側からルーターのグローバルIPを知るには、コマンド一発というわけにはいかないようです。

例えば、nslookupではどうでしょうか。

nslookup foo.bar

確かにこれでドメインに関連付けられたIPアドレスが取得出来ます。が、それはDNSにそのように登録されているからそうだと分かる話であって、今回はそのDNSに登録すべきIPアドレスを知ろうとしてるわけですから、これではあまり意味がありません。

では、ifconfigでしょうか。しかし、これもグローバルIPに関する情報は出てきません。

実際のところ、内側(LAN)からは外側(WAN)からどう見えているかは分からないのです。だとすると、どのようにすれば良いか分かります。

  • 外側から教えて貰う
  • 内側と外側の橋渡しをするルーターに問い合わせる

今回は、外側に教えて貰う方法です。

globalip.cgi

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print $ENV{'REMOTE_ADDR'};
exit;

外側にあるレンタルサーバーにリモートアドレスを通知するスクリプトを置きます。

最も簡単にやるならウェブサイト上に置けば良いです。

で、このウェブサイトのアドレスが「foo.bar」だったとして、内側からは次のようにします。

と、その前にこれも使います。

perlスクリプトは以下の通り。

showmeglobalid.pl

#!/usr/bin/perl
use HttpUtility;
$http = HttpUtility->new();
$status = $http->request("http://foo.bar/globalip.cgi");
print $http->get();
exit;

これをコマンドとしてシェルから実行すれば良いわけです。

DDNSへの登録をするなら、こんな感じ。

regddns.pl

#!/usr/bin/perl
use HttpUtility;
my $http = HttpUtility->new();
my $status = $http->request("http://foo.bar/globalip.cgi");
my $ip = $http->get();
my $url = "http://ddns.domainservice.bar/cgi-bin/regist.cgi";
$url .= "?account=hoge";
$url .= "&password=piyo";
$url .= "&subdomain=sub";
$url .= "&ip=".$ip;
$http->request($url);
$http->get();
exit;

当然のことながら、DDNSのサービス提供元によって書式は異なりますから、それに合わせましょう。