The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Ограничение доступа по ip назначения в Squid"
Отправлено Eugene Marko, 11-Янв-06 15:51 
не самый быстрый, и не самый оптимальный, но работающий перловый скрипт превращающий http://noc.ix.net.ua/ua-list.txt  в удобоваримый для сквида вид.
<pre>
#!/usr/bin/perl


@uaix=<STDIN>;

#@uaix = ("192.168.0.0", "192.168.0.0/16");
undef @netz;
foreach $net (@uaix) {
    chomp $net;
    my ($addr,$mask)=split/\//,$net;
    if ( $mask eq "" ) { $mask = 24; }
    push (@netz, "$addr/$mask");
}

undef %saw;
@nethash{@netz} = ();
@uaix = sort keys %nethash;

foreach $net1 (@uaix) {
    $overlapped = 0;
    foreach $net2 (keys %nethash) {
        if ((check4overlap($net1,$net2) == 1)and($net1 ne $net2)) { $overlapped = 1; }
    }
    if ($overlapped ==1) {
        delete $nethash{$net1};
    }

}

@uaix = sort keys %nethash;

foreach $net (@uaix) {
    print "$net\n";
}


sub check4overlap {
    ($net1,$net2) =@_;

    my ($addr1,$mask1)=split/\//,$net1;
    my $paddrp1=pack("C4",(split (/\./, $addr1)));
    my $paddr1=unpack("L",$paddrp1);
    my $pmask1=unpack("L",pack("B32",(1 x $mask1)));
    my $phmin1  = pack("B*",("0"x31) . "1") | $paddrp1;
    my $phmax1  = pack("B*",("0"x $mask1) . ("1" x (31 - $mask1)) . "0" ) | $paddrp1;
    my $pminaddr1 = unpack("L",$phmin1);
    my $pmaxaddr1 = unpack("L",$phmax1);
    my ($addr2,$mask2)=split/\//,$net2;
    my $paddr2=unpack("L",pack("C4",(split (/\./, $addr2))));
    my $pmask2=unpack("L",pack("B32",(1 x $mask2)));


    my $ifmin1in2 = (($pminaddr1 & $pmask2)==($paddr2 & $pmask2));
    my $ifmax1in2 = (($pmaxaddr1 & $pmask2)==($paddr2 & $pmask2));


    if (($ifmin1in2==1)and($ifmax1in2==1)){
        return 1;
    }

    return 0;
}

</pre>

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру