Mysql
 sql >> Database >  >> RDS >> Mysql

Controlla se l'IP è nella sottorete

Certo, è fattibile. L'idea è che calcoliamo la subnet mask impostando a 1 i bit più significativi, tanti quanti dettati dalla classe di sottorete. Per una classe C, sarebbe

SELECT -1 << 8;

Quindi E la subnet mask con l'indirizzo IP che hai; se l'IP è all'interno della sottorete, il risultato dovrebbe essere uguale all'indirizzo della sottorete -- roba di rete standard. Quindi finiamo con:

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

Aggiornamento: Sì, è necessario conoscere la classe di rete o la subnet mask (che è un'informazione equivalente). Considera come potresti gestire il caso in cui la sottorete è X.Y.0.0 se non avessi queste informazioni. È questo X.Y.0.0/16 o X.Y.0.0/8 dove il terzo ottetto accade e basta essere 0? Non c'è modo di saperlo.

Se conosci la subnet mask, la query può essere scritta come

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