
Cuando trabajamos con direcciones IP podemos realizar ciertas acciones en base a dicho identificador. Podemos obtener la localización, garantizar o denegar accesos, realizar filtrados por rangos, etc.
En el caso de que necesitemos hacer un filtrado por rango, o cualquier otra operación en la que queramos conocer si una determinada IP pertenece o no a un rango de direcciones, podemos hacer uso de la función nativa de PHP llamada ip2long.
La función ip2long devuelve un valor numérico entero con signo, por lo que muchos de los valores que devolverá serán negativos para arquitecturas de 32 bits. Para formatearlos correctamente habrá que usar el formato sin signo (%u) y pasar el valor a formatear por la función printf().
1 | printf ( "%u", ip2long( $ip ) ); |
Volviendo a nuestro propósito de conocer si una determinada dirección IP pertenece a un rango de direcciones, a continuación te dejamos el código para ello:
1 2 3 4 5 6 7 8 9 10 11 | function estaIPDentroDeRango( $ip, $inicioRango, $finRango ) { if ( $finRango === false ) { $estaDentro = ( $inicioRango === $ip ); } else { $estaDentro = ( ip2long( $inicioRango ) <= ip2long( $ip ) && ip2long( $finRango ) >= ip2long( $ip ) ); } return $estaDentro; } |
Como puedes ver, es algo muy simple de calcular. Tan solo realizamos las conversiones mediante la función ip2long de las distintas direcciones y verificamos los distintos condicionales que nos indicarán si la IP está dentro de los límites, inclusives, del rango.
