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");