Mysql
 sql >> база данни >  >> RDS >> Mysql

Проверете дали IP е в подмрежата

Разбира се, изпълнимо е. Идеята е, че изчисляваме маската на подмрежата, като задаваме най-значимите битове на 1, колкото са продиктувани от класа на подмрежата. За клас C това би било

SELECT -1 << 8;

След това И маската на подмрежата с IP адреса, който имате; ако IP е вътре в подмрежата, резултатът трябва да е равен на адреса на подмрежата - стандартни мрежови неща. Така че завършваме с:

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

Актуализация: Да, необходимо е да знаете мрежовия клас или маската на подмрежата (която е еквивалентна информация). Помислете как бихте могли да се справите със случая, когато подмрежата е X.Y.0.0 ако не разполагате с тази информация. Това X.Y.0.0/16 ли е или X.Y.0.0/8 където третият октет току-що се случва да бъде 0? Няма начин да знам.

Ако знаете маската на подмрежата, тогава заявката може да бъде написана като

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. $filter не работи в JPA/Olingo 2.0.11 с MySQL

  2. Как можем да намерим име на домейн с помощта на MySQL и регулярен израз

  3. Доктрина 2 и таблица с връзки много към много с допълнително поле

  4. mysql процедура за актуализиране на цифровата препратка в предишните редове, когато една се актуализира

  5. Мога ли да наложа условно ограничение за уникалност?