<?php
  // Por Marcos Regis
$ip = (isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'unknown'); // pegando o endere�o remoto ou definindo-o como desconhecido
$forward = ( isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:false);  // pegando o endere�o que foi repassado (se houver)
$ip=( ($ip=='unknown' &&  $foward && $forward!='unknown' )?$forward:$ip); // verifica se existe um redirecionado e o retorna, caso contr�rio mant�m o remoto.

/*
Ob.: As vezes, alguns IPs s�o mascarados ou simplesmente s�o passados como ocultos e n�o � poss�vel ter fidelidade das informa��es.
Este script � �til nos casos de que temos um servidor WEB fora da empresa e precisamos identificar de qual m�quina partiu a requisi��o.
Supomos que poss�imos em nossa empres uma rede interna com 10 micros e estes est�o utilizando acesso a Internet atrav�s do servidor proxy. Embora cada um tenha um IP diferente dentro da empresa (geralmente classe C) o $_SERVER['REMOTE_ADDR'] retornar� o IP do Proxy ou do router que estiver fazendo o NAT e n�o ser� poss�vel saber de qual micro partiu a requisi��o. $_SERVER['HTTP_X_FORWARDED_FOR'] ir� retornar o IP que foi redirecionado (nulo se n�o houver).

Outro fator � a existencia de um firewall no ip externo que redireciona para o IP interno dando um Forward e alterando o valor do IP. Isso faz com que REMOTE_ADDR tenha o ip do seu firewall ao inv�s do ip do cliente.
Para estes casos deve-se alterar a linha
$ip = (isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'unknown');

para 

$ip = (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']!='IP DO FIREWALL'?$_SERVER['REMOTE_ADDR']:'unknown'); 
Espero que seja �til