por para obtener http_client_ip funcion con cliente php ip

para - obtener ip php mysql



¿Cómo obtener IP Real de Visitante? (10)

¡Esto funciona para Windows y Linux! No importa si es localhost o en línea.

function getIP() { $ip = $_SERVER[''SERVER_ADDR'']; if (PHP_OS == ''WINNT''){ $ip = getHostByName(getHostName()); } if (PHP_OS == ''Linux''){ $command="/sbin/ifconfig"; exec($command, $output); // var_dump($output); $pattern = ''/inet addr:?([^ ]+)/''; $ip = array(); foreach ($output as $key => $subject) { $result = preg_match_all($pattern, $subject, $subpattern); if ($result == 1) { if ($subpattern[1][0] != "127.0.0.1") $ip = $subpattern[1][0]; } //var_dump($subpattern); } } return $ip; }

Esta pregunta ya tiene una respuesta aquí:

Estoy usando este código PHP para obtener la dirección IP de un visitante:

<?php echo $_SERVER[''REMOTE_ADDR'']; ?>

Pero no puedo obtener la dirección IP real de los visitantes cuando usan un proxy . ¿Hay alguna forma de obtener la dirección IP de un visitante en este caso?


Esta es la técnica más común que he visto:

function getUserIP() { if( array_key_exists(''HTTP_X_FORWARDED_FOR'', $_SERVER) && !empty($_SERVER[''HTTP_X_FORWARDED_FOR'']) ) { if (strpos($_SERVER[''HTTP_X_FORWARDED_FOR''], '','')>0) { $addr = explode(",",$_SERVER[''HTTP_X_FORWARDED_FOR'']); return trim($addr[0]); } else { return $_SERVER[''HTTP_X_FORWARDED_FOR'']; } } else { return $_SERVER[''REMOTE_ADDR'']; } }

Tenga en cuenta que no garantiza que obtendrá siempre la IP de usuario correcta porque hay muchas formas de ocultarla.


Esta es mi función.

beneficios:

  • Trabaja si $ _SERVER no estaba disponible.
  • Filtra las IP privadas y / o reservadas;
  • Procese todas las IP reenviadas en X_FORWARDED_FOR
  • Compatible con CloudFlare
  • Puede establecer un valor predeterminado si no se encuentra una dirección IP válida.
  • Corto y simple!

/** * Get real user ip * * Usage sample: * GetRealUserIp(); * GetRealUserIp(''ERROR'',FILTER_FLAG_NO_RES_RANGE); * * @param string $default default return value if no valid ip found * @param int $filter_options filter options. default is FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE * * @return string real user ip */ function GetRealUserIp($default = NULL, $filter_options = 12582912) { $HTTP_X_FORWARDED_FOR = isset($_SERVER)? $_SERVER["HTTP_X_FORWARDED_FOR"]:getenv(''HTTP_X_FORWARDED_FOR''); $HTTP_CLIENT_IP = isset($_SERVER)?$_SERVER["HTTP_CLIENT_IP"]:getenv(''HTTP_CLIENT_IP''); $HTTP_CF_CONNECTING_IP = isset($_SERVER)?$_SERVER["HTTP_CF_CONNECTING_IP"]:getenv(''HTTP_CF_CONNECTING_IP''); $REMOTE_ADDR = isset($_SERVER)?$_SERVER["REMOTE_ADDR"]:getenv(''REMOTE_ADDR''); $all_ips = explode(",", "$HTTP_X_FORWARDED_FOR,$HTTP_CLIENT_IP,$HTTP_CF_CONNECTING_IP,$REMOTE_ADDR"); foreach ($all_ips as $ip) { if ($ip = filter_var($ip, FILTER_VALIDATE_IP, $filter_options)) break; } return $ip?$ip:$default; }


Este es mi enfoque:

function getRealUserIp(){ switch(true){ case (!empty($_SERVER[''HTTP_X_REAL_IP''])) : return $_SERVER[''HTTP_X_REAL_IP'']; case (!empty($_SERVER[''HTTP_CLIENT_IP''])) : return $_SERVER[''HTTP_CLIENT_IP'']; case (!empty($_SERVER[''HTTP_X_FORWARDED_FOR''])) : return $_SERVER[''HTTP_X_FORWARDED_FOR'']; default : return $_SERVER[''REMOTE_ADDR'']; } }

Cómo utilizar:

$ip = getRealUserIp();


Los proxies pueden enviar un encabezado HTTP_X_FORWARDED_FOR pero incluso eso es opcional.

También tenga en cuenta que los visitantes pueden compartir direcciones IP; Las redes universitarias, las grandes empresas y los ISP de tercer mundo / bajo presupuesto tienden a compartir IPs entre muchos usuarios.


Prueba este código php.

<?PHP function getUserIP() { $client = @$_SERVER[''HTTP_CLIENT_IP'']; $forward = @$_SERVER[''HTTP_X_FORWARDED_FOR'']; $remote = $_SERVER[''REMOTE_ADDR'']; if(filter_var($client, FILTER_VALIDATE_IP)) { $ip = $client; } elseif(filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } return $ip; } $user_ip = getUserIP(); echo $user_ip; // Output IP address [Ex: 177.87.193.134] ?>


Sí, $_SERVER["HTTP_X_FORWARDED_FOR"] es cómo veo mi IP cuando estoy bajo un proxy en mi servidor nginx.

Pero su mejor phpinfo() es ejecutar phpinfo() en una página solicitada bajo un proxy para que pueda ver todas las variables disponibles y ver cuál es la que lleva su IP real.


Si el Proxy es en el que confías, puedes intentarlo: (Asumir que el Proxy IP es 151.101.2.10 )

<?php $trustProxyIPs = [''151.101.2.10'']; $clientIP = isset($_SERVER[''REMOTE_ADDR'']) ? $_SERVER[''REMOTE_ADDR''] : NULL; if (in_array($clientIP, $trustProxyIPs)) { $headers = [''HTTP_CLIENT_IP'', ''HTTP_X_FORWARDED_FOR'']; foreach ($headers as $key => $header) { if (isset($_SERVER[$header]) && filter_var($_SERVER[$header], FILTER_VALIDATE_IP)) { $clientIP = $_SERVER[$header]; break; } } } echo $clientIP;

Esto evitará el encabezado forjado hacia adelante por los clientes solicitados directamente, y obtendrá una IP real a través de servidores proxy confiables.


aplique este código para obtener el ipaddress:

if (getenv(''HTTP_X_FORWARDED_FOR'')) { $pipaddress = getenv(''HTTP_X_FORWARDED_FOR''); $ipaddress = getenv(''REMOTE_ADDR''); echo "Your Proxy IP address is : ".$pipaddress. "(via $ipaddress)" ; } else { $ipaddress = getenv(''REMOTE_ADDR''); echo "Your IP address is : $ipaddress"; } ------------------------------------------------------------------------


<?php function getrealip() { if (isset($_SERVER)){ if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; if(strpos($ip,",")){ $exp_ip = explode(",",$ip); $ip = $exp_ip[0]; } }else if(isset($_SERVER["HTTP_CLIENT_IP"])){ $ip = $_SERVER["HTTP_CLIENT_IP"]; }else{ $ip = $_SERVER["REMOTE_ADDR"]; } }else{ if(getenv(''HTTP_X_FORWARDED_FOR'')){ $ip = getenv(''HTTP_X_FORWARDED_FOR''); if(strpos($ip,",")){ $exp_ip=explode(",",$ip); $ip = $exp_ip[0]; } }else if(getenv(''HTTP_CLIENT_IP'')){ $ip = getenv(''HTTP_CLIENT_IP''); }else { $ip = getenv(''REMOTE_ADDR''); } } return $ip; } $MyipAddress = getrealip(); echo $MyipAddress; // IP: 58.97.178.57 ?>

Esto es Output