NAME
    CGI::Application::Plugin::RemoteIP - Unified Remote IP handling

SYNOPSIS
      use CGI::Application::Plugin::RemoteIP;


      # Your application
      sub run_mode {
        my ($self) = ( @_);

        my $ip = $self->remote_ip();
      }

DESCRIPTION
    This module simplifies the detection of the remote IP address of your
    visitors.

MOTIVATION
    This module allows you to remove scattered references in your code, such
    as:

        # Get IP
        my $ip = $ENV{'REMOTE_ADDR'};

        # Remove faux IPv6-prefix.
        $ip =~ s/^::ffff://g;
        ..

    Instead your code and use the simpler expression:

        my $ip = $self->remote_ip();

SECURITY
    The code in this module will successfully understand the
    "X-Forwarded-For" header and trust it.

    Unless you have setup any proxy, or webserver, to scrub this header this
    means the value that is used is at risk of being spoofed, bogus, or
    otherwise malicious.

METHODS
  import
    Add our three public-methods into the caller's namespace:

    remote_ip
            The remote IP of the client.

    is_ipv4 A method to return 1 if the visitor is using IPv4 and 0
            otherwise.

    is_ipv6 A method to return 1 if the visitor is using IPv6 and 0
            otherwise.

  remote_ip
    Return the remote IP of the visitor, whether via the "X-Forwarded-For"
    header or via the standard CGI environmental variable "REMOTE_ADDR".

  is_ipv4
    Determine whether the remote IP address is IPv4.

  is_ipv6
    Determine whether the remote IP address is IPv6.

AUTHOR
    Steve Kemp <steve@steve.org.uk>

COPYRIGHT AND LICENSE
    Copyright (C) 2015 Steve Kemp <steve@steve.org.uk>.

    This library is free software. You can modify and or distribute it under
    the same terms as Perl itself.