rjschwei has asked for the wisdom of the Perl Monks concerning the following question:

In version 2.4 of Apache the API changed 1 from remote_addr() to client_addr() but there is a bit more trickery, which is where I am stuck, than just converting from:

my $clientIP = $r->connection()->remote_ip()

to:

my $clientIP = $r->connection()->client_addr();

When printing $clientIP to a log file now I get:

APR::SockAddr=SCALAR(0x7f205425ecf8)

if I dereference this I just get an integer thus that's not useful. In the documentation 2 for mod_perl I found get_ip, but this does not exists and the doc is for 2.0, not 2.4.

So, who knows how I turn $r->connection()->client_addr(), where $r is the request object into an IP address?

Thanks,

1 https://httpd.apache.org/docs/2.4/developer/new_api_2_4.html

2 https://perl.apache.org/docs/2.0/api/APR/SockAddr.html
  • Comment on Getting the client IP in Apache, version 2.4

Replies are listed 'Best First'.
Re: Getting the client IP in Apache, version 2.4
by Corion (Patriarch) on Jan 04, 2017 at 20:07 UTC
      Yeah obviously I turned things around in my original message. However, the problem description is correct:

      Can't locate object method "ip_get" via package "APR::SockAddr"

      So with Apache 2.4 the documentation and implementation are out of kilter.
        OK, answering my own question.

        use APR::SockAddr;

        is obviously required, after which

        $r->connection()->client_addr()->ip_get;

        Works as expected.

        Sorry for the noise