Чем можно, проверить принадлежит ли адрес диапазону адресов?
![](http://mediasubs.ru/author/avatar/15178566.png)
Здравствуйте.
Скажите, пожалуйста, чем можно, проверить принадлежит ли адрес данному
диапазону адресов? Пример:
адрес: 1.2.3.4
диапазон: 1.2.3.4/22
искомое решение даёт ответ: да/нет, 1/0 - и т.д. - Т.е. элементарно,
просчитать маску и дать ответ.
PS Решение будет использоваться в сценарии на Perl.
Спасибо за Ваши время/ответ.
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 35984; Возраст листа: 2089; Участников: 1381
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/844926
On Monday 13 April 2009 17:17:58 Strong and Humble wrote:
на ум приходит что-то вроде
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main( int argc, char** argv )
{
char* ip;
ip=(char*)malloc(sizeof(char)*16);
int mask;
sscanf(argv[1],"%[0123456789.]/%i", ip, &mask);
int ipmask=0xffffffff;
ipmask<<=32-mask;
if (!mask) ipmask=0;
if ((inet_network(ip)&ipmask)==(inet_network(argv[2])&ipmask))
{
return 0;
} else {
return 1;
};
};
Пользоваться как ./a.out 127.0.0.0/24 127.0.0.32 где 127.0.0.0/24 - сеть,
127.0.0.32 проверяемый адрес. Если принадлежит - возвращает 0, если нет, то
вылетает с 1. Понимает сети вида 127.0.0.1/24, считая их эквивалентными
127.0.0.0/24.
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 35987; Возраст листа: 2089; Участников: 1381
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/844991