Foros del Web » Programando para Internet » PHP »

codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname

Estas en el tema de codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname en el foro de PHP en Foros del Web. Buenas las tengan todos, Hace ya un tiempo encontre en internet un script para conocer la IP local, IP pública, la IP del proxy y ...
  #1 (permalink)  
Antiguo 07/10/2012, 14:49
Avatar de vargasrenee  
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 16 años, 5 meses
Puntos: 1
Pregunta codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname

Buenas las tengan todos,

Hace ya un tiempo encontre en internet un script para conocer la IP local, IP pública, la IP del proxy y el hostname de la IP pública, de las personas que contestaban un cuestionario en linea. El script es el siguiente:

Código PHP:
# codigo que intenta mostrar la IP local, IP pública, la IP del proxy y el hostname de la IP pública

if($_SERVER["HTTP_X_FORWARDED_FOR"])
{
    if(
$pos=strpos($_SERVER["HTTP_X_FORWARDED_FOR"]," "))
    {
        echo 
"IP local: ".substr($_SERVER["HTTP_X_FORWARDED_FOR"],0,$pos)." - IP Pública: ".substr($_SERVER["HTTP_X_FORWARDED_FOR"],$pos+1);
        
$hostlocal=substr($_SERVER["HTTP_X_FORWARDED_FOR"],$pos+1);
    }else{
        echo 
"&ippublica=".$_SERVER["HTTP_X_FORWARDED_FOR"];
        
$hostlocal=$_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    if(
$_SERVER["REMOTE_ADDR"])
        echo 
" - Proxy: ".$_SERVER["REMOTE_ADDR"];
}else{
    echo 
"&ippublica=".$_SERVER["REMOTE_ADDR"];
    
$hostlocal=$_SERVER["REMOTE_ADDR"];
    if(
$hostlocal!=$_SERVER["REMOTE_ADDR"])
        echo 
" - Hostname: ".$hostlocal;
}
$hostname=gethostbyaddr($hostlocal);
if(
$hostlocal!=$hostname)
    echo 
"&hostname=".$hostname;

   if (isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip $_SERVER['HTTP_X_FORWARDED_FOR']; }  
   elseif (isset(
$_SERVER['HTTP_VIA'])) { $ip $_SERVER['HTTP_VIA']; }  
   elseif (isset(
$_SERVER['REMOTE_ADDR'])) { $ip $_SERVER['REMOTE_ADDR']; }
   else { 
$ip "Desconocido"; }
   echo 
"&ip=" $ip "&dns=".$_SERVER['HTTP_USER_AGENT']; 

Todo iba bien hasta que mi hosting actualizo la version de php a la version 5.4.7 y aunque algunos scripts siguen trabajando normal, en especial este para conocer la ip me da el siguente error:

[an error occurred while processing this directive]

Alguna idea de lo que tengo que hacer para hacerlo funcionar de nuevo. Ya he estado googleando pero no encuentro nada y mi experiencie con php es mas que "null" :P

Cualquier ayuda seria bien recibida!

G.
  #2 (permalink)  
Antiguo 07/10/2012, 19:17
Avatar de galexisg  
Fecha de Ingreso: julio-2012
Mensajes: 2
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname

prueba con este codigo

Código PHP:
Ver original
  1. function ObtenerIP()
  2.     {
  3.        $ip = "";
  4.        if(isset($_SERVER))
  5.        {
  6.            if (!empty($_SERVER['HTTP_CLIENT_IP']))
  7.            {
  8.                $ip=$_SERVER['HTTP_CLIENT_IP'];
  9.             }
  10.             elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
  11.             {
  12.                 $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
  13.             }
  14.             else
  15.             {
  16.                 $ip=$_SERVER['REMOTE_ADDR'];
  17.             }
  18.        }
  19.        else
  20.        {
  21.             if ( getenv( 'HTTP_CLIENT_IP' ) )
  22.             {
  23.                 $ip = getenv( 'HTTP_CLIENT_IP' );
  24.             }
  25.             elseif( getenv( 'HTTP_X_FORWARDED_FOR' ) )
  26.             {
  27.                 $ip = getenv( 'HTTP_X_FORWARDED_FOR' );
  28.             }
  29.             else
  30.             {
  31.                 $ip = getenv( 'REMOTE_ADDR' );
  32.             }
  33.        }  
  34.         // En algunos casos muy raros la ip es devuelta repetida dos veces separada por coma
  35.        if(strstr($ip,','))
  36.        {
  37.             $ip = array_shift(explode(',',$ip));
  38.        }
  39.        return $ip;
  40.     }

te retorna la ip

uso

Código PHP:
Ver original
  1. $ip = ObtenerIP();
  #3 (permalink)  
Antiguo 08/10/2012, 05:15
Avatar de vargasrenee  
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname

Muchas Gracias galexisg, pero sigo teniendo el mismo problema... el error [an error occurred while processing this directive]

Incluso si solo subo el codigo

Código PHP:
$hostname gethostbyaddr($_SERVER['REMOTE_ADDR']);

echo 
$hostname
Me dice lo mismo..
Estoy leyendo que tiene que ver con la eliminacion de la funcion de register_globals

He visto el error log que dice

[14-Aug-2012 16:47:07] PHP Warning: gethostbyaddr() [<a href='function.gethostbyaddr'>function.gethostbyad dr</a>]: Address is not a valid IPv4 or IPv6 address

Sin embargo, el error comenzo apenas una semana atras y no desde la fecha que menciona el log. Aun asi he intentado cambiar

$hostname=gethostbyaddr($hostlocal);

por

$hostname = gethostbyaddr $_SERVER['REMOTE_ADDR'];

pero nada el error sigue siendo el mismo

Gracias de nuevo!
  #4 (permalink)  
Antiguo 08/10/2012, 07:04
Avatar de vargasrenee  
Fecha de Ingreso: junio-2008
Mensajes: 32
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname

Done!!!

Al final el codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname de la IP pública funcionando en php5 quedo como sigue

Código PHP:
<?php

# codigo que intenta mostrar la IP local, IP pública, la IP del proxy y el hostname de la IP pública

if($_SERVER["HTTP_X_FORWARDED_FOR"])
{
    if(
$pos=strpos($_SERVER["HTTP_X_FORWARDED_FOR"]," "))
    {
        echo 
"IP local: ".substr($_SERVER["HTTP_X_FORWARDED_FOR"],0,$pos)." - IP Pública: ".substr($_SERVER["HTTP_X_FORWARDED_FOR"],$pos+1);
        
$hostlocal=substr($_SERVER["HTTP_X_FORWARDED_FOR"],$pos+1);
    }else{
        echo 
"&ippublica=".$_SERVER["HTTP_X_FORWARDED_FOR"];
        
$hostlocal=$_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    if(
$_SERVER["REMOTE_ADDR"])
        echo 
" - Proxy: ".$_SERVER["REMOTE_ADDR"];
}else{
    echo 
"&ippublica=".$_SERVER["REMOTE_ADDR"];
    
$hostlocal=$_SERVER["REMOTE_ADDR"];
    if(
$hostlocal!=$_SERVER["REMOTE_ADDR"])
        echo 
" - Hostname: ".$hostlocal;
}
$hostname gethostbyaddr ($_SERVER['REMOTE_ADDR']);
if(
$hostlocal!=$hostname)
    echo 
"&hostname=".$hostname;

   if (isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip $_SERVER['HTTP_X_FORWARDED_FOR']; }  
   elseif (isset(
$_SERVER['HTTP_VIA'])) { $ip $_SERVER['HTTP_VIA']; }  
   elseif (isset(
$_SERVER['REMOTE_ADDR'])) { $ip $_SERVER['REMOTE_ADDR']; }
   else { 
$ip "Desconocido"; }
   echo 
"&ip=" $ip "&dns=".$_SERVER['HTTP_USER_AGENT'];
?>
el cambio estuvo en:
Código PHP:
$hostname=gethostbyaddr($hostlocal); 
por

Código PHP:
$hostname gethostbyaddr($_SERVER['REMOTE_ADDR']); 
Ademas y grave error de mi parte, fue no checar primero el php.ini, el cual tenia activado el register_globals. Se soluciono eliminando dicho archivo de la carpeta que contiene el php

Saludos
G.

pd. por cierto, cómo se hace para que el script que se muestra aparezca con número de línea y con sombras intercaladas, tal como lo ha hecho @galexisg en sus ejemplos.
  #5 (permalink)  
Antiguo 08/10/2012, 07:36
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: codigo para mostrar la IP local, IP pública, la IP del proxy y el hostname

OJO: tengan en cuenta que un Proxy o Router de red bien configurado puede estar bien protegido y las IP que traten de obtener sean las propias del proxy, recordemos que su objetivo es mantener la privacidad de su extremo de la red, así como en sistemas distribuidos, que se hacen pasar por un solo componente.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: hostname, ip, local, php5
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:20.