Mysql
 sql >> Base de données >  >> RDS >> Mysql

Vérifiez si l'IP est dans le sous-réseau

Bien sûr, c'est faisable. L'idée est que nous calculons le masque de sous-réseau en définissant les bits les plus significatifs sur 1, autant que dicté par la classe de sous-réseau. Pour une classe C, ce serait

SELECT -1 << 8;

Ensuite, ET le masque de sous-réseau avec l'adresse IP dont vous disposez ; si l'adresse IP se trouve à l'intérieur du sous-réseau, le résultat doit être égal à l'adresse du sous-réseau - des éléments de réseautage standard. Nous nous retrouvons donc avec :

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

Mise à jour : Oui, il est nécessaire de connaître la classe réseau ou le masque de sous-réseau (qui est une information équivalente). Considérez comment pourriez-vous gérer le cas où le sous-réseau est X.Y.0.0 si vous n'aviez pas cette information. Est-ce X.Y.0.0/16 ou X.Y.0.0/8 où le troisième octet arrive juste être 0 ? Aucun moyen de savoir.

Si vous connaissez le masque de sous-réseau, la requête peut être écrite sous la forme

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