use Data::Validate::IP qw(is_ip is_public_ip is_loopback_ip); my $ip; my @IPs; if (defined $ENV{HTTP_X_FORWARDED_FOR}) { @IPs=split /,/, $ENV{HTTP_X_FORWARDED_FOR}; }; unshift (@IPs, $ENV{REMOTE_ADDR}); foreach $check (@IPs) { $check =~ s/^\s*(.*?)\s*$/\1/g; if (is_ip($check)) { if (defined $ip) { if ( (not is_public_ip($check)) or (is_loopback_ip($check)) or ($check eq "41.79.21.90") ) { $check = $ip; } } $ip = $check; } } print "Content-type: text/html\nCache-Control: max-age=0,no-cache,no-store,post-check=0,pre-check=0\n\n