Si por razones de seguridad o por política de empresa, queremos bloquear las direcciones a un determinado rango o conjunto de IP, os voy a comentar cómo hacerlo de forma simple haciendo uso de PHP.
Lo primero que debemos hacer es crear una función que nos permita conocer la dirección IP del cliente:
function obtenerDireccionIP() { if (!empty($_SERVER ['HTTP_CLIENT_IP'] )) $ip=$_SERVER ['HTTP_CLIENT_IP']; elseif (!empty($_SERVER ['HTTP_X_FORWARDED_FOR'] )) $ip=$_SERVER ['HTTP_X_FORWARDED_FOR']; else $ip=$_SERVER ['REMOTE_ADDR']; return $ip; }
Una vez hecho esto, el proceso es simple. Veamos distintas posibilidades.
Permitir/restringir acceso a una sola IP
Con esta función, restringimos el acceso sólo a la IP que se le envía a la función. Podemos cambiar el “==” por “!=” para hacer lo contrario.
function restringirIp($ip) { $ipCliente = obtenerDireccionIP(); if($ipCliente == $ip) { return true; } else { header('location: http://direccion_envio_salida'); exit; } }
Permitir/restringir acceso a un conjunto de direcciones IP
Hacemos una operación similar, pero en lugar de controlar una sola dirección IP, controlamos un conjunto de ellas presentes en un array:
function restringirConjuntoIps($ips) { $ipCliente = obtenerDireccionIP(); if (in_array($ipCliente,$ips)) { return true; } else { header('location: http://direccion_envio_salida'); exit; } }
Permitir/restringir acceso a un rango de direcciones IP
Si queremos restringir rangos, podemos valernos de la ayuda de las funciones de tratamiento de cadena. Para permitir el acceso a todas las direcciones de la familia: 150.214.x.x, podríamos hacer lo siguiente:
function restringirRango() { $ipCliente = obtenerDireccionIP(); if(substr($ipCliente, 0, 8 ) == "150.214.") { return true; } else { header('location: http://direccion_envio_salida'); exit; } }
Si queréis, podéis modificar la llamada a “substr” para adaptarla a vuestro caso particular.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
En el caso de restricción por rango:
if(substr($ipCliente, 0, 8 ) == "150.214.")
Lo comento porque con la cara de las gafas que se autogenera con los caracteres '8' + ')' puede dar lugar a error.
@Alberto: gracias por el apunte, no pensé que en la etiqueta PRE también se metería el tema de los emoticonos. Voy a modificarlo.
Muchas gracias a los dos,
puede ser de gran utilidad
salu2
Hola Javier, estaba buscando esta función, me podridas facilitar el código para accesar la funcion? Uso php 5.6. Gracias