function ip_is_private($ip)
{
$pri_addrs = array(
'10.0.0.0|10.255.255.255',
'172.16.0.0|172.31.255.255',
'192.168.0.0|192.168.255.255',
'169.254.0.0|169.254.255.255',
'127.0.0.0|127.255.255.255'
);
$long_ip = ip2long($ip);
if($long_ip != -1) {
foreach($pri_addrs AS $pri_addr)
{
list($start, $end) = explode('|', $pri_addr);
// IF IS PRIVATE
if($long_ip >= ip2long($start) && $long_ip <= ip2long($end))
return (TRUE);
}
}
return (FALSE);
}
if ( ip_is_private ( $ip_address1 ) )
{
printf ( "%s is from a private address range\n", $ip_address1 );
}
Con PHP 5.2 o superior
<?php
function is_private_ip($ip)
{
return !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE);
}
?>
if(filter_var($ip, FILTER_FLAG_NO_PRIV_RANGE)) {
// it's valid
}
CitarFILTER_VALIDATE_IP = validar una ip
FILTER_FLAG_IPV4 = validar una ip v4
FILTER_FLAG_NO_PRIV_RANGE = validar una ip rango privado
FILTER_FLAG_NO_RES_RANGE = validar una ip rango reservado
FILTER_FLAG_IPV6 = validar una ip v6
Ejemplo valdiar ip excluyendo ip's privadas y reservadas
if(filter_var($ip, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
// it's valid
}
Xelente que el jefe le apueste al php, gracias por los post de programacion, de verdad super utiles como el de los emails:
http://foro.elhacker.net/php/validacion_email_formulario-t361047.0.html;topicseen
me surge una pregunta, como detecto desde php si la ip es ipv4 o si es ipv6 ???
aparte, existira alguna BD publica que indique los rangos de ips fijas publicas que poseen empresas como logmein hamachi, o tunngle, NOIP etc... para uno saber si es una ip de esas.
Puedo detectar si desde determinada ip, se esta consumiendo un canal irc ?, para saber si ese cliente es posiblemente una botnet...