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

Tjek om IP er i undernet

Selvfølgelig kan det lade sig gøre. Ideen er, at vi beregner undernetmasken ved at sætte de mest signifikante bits til 1, så mange som dikteret af undernetklassen. For en klasse C ville det være

SELECT -1 << 8;
 

Derefter OG undernetmasken med den IP-adresse du har; hvis IP'en er inde i undernettet, bør resultatet være lig med undernetadressen -- standard netværksting. Så vi ender med:

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

Opdatering: Ja, det er nødvendigt at kende netværksklassen eller undernetmasken (som er tilsvarende information). Overvej, hvordan du kunne håndtere tilfældet, hvor undernettet er X.Y.0.0 hvis du ikke havde disse oplysninger. Er dette X.Y.0.0/16 eller X.Y.0.0/8 hvor den tredje oktet bare sker at være 0? Ingen måde at vide det.

Hvis du kender undernetmasken, kan forespørgslen skrives 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. Sådan konverteres tidsstempel med millisekunder til dato i Oracle

  2. hvordan ændres postgresql lytteport i Windows?

  3. Sådan fungerer REGEXP_INSTR()-funktionen i MySQL

  4. Sådan fungerer UCASE()-funktionen i MySQL