愛島発電所

QT SOLAR 愛島発電所

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

(2024/07/27 20:03 更新)

下増田発電所

QT SOLAR 下増田発電所

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

(2024/07/27 19:56 更新)

北原東発電所

QT SOLAR 北原東発電所

本日の発電量
205 kWh
現在の日射量
4 Wh/㎡
現在の外気温
23.0 ℃

(2024/07/27 19:57 更新)

長久良辺発電所

QT SOLAR 長久良辺発電所

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

(2024/07/27 20:03 更新)

白坂発電所

QT SOLAR 白坂発電所

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

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

清水沢発電所

QT SOLAR 清水沢発電所

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

(2024/07/27 20:06 更新)

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