Вхождение ip-адреса

Данный скрипт определяет входят ли ip-адреса в указанные сети.

Аргументы:
Файл со списком сетей (в формате aaa.bbb.ddd.eee/xx, одна на строку): -f <файл>
Не показывать записи с адресами, входящими в список (инвертирует вывод): -i
Проверять адрес в n-ой позиции (по умолчанию: первая) записи: -c <номер>

Проверяемые айпи-адреса берутся из stdin
Пример: cat some-log | ./script.pl -f bbnfile -i -c 1
#!/usr/bin/perl -w
use strict;
use Getopt::Std;
use Net::IP;
use Net::IP::Match::Regexp qw (create_iprange_regexp match_ip);
# Переменные
my %arg;
my $inverse = 0;
my $column = 1;
my $file;
# Файл со списком сетей (в формате aaa.bbb.ddd.eee/xx, одна на строку): -f <файл>
# Не показывать адреса, входящие в список: -i
# Проверять адрес в n-ой позиции (по умолчанию: первая): -c <номер>
getopts('f:ic:', \%arg);
#
# Если не задан файл со списком сетей то выходим
if (not exists $arg{'f'})
{
print 'Не задан параметр -f (файл со списком сетей)\n';
exit ();
}
else { $file = $arg{'f'}}
$inverse = 1 if (exists $arg{'i'});
$column = $arg{'c'} if (exists $arg{'c'});
open(BBNFILE, $file) || die ('Can\' locate file: ' . $file);
my @netmask = ();
#
# Читаем список сетей
while (<BBNFILE>)
{
chomp;
push (@netmask, $_);
}
close(BBNFILE);
my $match = create_iprange_regexp(@netmask);
# Читаем и смотрим
while(<>) {
chomp;
my @words = split (/\s+/);
my $v = $words[$column - 1];
my $flag = match_ip($v, $match);
#$flag = (defined $flag ? $flag : 0);
#print 'IP: $v, Flag: $flag ($inverse)\n';
print $_ . '\n' if (($flag && ! $inverse) || (! $flag && $inverse));
}
  • просмотров: ~1352
  • рейтинг: ?

Комментарии (1)

Вы - anonymous, войти ?

можно использовать bbcode-теги
[b]жирный текст[/b]
[i]курсив[/i]
[u]underline[/u]
[s]зачеркнутый текст[/s]
[size=20px]размер шрифта[/size]
всякие изменения текста
[left][/left]
[right][/right]
[center][/center]
позиционирование элементов: картинки, текст и т.д
[url][/url]
[email][/email]
внутри тега [url] помещайте ссылки, а внутри [email] адрес электронной почты;
так же [url] можно использовать в виде:
[url=http://example.com]пример[/url],
[url=http://test.ru][img]http://flickr.com/givemeimg.png[/img][/url]
[code][/code]
[quote][/quote]
внутри тега [code] можно помещать программный код (подстветка попытается включиться автоматически); для выделения цитат используйте [quote]
также можно напрямую указать язык [code=cpp]int i;[/code]
[list][/list]
создаем списки, каждый элемент пишется после [*].

Можно указывать маркер - [list=marker].
возможные маркеры 1(decimal), i(lower-roman), I(upper-roman), a(lower-alpha), A(upper-alpha). Примеры:

[list][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=1][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=A][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[table][/table]
оформляем таблицу, используя внутренние теги [tr] и [td].
[tr] - строка, [td] - поле в строке,
[table=100%] - можно задавать ширину в процентах, по-умолчанию ширина 100%
[td=2] - можно задавать сколько столбцов входит в это поле. Пример:

[table=50%][tr][td]столбец 1[/td][td]столбец 2[/td][/tr][tr][td]значение 1[/td][td]значение 2[/td][/tr][tr][td=2]сразу 2 столбца[/td][/tr][/table]
[img][/img]
тег для вставки фото или картинок, мы любим картинки. Примеры использования:

[img]http://ya.ru/logo.png[/img],
[img=100x100px]http://ya.ru/logo.png[/img]
[img=fullimg.url]thumbimg.url[/img],
Пожалуйста загружайте картинки на наш сайт, либо вставляйте с бекбоновских ресурсов.
[video][/video]
Проигрывает видео, внутрь вставляем ссылки на видео, поддерживается Play.Ykt.Ru(нужно вставить ссылку на страницу с видео) и tv.ykt.ru(нужно вставить ссылку на адрес файла)