Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Verifique se o IP está na sub-rede


Claro, é factível. A ideia é que calculemos a máscara de sub-rede definindo os bits mais significativos para 1, tantos quantos forem ditados pela classe de sub-rede. Para uma classe C, isso seria
SELECT -1 << 8;

Em seguida, E a máscara de sub-rede com o endereço IP que você possui; se o IP estiver dentro da sub-rede, o resultado deve ser igual ao endereço da sub-rede -- material de rede padrão. Assim terminamos com:
SELECT (-1 << 8) & INET_ATON("192.168.0.1") = INET_ATON("192.168.0.0");

Atualização: Sim, é necessário conhecer a classe de rede ou a máscara de sub-rede (que é informação equivalente). Considere como você poderia lidar com o caso em que a sub-rede é X.Y.0.0 se você não tiver essa informação. Este é X.Y.0.0/16 ou X.Y.0.0/8 onde o terceiro octeto simplesmente acontece ser 0? Não há como saber.

Se você conhece a máscara de sub-rede, a consulta pode ser escrita 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");