#!/usr/bin/perl #==============================================================================# use strict; use warnings; use DNS::EasyDNS; use IO::Socket; use IO::Interface; use File::Spec::Functions qw(tmpdir catfile); #==============================================================================# die "Usage: $0 \n" unless @ARGV == 4; my ($user,$pass,$if,$host) = @ARGV; print "Host: $host\n"; print "Iface: $if\n"; my $cache = catfile(tmpdir,"$if.ip"); print "Cache: $cache\n"; my $s = IO::Socket::INET->new(Proto => 'udp') || die "Can't open socket: $!"; my $ip = $s->if_addr($if) || die "Can't get address of [$if]: $!"; print "IP: $ip\n"; my $same = 0; if (-e $cache) { open(my $inp, "< $cache") || die "Can't read $cache: $!"; chomp(my $old_ip = <$inp>); $same = $old_ip eq $ip; close($inp); } if ($same) { print "IP Unchanged\n"; exit 0; } else { if (DNS::EasyDNS->new->update( username => $user, password => $pass, hostname => $host, myip => $ip, )) { if (open(my $outp, "> $cache")) { print $outp "$ip\n"; close($outp); print "IP Update succeeded\n"; exit 0; } else { print "IP Update succeeded but cache write failed: $!\n"; exit 255; } } else { print "IP Update failed: [$@]\n"; exit 255; } } #==============================================================================# __END__ =head1 NAME easydns-by-interface - Update EasyDNS when an interface changes IP =head1 SYNOPSIS easydns-simple =head1 DESCRIPTION This script is designed to be run out of crontab. It will check against a cache file and if the interface IP has changed, it will update your dynamic EasyDNS entry. =head1 OPTIONS =over 4 username - Your EasyDNS username password - The corresponding password interface - The name of the interface to watch (e.g. ppp0) hostname - The name of the host record to be updated =back =head1 AUTHOR This script is Copyright (c) 2002 Gavin Brock gbrock@cpan.org. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut #==============================================================================#