@arnested
use strict;
use Net::DNS;
use Net::HTTPS;
use Net::Netrc;
my @domains = ('arnested.dk',
'rrc-wurfel.dk',
'xn--rrc-wrfel-u9a.dk', 'xn--jssen-vua.dk', 'joessen.dk',
'ctan.dk');
my $resolver = Net::DNS::Resolver->new;
my $ip = get_ip('arnested.dyndns.org');
if ( not defined $ip ) {
die "Could not resolve my own IP number.\n";
}
my $server = Net::HTTPS->new(Host => "ssl.gratisdns.dk") || die $@;
my $mach = Net::Netrc->lookup('ssl.gratisdns.dk'); my $username = $mach->login; my $password = $mach->password;
$resolver->nameservers("ns1.gratisdns.dk", "ns2.gratisdns.dk");
foreach my $domain (@domains) {
update_ip($domain);
}
sub get_ip {
my $answer = $resolver->query($_[0], 'A');
if ($answer) {
foreach my $rr (grep {$_->{'type'} eq "A"} $answer->answer) {
return $rr->{'address'};
}
}
}
sub update_ip {
my $host = $_[0];
my @domain = split /\./, $host;
my $domain = $domain[$#domain-1] . "." . $domain[$#domain];
my $hip = get_ip($host);
if ( defined $hip) {
if ( $ip ne $hip ) {
$server->write_request(GET => "/ddns.phtml?u=$username&p=$password&d=$host&h=$domain");
}
} else {
warn "Could not resolve IP number for $domain.\n";
}
}