sql >> Databáze >  >> RDS >> Mysql

Zkontrolujte, zda je IP v podsíti

Jasně, je to proveditelné. Myšlenka je taková, že vypočítáme masku podsítě nastavením nejvýznamnějších bitů na 1, tedy tolik, kolik určuje třída podsítě. Pro třídu C by to bylo

SELECT -1 << 8;

Potom A masku podsítě s IP adresou, kterou máte; pokud je IP uvnitř podsítě, výsledek by se měl rovnat adrese podsítě -- standardní síťové věci. Takže skončíme s:

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

Aktualizace: Ano, je nutné znát třídu sítě nebo masku podsítě (což je ekvivalentní informace). Zvažte, jak byste mohli zvládnout případ, kdy je podsíť X.Y.0.0 pokud jste tyto informace neměli. Je toto X.Y.0.0/16? nebo X.Y.0.0/8 kde se třetí oktet prostě stane být 0? Nedá se to zjistit.

Pokud znáte masku podsítě, může být dotaz zapsán jako

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. MySQL:bigint vs int

  2. Jak funguje funkce OCT() v MySQL

  3. InMemory DUPLICATE Zmatek v Oracle RAC

  4. Jak provést automatické zvýšení primárního klíče tabulky MySQL s nějakou předponou