sql >> Database >  >> RDS >> Mysql

Controleer of IP zich in subnet bevindt

Zeker, het is te doen. Het idee is dat we het subnetmasker berekenen door de meest significante bits in te stellen op 1, zoveel als de subnetklasse aangeeft. Voor een klasse C zou dat zijn

SELECT -1 << 8;

Dan, EN het subnetmasker met het IP-adres dat je hebt; als het IP zich binnen het subnet bevindt, zou het resultaat gelijk moeten zijn aan het subnetadres -- standaard netwerkdingen. Dus we eindigen met:

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

Bijwerken: Ja, het is noodzakelijk om de netwerkklasse of . te kennen het subnetmasker (wat gelijkwaardige informatie is). Bedenk hoe u het geval zou kunnen aanpakken waarbij het subnet X.Y.0.0 is als u deze informatie niet had. Is dit X.Y.0.0/16 of X.Y.0.0/8 waar het derde octet gewoon gebeurt 0 zijn? Geen manier om het te weten.

Als u het subnetmasker weet, kan de query worden geschreven als

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. Wat is de beste manier om oude rijen doorlopend uit MySQL te verwijderen?

  2. Hoe e-mail of telefoon fuzzy matchen door Elasticsearch?

  3. MySQL-verbinding via SSH-tunnel - hoe een andere MySQL-server specificeren?

  4. Een formulier maken met de formulierwizard