NAME

    CGI::remote_addr - Enhanced version of CGI.pm's "remote_addr()"

SYNOPSIS

      use CGI;
      use CGI::remote_addr;
    
      my $cgi  = CGI->new();
      my $addr = $cgi->remote_addr();

DESCRIPTION

    CGI::remote_addr implements an enhanced version of the remote_addr()
    method provided by CGI.pm, which attempts to return the original IP
    address that the connection originated from (which is not necessarily
    the IP address that we received the connection from).

    Simply loading CGI::remote_addr causes it to over-ride the existing
    remote_addr() method. Do note, though, that this is a global over-ride;
    if you're running under mod_perl you've just over-ridden it for all of
    your applications.

 Differences from CGI.pm

      * We check not only $ENV{REMOTE_ADDR} to find the IP address, but
      also look in $ENV{HTTP_X_FORWARDED_FOR} to find the IP address. If
      $ENV{HTTP_X_FORWARDED_FOR} is defined, we try that first.

      * Only valid IP addresses are returned, regardless of whatever exists
      in $ENV{REMOTE_ADDR} or $ENV{HTTP_X_FORWARDED_FOR}. I've seen lots of
      cases where the values for $ENV{HTTP_X_FORWARDED_FOR} were stuffed
      with garbage, and we make sure that you only get a real IP back.

      * We return IPs in both a scalar and a list context. In scalar
      context you get the first (originating) IP address. In list context
      you get a unique list of all of the IPs that the connection was
      received through.

      * In the event that we cannot find a valid IP address, this method
      returns undef, NOT 127.0.0.1 (like CGI.pm does).

METHODS

    remote_addr()

      Returns the IP address(es) of the remote host.

AUTHOR

    Graham TerMarsch (cpan@howlingfrog.com)

COPYRIGHT

    Copyright (C) 2008 Graham TerMarsch. All Rights Reserved.

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

SEE ALSO

    CGI