Validar IP's que esten dentro de un segmento

Iniciado por FeArX, 26 Junio 2008, 00:27 AM

0 Miembros y 1 Visitante están viendo este tema.

FeArX

Hola de nuevo, estoy haciendo validaciones de IP's a una red, como puedo saber dado un segmento de red y una mascara, si una IP está dentro de este segmento, es que necesito validar las ips para dar entrada a un sistema.

Ejemplo: Solamente las ips que esten dentro de esta subred pueden entrar:
Red             / Mascara
192.168.1.0 / 255.255.255.240 -> da 16 ip's (contando bc y la de red).

Si entro con una ip 192.168.1.10 ->entro
Si entro con una ip 192.168.1.33 -> NO entro

Ya tengo la funcion que verifica la IP desde donde me estoy conectando, pero no tengo esa.
Agradeciendo de antemano toda la ayuda posible me despido esperando una pronta respuesta =)
Solo los mas debiles son los que no quieren ni estan dispuestos a dejar de depender de los demas

дٳŦ٭

Prueba abriendo un socket, si responde pues ya lo tienes.

Suerte


Con sangre andaluza :)


FeArX

Bueno básicamente cree 4 funciones (algunas las consegui en este foro otras en el foro de php org)

<?php
function getIp() //Esta funcion devuelve la ip desde donde te estas conectando
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
       
$ips $_SERVER['HTTP_X_FORWARDED_FOR']; 
    }  
    elseif (isset(
$_SERVER['HTTP_VIA'])) { 
       
$ips $_SERVER['HTTP_VIA']; 
    }  
    elseif (isset(
$_SERVER['REMOTE_ADDR'])) { 
       
$ips $_SERVER['REMOTE_ADDR']; 
    } 
    else {  
       
$ips "unknown"
    } 

return $ips;
    
//echo "Tu IP es: $ips"; 
}

function 
validarIP($ipAntena//Valida que la conexion sea desde una Ip especifica
{
$ipRemota=getIp();

if($ipAntena==$ipRemota)
{
$idInstalacion=$_GET["idInstalacion"];

//echo "Estas en la antena para realizar la conexion<br>";
return true;

else
{
echo "<h1>No estas en la antena para realizar la conexion<h1>Estas en la ip".$ipRemota." ipantena: ".$ipAntena."<br>";
return false;
}
}

function 
in_rango_ip($ip_one$ip_two=false$ip_remota)//funcion que recibe 2 ips para un rango y una ip para verificar que este en ese rango
{
    if(
$ip_two===false){
        if(
$ip_one==$ip_remota){
            
$ip=true;
        }else{
            
$ip=false;
        }
    }else{
        if(
ip2long($ip_one)<=ip2long($ip_remota) && ip2long($ip_two)>=ip2long($ip_remota)){
            
$ip=true;
        }else{
            
$ip=false;
        }
    }
    return 
$ip;
}

function 
getMask($mask//funcion que recibe una mascara y consigue cuantas direcciones hay disponible
{
if($mask=="255.255.255.252")//30
return 4;
else if($mask=="255.255.255.248")//29
return 8;
else if($mask=="255.255.255.240")//28
return 16;
else if($mask=="255.255.255.224")//27
return 32;
else if($mask=="255.255.255.192")//26
return 64;
else if($mask=="255.255.255.128")//25
return 128;
else if($mask=="255.255.255.0")//24
return 256;
else 
return -1;
}

function 
validarIpSegmento($ip_red,$mascara//Esta recibe una ip y una mascara y automaticamente localiza la ip desde donde se esta conectando
{
$nroMascara=getMask($mascara); // Obtengo los valores de la mascara
$ipFinalSegmento=ip2long($ip_red)+$nroMascara-1 // Le sumo la cantidad de ips de la red que obtuve en la mascara y resto 1
$ip_broadcast=long2ip($ipFinalSegmento);  // Consigo la ip de bc en formato xxx.xxx.xxx.xxx
$ipConex=getIp(); // Consigo la ip desde donde estoy navegando
$esta_dentro_rango=in_rango_ip($ip_red$ip_broadcast$ipConex);
echo "<br>".$ip_red." ".$ip_broadcast." ".$ipConex."<br>";
return $esta_dentro_rango;
}

function 
in_rango_ip('192.168.1.0''192.168.1.255''192.168.1.19'); //true
function in_rango_ip('192.168.1.0''192.168.1.255''192.168.100.1'); //false

//la ip desde donde estoy conectado es 192.168.1.19
function validarIpSegmento('192.168.1.0','255.255.255.224'); //true
function validarIpSegmento('192.168.1.0','255.255.255.248'); //false
?>



Espero que les sirva, me estoy volviendo loco con estas IP's XD pero para que no le pase lo mismo a los demas :P ;D
Solo los mas debiles son los que no quieren ni estan dispuestos a dejar de depender de los demas