Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Überprüfen Sie, ob die IP im Subnetz ist

Klar, es ist machbar. Die Idee ist, dass wir die Subnetzmaske berechnen, indem wir die höchstwertigen Bits auf 1 setzen, so viele, wie es die Subnetzklasse vorschreibt. Für eine Klasse C wäre das

SELECT -1 << 8;

Dann UND die Subnetzmaske mit der IP-Adresse, die Sie haben; Wenn sich die IP innerhalb des Subnetzes befindet, sollte das Ergebnis gleich der Subnetzadresse sein - Standard-Netzwerkkram. Also enden wir mit:

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

Aktualisierung: Ja, es ist notwendig, die Netzwerkklasse oder zu kennen die Subnetzmaske (die äquivalente Information ist). Überlegen Sie, wie Sie mit dem Fall umgehen könnten, in dem das Subnetz X.Y.0.0 ist wenn Sie diese Informationen nicht hatten. Ist das X.Y.0.0/16 oder X.Y.0.0/8 wo das dritte Oktett einfach passiert 0 sein? Keine Ahnung.

Wenn Sie die Subnetzmaske kennen, kann die Abfrage als

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