sql >> Base de Datos >  >> RDS >> Mysql

Comprobar si la IP está en la subred

Claro, es factible. La idea es que calculemos la máscara de subred configurando los bits más significativos en 1, tantos como dicte la clase de subred. Para una clase C, eso sería

SELECT -1 << 8;

Luego, Y la máscara de subred con la dirección IP que tiene; si la IP está dentro de la subred, el resultado debe ser igual a la dirección de la subred, material de red estándar. Entonces terminamos con:

SELECT (-1 << 8) & INET_ATON("192.168.0.1") = INET_ATON("192.168.0.0");

Actualización: Sí, es necesario conocer la clase de red o la máscara de subred (que es información equivalente). Considere cómo podría manejar el caso donde la subred es X.Y.0.0 si no tuvieras esta información. ¿Es esto X.Y.0.0/16? o X.Y.0.0/8 donde el tercer octeto simplemente sucede ser 0? No hay forma de saberlo.

Si conoce la máscara de subred, la consulta se puede escribir como

SELECT (-1 << (33 - INSTR(BIN(INET_ATON("255.255.255.0")), "0"))) &
       INET_ATON("192.168.0.1") = INET_ATON("192.168.0.0");