Ещё плюс ко всему в $HTTP_X_FORWARDER_FOR может быть не один ip адрес, а несколько, зависит от того сколько проксей было пройдено.
Вобщем вот моя функция, пользуйтесь на здоровье:
function get_ips() {
    $result[\'IP\']=GetEnv(\'HTTP_CLIENT_IP\');
    $result[\'PROXY\']=GetEnv(\'HTTP_X_FORWARDED_FOR\');
    if ($result[\'PROXY\']) {
        $tmp=explode(",", str_replace(" ", "", $result[\'PROXY\']));
        $result[\'IP\']=$tmp[sizeof($tmp)-1];
        if(!preg_match("/^[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}$/", $result[\'IP\']))
            $result[\'IP\']="";
        $result[\'PROXY\']=$_SERVER[\'REMOTE_ADDR\'];
    }
    elseif (!$result[\'IP\'])
        $result[\'IP\']=$_SERVER[\'REMOTE_ADDR\'];
    return $result;
}
Функция возвращает массив, состоящий из двух элементов:
IP - ip адрес пользователя, если пусто значит было unknown.
PROXY - адрес последнего пройденого прокси сервера.