Отправляет email-рассылки с помощью сервиса Sendsay

Чем можно, проверить принадлежит ли адрес диапазону адресов?

Здравствуйте.

Скажите, пожалуйста, чем можно, проверить принадлежит ли адрес данному
диапазону адресов? Пример:

адрес: 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

Ответить   Strong and Humble Mon, 13 Apr 2009 21:17:58 +0700 (#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

Ответить   Mon, 13 Apr 2009 19:34:06 +0300 (#844991)

 

Спасибо за Ваши время и ответ, Amper:

- Просто здорово! Извините за нескромность, - н/о было сразу
спросить... а обратное действие сильно сложно сделать? - Т.е. у меня
есть диапазон вида

1.2.0.0 - 1.2.255.255

н/о привести его к виду

1.2.0.0/16

?

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 36007; Возраст листа: 2090; Участников: 1380
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/845452

Ответить   Strong and Humble Wed, 15 Apr 2009 02:14:13 +0700 (#845452)

 

Спасибо за Ваши время и ответ, Amper:

У меня вылетает с Segmentation fault.

Я собирал, вероятно, неправильно:

g++ -Wno-deprecated -o 1 1.cpp

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 36009; Возраст листа: 2091; Участников: 1380
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/845583

Ответить   Strong and Humble Wed, 15 Apr 2009 12:46:46 +0700 (#845583)

 

15 апреля 2009 г. 9:46 пользователь Strong and Humble <
strong.humb***@g*****.com> написал:

Segmentation fault - это наверняка ошибка в программе.

g++ -Wno-deprecated -o 1 1.cpp

Нормальная строка

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 36010; Возраст листа: 2091; Участников: 1380
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/845605

Ответить   Wed, 15 Apr 2009 10:23:47 +0400 (#845605)

 

Спасибо, Ампер, ещё раз, за Ваш ответ. Пишу сейчас в надежде, что Вы
ещё не успели ответить на моё предпоследнее письмо: утилита ipcalc умеет
делать то, что мне н/о в "оба конца". Так, не тратьте своё время более
на мой вопрос. Ещё раз, спасибо Вам.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 36012; Возраст листа: 2091; Участников: 1379
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/845639

Ответить   Strong and Humble Wed, 15 Apr 2009 13:36:16 +0700 (#845639)

 

Strong and Humble пишет:

Есть утилита ipcalc, кажется она и такое тоже умеет. Написана на perl.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 35992; Возраст листа: 2089; Участников: 1381
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/845030

Ответить   Mon, 13 Apr 2009 20:54:29 +0300 (#845030)

 

Спасибо за Ваши время и ответ, Akkerman:

- В яблочко! Всем рекомендую (кому н/о): делает операции в оба конца:
из адреса в диапазон, и обратно.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 36011; Возраст листа: 2091; Участников: 1379
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/845617

Ответить   Strong and Humble Wed, 15 Apr 2009 13:32:32 +0700 (#845617)

 

Strong and Humble пишет:

В принципе очень просто, операция "побитовое И" IP-адреса и маски должна
дать адрес сети. Например, пусть есть сеть 1.2.3.0 маска 255.255.255.0,
дан IP-адрес 1.2.3.4. Побитовое И: 1.2.3.4 & 255.255.255.0 дасть
1.2.3.0, т.е. адрес сети, что и нужно. Так же, IP-адрес - это
беззнаковое 4-битное целое, т.е. нужна еще функция, переводящая
строковое значение IP-адреса в число, и обратная функция - число в
строку IP-адреса.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 35993; Возраст листа: 2090; Участников: 1381
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/845084

Ответить   Mon, 13 Apr 2009 20:28:20 +0400 (#845084)