sql >> Databasteknik >  >> RDS >> Mysql

Kontrollera om IP finns i subnätet

Visst, det är genomförbart. Tanken är att vi beräknar subnätmasken genom att sätta de mest signifikanta bitarna till 1, så många som dikteras av subnätklassen. För en klass C skulle det vara

SELECT -1 << 8;

Sedan, OCH subnätmasken med den IP-adress du har; om IP:n är inuti subnätet, bör resultatet vara lika med subnätadressen -- standardnätverksgrejer. Så vi slutar med:

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

Uppdatering: Ja, det är nödvändigt att känna till nätverksklassen eller nätmasken (vilket är likvärdig information). Fundera på hur du skulle kunna hantera fallet där subnätet är X.Y.0.0 om du inte hade denna information. Är detta X.Y.0.0/16 eller X.Y.0.0/8 där den tredje oktetten bara händer vara 0? Inget sätt att veta.

Om du känner till subnätmasken kan frågan skrivas som

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


  1. Oracle PL/SQL-strängjämförelseproblem

  2. Anslut till en PostgreSQL-databas på en Docker-behållare

  3. Hur man installerar SQL Server på Windows

  4. Hur POSITION() fungerar i MariaDB