34

I need to retrieve a user's IP. My localhost is returning ::1 as the IP. I am curious, if this is an expected behaviour? I'm running MAMP on Snow Leopard.

trejder
  • 17,148
  • 27
  • 124
  • 216
Mild Fuzz
  • 29,463
  • 31
  • 100
  • 148
  • possible duplicate of [PHP $_SERVER\['REMOTE_HOST'\] returns ::1](http://stackoverflow.com/questions/2482033/php-serverremote-host-returns-1) – Pekka Sep 13 '10 at 10:17

5 Answers5

38

Same question, and found a valid solution, tested, works well. I wanted to have the ip addy - of 127.0.0.1 as well instead of having to accept the the ::1 and debate the whole IPv4/6 issues. So, i trolled for a few moments and fell onto a 2008 comment made by @Brad - here: http://board.issociate.de/thread/489575/SERVERquotREMOTEADDRquot-returning-1.html

Summarizing - (on Mac OS - Mountain Lion in particular)

sudo vi /etc/apache2/httpd.conf

Find where your apache is 'listen'-ing to the ips/ports, etc... Typically this will be a line looking like this

Listen 80

Make it look like this:

Listen 127.0.0.1:80

Resave it. Restart Apache. Voila!

Now $_SERVER[REMOTE_ADDR] will look like this 127.0.0.1.

Hope it helps someone.

Bill Ortell
  • 837
  • 8
  • 12
31

::1 is the IPv6 equivalent of IPv4 127.0.0.1 address.

You can convert IPv6 address to IPv4 address using function inet_ntop() as Adam, said.

http://php.net/manual/en/function.inet-ntop.php

Tomasz Kowalczyk
  • 10,472
  • 6
  • 52
  • 68
6

Modifying the /etc/apache2/httpd.conf or even /private/etc/hosts isn't the solution. It's returning ::1 because it's the IPv6 equivalent to the old (but gold) IPv4's 127.0.0.1. As it's defined in the /privates/etc/hosts, whenever you access http://localhost it assumes IPv6 ::1. So it's the expected behavior.

A workaround would be to access http://127.0.0.1 directly. It'll work just fine. But remember that IPv6 availability is increasing. You could make sure your server (after deployment) will only respond to IPv4 but in the mid term, if your site/web app does not handle both IPv4 and IPv6 properly, there's a great chance something will go wrong within 1/2 years. Or sooner, we never know.

Isaias Soares
  • 111
  • 1
  • 3
2

for who has not reslove this issue it sounds that the hosts file is missing or the line

127.0.0.1       localhost   

in etc\hosts LINUX

in /private/etc/hosts MAC devices

in \%WINDIR%\system32\drivers\etc\hosts WINDOWS xp/vista/7/8/

whene the file hosts is removed or missed or the line too the IPV6 will be set by default ...

Hichem
  • 1,111
  • 11
  • 30
0

You have to disable IPv6 support in your OS for apache to stop showing these IPv6 format addresses, when you want the IPv4 format. I disabled IPv6 support and its working as expected now.

I recently ran into this issue, though i don't ever remember enabling ipv6 support on my Windows 7 system, could be done by Microsoft in one of their updates (maybe).

Zubair1
  • 2,770
  • 3
  • 31
  • 39