>>>> Подскажите пожалуйста, как проверить с помощью regexp входит ли IP >>>> в подсеть? >>>> >>>> Например: сеть дана в виде 192.168.1.0/24 >>>> Как проверить при помощи regexp входит ли IP 192.168.1.5 в эту >>>> подсеть? >>> ipcalc и его man >> Это конечно хорошо. Есть и перловый модуль Net-IP-Match-Regexp. Но у >> меня есть база, в которой хранятся IP в виде 192.168.1.0/24 и нужно >> sql запросом проверять вхождение IP в сеть. > > Тогда можно написать перловый скрипт, в котором расчитывается сеть для > данного IP, потом адрес сети вытаскивается из базы (или наоборот, > вытаскивается IP из базы и расчитывается для него сеть, я не до конца > понял детали) и эти две переменные сравниваются. Я не знаю упомянутого > выше модуля, но с ним писать перловый скрипт вероятно удобнее, хотя > при должном желании можно вызвать ipcalc из перла. Или я что-то важное > упустил? Да. Наверно я не полностью описал задачу. Суть в чем. Есть база на mysql. Есть сквид. И есть внешний хелпер mysql_acl на C который умеет делать запросы к мускулю. Больше ничего другого делать он не умеет. Можно конечно сделать хелпер на перле и всю логику перенести туда, но во первых не хочется разводить зоопарк (в одном месте этот хелпер уже работает), во вторых хелпер на перле будет медленней, и в третьих это еще необходимо устанавливать перл, что совсем не желательно. Поэтому перл отпадает точно. Но вообщем-то проблему решил. Сделал табличку, в которой 2 поля: IP и mask В поле IP значение заносится с помощью преобразования через INET_ATON() и в поле mask - маска в нотации CIDR. Во время занесения в базу из IP вычисляется сеть и заносится IP сети. Как это делается наглядно показано тут: http://jodies.de/ipcalc Например имеем 192.168.1.50/17 Вычисляем сеть средствами php. Это будет 192.168.0.0 В базу заносим mysql> SELECT INET_ATON('192.168.0.0') as IP; +------------+ | IP | +------------+ | 3232235520 | +------------+ И маску в неизменном виде. Когда нам нужно проверить входит ли IP в сеть указанную в базе, мы просто переводим его в число с помощью INET_ATON(), вычисляем по маске и сети количество IP в сети http://library.mnwhost.ru/doc/ip.php и проверяем попадает ли число в вычисленный диапазон. Получается никаких regexp, перл и т.д. на этапе проверки. -- WBR, Dubrovskiy Vyacheslav