Skip to content

Instantly share code, notes, and snippets.

@xtetsuji
Created February 16, 2015 13:05
Show Gist options
  • Save xtetsuji/a02647d1655de38bd1e1 to your computer and use it in GitHub Desktop.
Save xtetsuji/a02647d1655de38bd1e1 to your computer and use it in GitHub Desktop.
"livedoor Domain" Dynamic DNS client and some tool.
#!/usr/bin/perl
# 2005/02/28 - 2014/02/16
use strict;
use LWP::UserAgent;
use LWP::Simple qw(get);
my $VERBOSE = $ENV{VERBOSE} || $ENV{PS1};
my $IP_ADDR_GET_URL = 'http://hpcgi3.nifty.com/almost-everywhere/remote_ip.cgi'; # IPアドレスを調べるURL
my $DDNS_UPDATE_HOSTNAME = 'tetsuji.jp'; # 設定: アップデートしたいドメイン名
my $USERNAME = "username"; # 設定: ユーザ名
my $PASSWORD = "password"; # 設定: パスワード
my $arg = shift;
my $ip;
if ( $arg =~ /^\d+\.\d+\.\d+\.\d+$/ ) {
$ip = $arg;
} else {
$ip = get($IP_ADDR_GET_URL);
chomp $ip;
if ( !$ip ) {
die "invalid IP recieved.\n";
}
}
my $url = "http://domain.livedoor.com/webapp/dice/update?hostname=$DDNS_UPDATE_HOSTNAME";
if ( $ip ) {
$url .= "&ip=$ip";
}
my $ua = new LWP::UserAgent;
$ua->credentials( "domain.livedoor.com:80", "Anonymous", $USERNAME, $PASSWORD );
my $req = new HTTP::Request( GET => $url );
my $res = $ua->request($req);
if ( $res->is_success ) {
for ( split /\r?\n/, $res->content ) {
if ( /:/ ) {
chomp;
my ($key, $value) = split /:\s*/;
print "$key=$value\n" if $VERBOSE;
}
}
} else {
warn "request is failed\n";
}
__END__
MEMO:
ベーシック認証を利用して更新する場合
登録済みホストのIPアドレスを定期的に自動更新する場合、HTTPクライアントから以下のURLにて更新ができます。
http://domain.livedoor.com/webapp/dice/update?hostname=ホスト名&ip=お客様のIPアドレス
現在アクセスしている端末のIPアドレスを設定する場合、&ip以下の入力を省略することもできます。
IPアドレスの更新が正常に完了した場合、以下の内容が表示されます。
RESULT_CODE: 200
MESSAGE: OK
HOSTNAME: ホスト名
IP: IPアドレス
USER: ユーザーアカウント
NATやIPマスカレードを使用している場合など、詳細な設定方法につきましては、お使いのルータのマニュアル等をご参照ください。
#!/usr/local/bin/perl
print <<END_BODY;
Content-Type: text/plain
$ENV{REMOTE_ADDR}
END_BODY
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment