#!/perl/bin/perl.exe use strict; use warnings; use LWP::Simple; use MIME::Lite; my $reflector = "http://your.webhost.com/cgi-bin/ipreflect.cgi"; my $logfile = "ip.log"; # Get IP from an IP reflector server. my $ip = get $reflector; chomp $ip; my $now = localtime; $ip = "Reflector server down." unless ( $ip =~ m/^\d+\.\d+\.\d+\.\d+$/ or $ip =~ m/Not Available/i ); # Read log to determine if the IP changed since last test. my $ip_changed = ""; if ( -e $logfile ) { open my $inlog, "<", $logfile or die "Can't read logfile.\n$!"; while ( <$inlog> ) { next unless eof; chomp; my $last_ip = ( split /\s+=>\s+/ )[1]; $last_ip =~ s/\*$//; $ip_changed = ( $last_ip ne $ip ) ? "*" : ""; } close $inlog; } else { # If the logfile doesn't exist, assume IP changed. # This forces an update to the remote server anytime # the logfile is deleted. Remember, for a fresh start # at both ends, just delete the local logfile. $ip_changed = "*"; } # Update log. open my $log, ">>", $logfile or die "Can't open output logfile.\n$!"; print "$now => $ip$ip_changed\n"; # Screen output. print $log "$now => $ip$ip_changed\n"; # Logfile output. close $log or die "Couldn't close output file.\n$!"; # If the IP changed, send the new IP to remote server via email. if ( $ip_changed and $ip =~ m/^\d+\.\d+\.\d+\.\d+$/ ) { my $msg = MIME::Lite->new( From =>'your@email.address', To =>'your.email@address.on.web.host', Subject =>"[IP Log] $now", Data =>"Updated: $now\nIP: $ip\n" ); MIME::Lite->send( 'smtp', "your.isp.smtp.server", Timeout => 60 ); $msg->send; }