愛島発電所

QT SOLAR 愛島発電所

本日の発電量
199 kWh
現在の日射量
277 Wh/㎡
現在の外気温
17.4 ℃

(2024/05/20 08:27 更新)

下増田発電所

QT SOLAR 下増田発電所

本日の発電量
24 kWh
現在の日射量
184.5 Wh/㎡
現在の外気温
17.4 ℃

(2024/05/20 08:36 更新)

北原東発電所

QT SOLAR 北原東発電所

本日の発電量
38 kWh
現在の日射量
120 Wh/㎡
現在の外気温
17.1 ℃

(2024/05/20 08:34 更新)

長久良辺発電所

QT SOLAR 長久良辺発電所

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

(2024/05/20 08:26 更新)

白坂発電所

QT SOLAR 白坂発電所

本日の発電量
43 kWh
現在の日射量
190 Wh/㎡
現在の外気温
20.7 ℃

(2024/05/20 08:32 更新)

清水沢発電所

QT SOLAR 清水沢発電所

本日の発電量
41 kWh
現在の日射量
223 Wh/㎡
現在の外気温
18.3 ℃

(2024/05/20 08:34 更新)

グローバル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のサービス提供元によって書式は異なりますから、それに合わせましょう。