Перейти к содержимому
Local
Pit

Скрипт обновления сетей в таблицах ipfw.

Рекомендованные сообщения

Скрипт обновления сетей в таблицах ipfw.

Требуеться модулб p5-libwww.

/usr/ports/www/p5-libwww

 

#!/usr/bin/perl

#

# Load and Update NETWORK ipfw table. 2006

# Формат сетей xxx.xxx.xxx.xxx/xx

 

use LWP;

$table=1;

$ipfw="/sbin/ipfw";

$getipfwl=`$ipfw table $table list`;

$url="http://www.colocall.net/ua/prefixes.txt";

 

my $ua=LWP::UserAgent->new();

$ua->agent("PerlUA/0.1");

my $document=$ua->request(HTTP::Request->new(GET => $url));

if ($document->is_success){

$uaix=($document->content);

$uaix=~s/\s/\n/g;

@uaix = split /\n/,$uaix;

}

else

{

print "Couldn't fetch $url\n";

exit;

}

 

$getipfwl =~s/\ \d//g;

@tablenet = split /\n/,$getipfwl;

 

###################################

 

%seen =();

@aonly =();

foreach $ip (@tablenet) {

$seen{$ip} = 1;

};

 

foreach $ip (@uaix) {

unless (@uaix) {

push(@aonly, $ip);

}

}

my %seen;

my @aonly;

@seen{@tablenet} =();

foreach $ip (@uaix) {

push(@aonly, $ip) unless exists $seen{$ip};

}

 

foreach $ip (@aonly){

system("$ipfw table $table add $ip");

print("$ip add\n");

}

####################################

 

%seen =();

@aonly =();

 

foreach $ip (@uaix) {

$seen{$ip} = 1;

};

 

foreach $ip (@tablenet) {

unless (@tablenet) {

push(@aonly, $ip);

}

}

my %seen;

my @aonly;

@seen{@uaix} =();

foreach $ip (@tablenet) {

push(@aonly, $ip) unless exists $seen{$ip};

}

 

foreach $ip (@aonly){

print("$ip del\n");

system("$ipfw table $table delete $ip");

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что не пригодился никому?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Что не пригодился никому?

честно непонятно что это и зачем надо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я думаю, он может пригодиться для закрытиЯ/открытия только украины без мира.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Я думаю, он может пригодиться для закрытиЯ/открытия только украины без мира.

Именно так.

Или кончился у юсера мир, по skip to перекидываеи его на таблицу и получает оставшуюся украину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

логичнее пускать всегда на украину.. и отдельное пропускать на мир..деньги кончились коннекта нет на мир а Украина продолжает илдти..я подозреваю раза в 2 меньше писанины..=)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
логичнее пускать всегда на украину.. и отдельное пропускать на мир..деньги кончились коннекта нет на мир а Украина продолжает илдти..я подозреваю раза в 2 меньше писанины..=)

логичней, конечно..

но то что ты сказал существует уже хрен знает сколько времени

а реализовать его "просто" можно лишь с фриибсд последних версий (ipfw2)

а вот правильней - покан а счету есть деньги - работает все.. как только деньги закончились - отключается все..

--

у меня утилиткой aggregate + скриптом формируется оптимизированный список украины в формате xi.. после него скрипт на перле (несколько строчек) - заносит его в table(1)..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

с ipfw и 2 не работал стоит Pf

но реально проблема решена таким образом

таблица 1

таблица 2

 

нат таблица 1 в мир

нат таблица 2 в лкальные ресурсы

и потом просто работаем с таблицами

 

у меня локальные ресурсы практически нахаляву так что их подключенным можно всегда...так что может из за этого я не вижу проблемы..тогда заранее извините =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2DZkik: Поясню - представь, что из фаера убрали такую штуку, как "таблица"... )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Перечитал скрипт, понял, что он сравнивает таблицу в фаерволе с таблицей с сайта.

И удаляет/добавляет нужное.

Очень удобно.

 

Хотя мне интересно, если с агрегацией играться, не вызовет ли это проблем для сравнения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ммм.. а кстати, как проходит раздельная тарификация украины/мира?

взять список сетей с колокола, пропустить через aggregate и как-то втолкнуть в rules старгейзера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Перечитал скрипт, понял, что он сравнивает таблицу в фаерволе с таблицей с сайта.

И удаляет/добавляет нужное.

Очень удобно.

 

Хотя мне интересно, если с агрегацией играться, не вызовет ли это проблем для сравнения?

Агрегируй входящий и с нимже сравнивай, лишнее убереться/добавиться

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скрипт обновления сетей в таблицах ipfw.

Требуеться модулб p5-libwww.

/usr/ports/www/p5-libwww

 

#!/usr/bin/perl

#

# Load and Update NETWORK ipfw table. 2006

# Формат сетей xxx.xxx.xxx.xxx/xx

 

use LWP;

$table=1;

$ipfw="/sbin/ipfw";

$getipfwl=`$ipfw table $table list`;

$url="http://www.colocall.net/ua/prefixes.txt";

 

my $ua=LWP::UserAgent->new();

$ua->agent("PerlUA/0.1");

my $document=$ua->request(HTTP::Request->new(GET => $url));

if ($document->is_success){

$uaix=($document->content);

$uaix=~s/\s/\n/g;

......

foreach $ip (@aonly){

system("$ipfw table $table add $ip");

print("$ip add\n");

}

......

Вот тоже надо таблицами управлять, но не получилось....)

Вот такой простейший скрипт:

#!/usr/local/bin/perl

print ("Content-type: text/html\n\n");

use strict;
use CGI ':standard';
use Socket;

my $date = localtime;
my $log = "/usr/scripts/on.log";
my $key = param('key');
my $kod = param('kod');
my $ipfw = "/sbin/ipfw";
my $table = "2";
my $ip = "192.168.30.0/24";

my $metka = 0;
my $id = param('id');

if ($key eq "euflfk")   {
    if ($kod eq "vsem")         {
        if ($id eq "10.10.10.2")        {
        if (open(LOG, ">>$log"))        {
        print LOG "$date"."_"."OPEN"."_"."$id"."_"."$kod"."\n";
        close(LOG);
        system("$ipfw table $table add $ip");
                                }
                                        }
                                }
                        }
exit 0;

Что не так?....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×