Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка IP-адреса, на принадлежность подсети 
:(
    Опции темы
pavel87
Дата 7.6.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.2.2007

Репутация: нет
Всего: нет



Здравствуйте
такой вопрос:
как проверить, принадлежит ли IP-адрес подсети
напр есть массив ('192.168.0.0/24','192.168.1.0/24','10.0.0.0/8')
и файл вида
Код

192.168.0.1
212.212.212.212
10.2.21.2
1.1.1.1
192.168.10.3
54.41.23.54

проверить и выдать результат: принадлежит ли Ip адрес к подестям, указанным в массиве

PM MAIL   Вверх
JAPH
Дата 7.6.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 3
Всего: 23



Принадлежат ли ip-адреса из списка тем, что есть в файле, или наоборот? Куда выдать?


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Nab
Дата 7.6.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Я делал для системы учета трафика...

для начала там структура сетей у меня другая, список ('192.168.0.0/24','192.168.1.0/24','10.0.0.0/8') у меня приведен к виду
Код

$nets = { 
    24 => {
        '192.168.0.0' => 1
        '192.168.1.0' => 1
    },
    8 => {
        '10.0.0.0' => 1
    }
}


в качестве значения хеша у меня стоит номер идентифицирующий класс сети, потому как у меня их было аж четыре.. локальный траф мировой, и сети двух провайдеров.

И вот такая функция:

Код

sub in_net {
    my $ip = shift;
    my $pip = 0;
    # sort & reverse это чтобы при пересечении сетей,  совпадение произошло с самой длинной маской
    foreach (reverse(sort {$a <=> $b} (keys(%{$nets})))) {
        $pip = unpack("L", pack("B32", unpack("B$_", pack("CCCC", split(/\./,$ip)))));
        if (defined($nets->{$_}->{$pip})) { return $nets->{$_}->{$pip} }
    }
    return 0;
};

она возвращает класс сети к которой принадлежит IP.

Добавлено через 8 минут и 16 секунд
Ой, хеш немного не такой вид имеет, там тоже упакованные IP сетей smile
Код

# выборка из базы
# mask, net и  class_id - поля в базе
    while ($hash_ref = $sth->fetchrow_hashref) {
        # перепаковываем сеть как 4-х байтовое целое с наложением маски
        $packIP = unpack("L", pack("B32", unpack("B$hash_ref->{'mask'}", pack("CCCC", split(/\./,$hash_ref->{'net'})))));
        $self->{'mask'}->{$hash_ref->{'mask'}}->{$packIP} = $hash_ref->{'class_id'};
    }



--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
ADm
Дата 9.6.2007, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 19.6.2006
Где: Россия

Репутация: нет
Всего: нет



а еще, есть готовый модуль Net::IP
PM MAIL ICQ Jabber   Вверх
arto
Дата 9.6.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc Net::Patricia
PM MAIL ICQ   Вверх
TwiSteR
Дата 26.6.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кибер красавчег
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 15.6.2005
Где: World->Russia

Репутация: нет
Всего: 2



Цитата(arto @  9.6.2007,  09:12 Найти цитируемый пост)
Net::Patricia 

То что надо smile  !!!
--------------------
PM MAIL WWW ICQ   Вверх
n4n0bit
Дата 26.6.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.6.2008

Репутация: нет
Всего: 1



Вот еще http://search.cpan.org/dist/Net-IP-Match-R...Match/Regexp.pm

и тут http://yandex.ru/yandsearch?text=%D0%BF%D1...%B5%D1%82%D0%B8

Это сообщение отредактировал(а) n4n0bit - 26.6.2008, 15:59
PM MAIL WWW Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.