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");