KsenZ Опубликовано 25 ноября, 2016 (изменено) · Жалоба Помогите, кто в перле шарит ? Добавь use utf8; #!/usr/bin/perl use utf8; use strict; use warnings; use Net::IDN::Encode ':all'; use URL::Encode ':all'; my $U = 'http://сптр-в-орске.рф/доставка-алкоголя-503752.htm'; $U =~ /http\:\/\/(.+)\/(.+)$/; my $domain = domain_to_ascii($1); my $url = url_encode_utf8($2); print "$domain/$url\n"; Вывод: xn-----elcnyxdiedhf.xn--p1ai/%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0-%D0%B0%D0%BB%D0%BA%D0%BE%D0%B3%D0%BE%D0%BB%D1%8F-503752.htm Изменено 25 ноября, 2016 пользователем KsenZ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 25 ноября, 2016 · Жалоба Ладно, наверное пора уже весь исходник выложить. Он работает с ошибкой: time /usr/bin/xml2 < /opt/zapret-info/dump.xml | ./ziparser.pl > url3 disallowed character U+0081 at /usr/local/lib/perl/5.14.2/Net/IDN/Encode.pm line 46. real 0m3.540s user 0m3.428s sys 0m0.111s сколько-то url успевает разобрать. Это далеко не финальная версия. Запускать так: time /usr/bin/xml2 < /opt/zapret-info/dump.xml ./ziparser.pl | uniq > ./url Код ziparser.pl, засада в последнем цикле for, в самом конце: #!/usr/bin/perl use strict; use warnings; use utf8; # for UTF8 to work correctly binmode(STDOUT,':utf8'); # for removing warnings about wide chars use Net::Netmask; # for ip address list aggregation use Net::IDN::Encode 'domain_to_ascii'; # convert to punycode use URL::Encode 'url_encode_utf8'; # encode national symbols to %bla-bla our $acl = "ZAPRETINFOHTTPS"; # name of ACL in cisco router (border router, not SCE) our $httpsipfile = "ACL"; # for test #our $httpsipfile = "/home/sce/upload/$acl"; # text file with "ZAPRETINFOHTTPS" our @httpsip = (); # https disabled ips our @httpurl = (); # disabled http:// urls our @domainip = (); # ips of disabled domains our $list = {}; ## our @dumpa = (); # for Net::Netmask aggregation and ... our @dumpa2 = (); ## our $U = ""; # variable for URL # we do not use xml modules and we precess plain output from /usr/bin/xml2 # so we use flags, variables and workflow # flags and variables for workflow our $ip = 0; our $https = 0; our $domain = 0; our $t; while (<>) { # http:// url if ( /content\/url=http\:\/\/(.+)$/ ) { my $u = $1; $u =~ s/\:/\\\:/; push @httpurl,"http://".$u; next; } # reset flags if find new id if ( /content\/\@id=\d+$/ ) { $ip = 0; $https = 0; $domain = 0; next;} # set flags if find domain, ip or https if ( /content\/\@blockType=domain$/ ) { $domain = 1; next;} if ( /content\/\@blockType=ip$/ ) { $ip = 1; next;} if ( /content\/url=https\:/ ) { $https = 1; next;} # do actions if flags are set if ( $domain == 1 && /content\/domain=(.+)$/ ) { push @httpurl,"http://".$1."/*"; next; } if ( $domain == 1 && /content\/ip=(.+)$/ ) { push @domainip,$1; next;} if ( $ip == 1 && /content\/ip=(.+)$/ ) { push @domainip,$1; next;} if ( $https == 1 && /content\/ip=(.+)$/ ) { push @httpsip,$1 ; next; } } # Here xml is parsed and massives are filled up # open ACL file for write open(my $httpsiph, '>', $httpsipfile ); # write HEAD of ACL file (delet ACL from internal interfaces) print $httpsiph "interface Port-channel1.1\n no ip access-group $acl in\nexit\n"; print $httpsiph "interface Port-channel2.1\n no ip access-group $acl in\nexit\n"; print $httpsiph "no ip access-list extended $acl\n"; print $httpsiph "ip access-list extended $acl\n"; # Try to aggregate single ips into networks to reduse nubmber of acl records (ace-s) for($t=0;$t<=$#httpsip;++$t) { my $block = new Net::Netmask($httpsip[$t]); $block->storeNetblock( $list); } @dumpa = dumpNetworkTable($list);@dumpa2 = cidrs2cidrs(@dumpa); for($t=0;$t<=$#dumpa2;++$t) { my $block = new Net::Netmask($dumpa2[$t]); print $httpsiph " deny tcp any ",$block->base()," ",$block->hostmask()," eq 443","\n"; } @dumpa = (); @dumpa2 = (); $list = {}; for($t=0;$t<=$#domainip;++$t) { my $block = new Net::Netmask($domainip[$t]); $block->storeNetblock( $list); } @dumpa = dumpNetworkTable($list);@dumpa2 = cidrs2cidrs(@dumpa); # here we have aggregated ip-addresses of https urls in @dumpa2 # write acl rules to ACL file for($t=0;$t<=$#dumpa2;++$t) { my $block = new Net::Netmask($dumpa2[$t]); print $httpsiph " deny tcp any ",$block->base()," ",$block->hostmask()," eq 443","\n"; } @dumpa = (); @dumpa2 = (); $list = {}; # write END of ACL file and setup ACL to internal interfaces print $httpsiph " permit ip any any\n"; print $httpsiph "exit\n"; print $httpsiph "interface Port-channel1.1\n ip access-group $acl in\nexit\n"; print $httpsiph "interface Port-channel2.1\n ip access-group $acl in\nexit\n"; # close ACL file close $httpsiph; # make urls and print them to STDOUT (then use uniq for historical reasons :-)) my @sortedhttpurl = sort @httpurl; for($t=0;$t<=$#sortedhttpurl;++$t) { # print $sortedhttpurl[$t]."---\n"; # print "# ".$sortedhttpurl[$t]." :\n"; $U = ""; $U = $sortedhttpurl[$t]; # $U =~ /http\:\/\/(.+)(\/)?(.+)?$/; # this regex was taken from internet ... if ($U =~ m!^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?!) { my($host,$path) = ($4,$5); my($h,$p) = ( domain_to_ascii($host),url_encode_utf8($path) ); print "http://$h/$p\n"; } } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 25 ноября, 2016 · Жалоба Использую парсер о многоуважаемого max1976 Но скоро от sce буду уходить на extfilter (пока на тесте) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
KsenZ Опубликовано 25 ноября, 2016 (изменено) · Жалоба Но скоро от sce буду уходить на extfilter (пока на тесте) Вот за это спасибо! Судя по описанию, действительно стоящая и отличная разработка, даже HTTPS блокирует! И как по тестам? Все блокирует? С ходу не совсем понял, как ее внедрить. Так же как SCE, в "разрыв" трафика? Изменено 25 ноября, 2016 пользователем KsenZ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Antares Опубликовано 25 ноября, 2016 · Жалоба Но скоро от sce буду уходить на extfilter (пока на тесте) Вот за это спасибо! Судя по описанию, действительно стоящая и отличная разработка, даже HTTPS блокирует! И как по тестам? Все блокирует? С ходу не совсем понял, как ее внедрить. Так же как SCE, в "разрыв" трафика? Ну пока от ревизора нарушений нет. Вешается одной сетевухой на зеркало, второй просто в сеть Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ancient Опубликовано 26 ноября, 2016 · Жалоба Как сказал один из сотрудников если у вас установлен программный ревизор вас не привлекут к ответственности т.к. он не сертифицированный. А если у вас аппаратное решение, то уже были случай привлечения оператора. Уже ж всем эти тп-линки перепрошитые поставили... не суть. Нам предложили поставить программный вместо аппаратного, после чего мы аппаратный сдали, так зачем тогда все кричат не ставьте программный если с этого один профит, вы и с ркн как бы не поругались и привлечь вас не могут как-будто бы Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 28 ноября, 2016 · Жалоба Пока так получилось: #!/usr/bin/perl use strict; use warnings; use utf8; # for UTF8 to work correctly ####binmode(STDOUT,':utf8'); # for removing warnings about wide chars use open ':std', ':encoding(utf-8)'; use Net::Netmask; # for ip address list aggregation use Net::IDN::Encode 'domain_to_ascii'; # convert to punycode use URL::Encode 'url_encode_utf8'; # encode national symbols to %bla-bla our $acl = "ZAPRETINFOHTTPS"; # name of ACL in cisco router (border router, not SCE) our $httpsipfile = "ACL"; #our $httpsipfile = "/home/sce/upload/$acl"; # text file with "ZAPRETINFOHTTPS" our @httpsip = (); # https disabled ips our @httpurl = (); # disabled http:// urls our @domainip = (); # ips of disabled domains our $list = {}; ## our @dumpa = (); # for Net::Netmask aggregation and ... our @dumpa2 = (); ## our $U = ""; # variable for URL # we do not use xml modules and we precess plain output from /usr/bin/xml2 # so we use flags, variables and workflow # flags and variables for workflow our $ip = 0; our $https = 0; our $domain = 0; our $t; while (<>) { # http:// url match here if ( /content\/url=http\:\/\/(.+)$/ ) { my $u = $1; $u =~ s/\:/\\\:/; push @httpurl,"http://".$u; next; } # reset flags if find new id if ( /content\/\@id=\d+$/ ) { $ip = 0; $https = 0; $domain = 0; next;} # set flags if find domain, ip or https if ( /content\/\@blockType=domain$/ ) { $domain = 1; next;} if ( /content\/\@blockType=ip$/ ) { $ip = 1; next;} if ( /content\/url=https\:/ ) { $https = 1; next;} # do actions if flags are set if ( $domain == 1 && /content\/domain=(.+)$/ ) { push @httpurl,"http://".$1."/*"; next; } if ( $domain == 1 && /content\/ip=(.+)$/ ) { push @domainip,$1; next;} if ( $ip == 1 && /content\/ip=(.+)$/ ) { push @domainip,$1; next;} if ( $https == 1 && /content\/ip=(.+)$/ ) { push @httpsip,$1 ; next; } } # Here xml is parsed and massives are filled up # open ACL file for write open(my $httpsiph, '>', $httpsipfile ); # write HEAD of ACL file (delet ACL from internal interfaces) print $httpsiph "interface Port-channel1.1\n no ip access-group $acl in\nexit\n"; print $httpsiph "interface Port-channel2.1\n no ip access-group $acl in\nexit\n"; print $httpsiph "no ip access-list extended $acl\n"; print $httpsiph "ip access-list extended $acl\n"; # Try to aggregate single ips into networks to reduse nubmber of acl records (ace-s) for($t=0;$t<=$#httpsip;++$t) { my $block = new Net::Netmask($httpsip[$t]); $block->storeNetblock( $list); } @dumpa = dumpNetworkTable($list);@dumpa2 = cidrs2cidrs(@dumpa); for($t=0;$t<=$#dumpa2;++$t) { my $block = new Net::Netmask($dumpa2[$t]); print $httpsiph " deny tcp any ",$block->base()," ",$block->hostmask()," eq 443","\n"; } @dumpa = (); @dumpa2 = (); $list = {}; for($t=0;$t<=$#domainip;++$t) { my $block = new Net::Netmask($domainip[$t]); $block->storeNetblock( $list); } @dumpa = dumpNetworkTable($list);@dumpa2 = cidrs2cidrs(@dumpa); # here we have aggregated ip-addresses of https urls in @dumpa2 # write acl rules to ACL file for($t=0;$t<=$#dumpa2;++$t) { my $block = new Net::Netmask($dumpa2[$t]); print $httpsiph " deny tcp any ",$block->base()," ",$block->hostmask()," eq 443","\n"; } @dumpa = (); @dumpa2 = (); $list = {}; # write END of ACL file and setup ACL to internal interfaces print $httpsiph " permit ip any any\n"; print $httpsiph "exit\n"; print $httpsiph "interface Port-channel1.1\n ip access-group $acl in\nexit\n"; print $httpsiph "interface Port-channel2.1\n ip access-group $acl in\nexit\n"; # close ACL file close $httpsiph; # make urls and print them to STDOUT (then use uniq for historical reasons :-)) my @sortedhttpurl = sort @httpurl; for($t=0;$t<=$#sortedhttpurl;++$t) { $U = ""; $U = $sortedhttpurl[$t]; # check for non-ASCII chars in url if($U =~ /[^!-~\s]/g) { if ($U =~ m!^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?!) { my($host,$path) = ($4,$5); chomp($host) ; chomp($path); $path =~ s/^\/// ; my($h,$p) = ( domain_to_ascii($host),url_encode_utf8($path) ); print "http://$h/$p\n"; } } else { print "$U\n"; } } Но при заливке файла с выводом этого скрипта выдаются такие ошибки: Error - Internal error, Input concatenated Key String are not valid: 195.2.252.170\:/music/%D0%9C%D0%A3%D0%A1%D0%90%20%D0%90%D0%91%D0%A3%20%D0%AE%D0%A1%D0%A3%D0%A4.html:*:* Error - Internal error, Input concatenated Key String are not valid: 195.2.252.170\:/music/%D0%9C%D1%83%D1%81%D0%B0%20%D0%90%D0%B1%D1%83%20%D0%AE%D1%81%D1%83%D1%84.html:*:* Error - Internal error, Input concatenated Key String are not valid: 27.255.83.149\:/:*:* Error - Internal error, Input concatenated Key String are not valid: 37.139.28.143\:/:*:* Опять какая-то лажа в реестре. Напрмиер, там естьтакой url: "http://37.139.28.143\:8001/" Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Rivia Опубликовано 28 ноября, 2016 · Жалоба Как сказал один из сотрудников если у вас установлен программный ревизор вас не привлекут к ответственности т.к. он не сертифицированный. А если у вас аппаратное решение, то уже были случай привлечения оператора. Уже ж всем эти тп-линки перепрошитые поставили... не суть. Нам предложили поставить программный вместо аппаратного, после чего мы аппаратный сдали, так зачем тогда все кричат не ставьте программный если с этого один профит, вы и с ркн как бы не поругались и привлечь вас не могут как-будто бы У меня один встречный вопрос. Вот поломался у вас сервер, ревизор не работает. Чьи это будут проблемы, что вас нельзя протестировать? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Butch3r Опубликовано 28 ноября, 2016 · Жалоба Конечно ваши проблемы. Размещая ПО на своих мощностях вы отвечаете за его работу. Проблемы негров шерифа не еб... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 28 ноября, 2016 · Жалоба Конечно ваши проблемы. Размещая ПО на своих мощностях вы отвечаете за его работу. Проблемы негров шерифа не еб... Мы им виртуалку сделали, РКН это устроило. Было несколько раз, что они с каких-то других ip хотели зайти на виртуалку и запустить проверялку, но фаервол их не пустил. Они позвонили, мы им рассказали, что в целях безорасности и всё такое, они поняли, сказали доп. адреса и всё. Тут это ... у нас SCE почему-то раньше зашлушку показывала, а теперь не показывает :-). Было несколько апгрейдов версий firefox и chrome. Это с этим связано ? Сейчас фф пишет "соединение разорвано" (быстро такое сообщение выдаёт), в логах на сервере с заглушкой нет ip, с которого тестирую. Пащему так ? :-) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Mechanic Опубликовано 7 января, 2017 · Жалоба Sce работает как блокирование ркн + dpi + шейпер? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
snark Опубликовано 12 января, 2017 · Жалоба Sce работает как блокирование ркн + dpi + шейпер? Ви таки не повегите... :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vurd Опубликовано 12 января, 2017 · Жалоба Только сце уже не круто. Я так понимаю нужно в сторону отечественного смотрет сейчас. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Bat Опубликовано 25 января, 2017 · Жалоба Удалось кому-нибудь сделать блокировку на SCE https-трафика по адресам? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Дятел Опубликовано 25 января, 2017 · Жалоба Удалось кому-нибудь сделать блокировку на SCE https-трафика по адресам? дык только по адресам и удалось.... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Bat Опубликовано 25 января, 2017 · Жалоба Тьфу, не совсем корректно сформулировал. Имелась ввиду блокировка по именам https-хостов. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ShyLion Опубликовано 25 января, 2017 · Жалоба Тьфу, не совсем корректно сформулировал. Имелась ввиду блокировка по именам https-хостов. нет Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ShyLion Опубликовано 15 февраля, 2017 · Жалоба Коллеги, SCE в упор не хочет фильтрвать такой флейвор: mp3.get.az / * q=%D0%B1%D0%B0%D0%B3%D0%B0%D1%83%D0%B4%D0%B4%D0%B8%D0%BD+%D0%BC%D1%83%D1%85%D0%B0%D0%BC%D0%BC%D0%B0%D0%B4+%D0%94%D0%BE%D0%B2%D0%BE%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE+%D0%BA%D0%B0%D1%84%D0%B8%D1%80%D1%81%D0%BA%D0%B8%D0%BC+%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%BE%D0%BC Вот че ему надо? Есть еще несколько. Причем есть куча других, также имеющих в себе %D0%xx в теле урла и все нормально фильтруется. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pers123 Опубликовано 15 февраля, 2017 · Жалоба Коллеги, SCE в упор не хочет фильтрвать такой флейвор: mp3.get.az / * q=%D0%B1%D0%B0%D0%B3%D0%B0%D1%83%D0%B4%D0%B4%D0%B8%D0%BD+%D0%BC%D1%83%D1%85%D0%B0%D0%BC%D0%BC%D0%B0%D0%B4+%D0%94%D0%BE%D0%B2%D0%BE%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE+%D0%BA%D0%B0%D1%84%D0%B8%D1%80%D1%81%D0%BA%D0%B8%D0%BC+%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%BE%D0%BC Вот че ему надо? Есть еще несколько. Причем есть куча других, также имеющих в себе %D0%xx в теле урла и все нормально фильтруется. Какому урлу в базе это соответствует? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ShyLion Опубликовано 16 февраля, 2017 · Жалоба Какому урлу в базе это соответствует? 313761 <content id="313761" includeTime="2016-08-01T16:18:01" urgencyType="1" entryType="3" hash="5277165C20EDD7D09790C063B7E2876C"> <decision date="2016-06-24" number="27-31-2016/Ид2781-16" org="Генпрокуратура" /> <url> <![CDATA[http://mp3.get.az/?q=%D0%B1%D0%B0%D0%B3%D0%B0%D1%83%D0%B4%D0%B4%D0%B8%D0%BD+%D0%BC%D1%83%D1%85%D0%B0%D0%BC%D0%BC%D0%B0%D0%B4+%D0%94%D0%BE%D0%B2%D0%BE%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE+%D0%BA%D0%B0%D1%84%D0%B8%D1%80%D1%81%D0%BA%D0%B8%D0%BC+%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%BE%D0%BC]]> </url> <domain> <![CDATA[mp3.get.az]]> </domain> <ip>163.172.30.112</ip> </content> Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pers123 Опубликовано 16 февраля, 2017 · Жалоба 1. 277 символов, длиновато, но вроде не критично, насколько я помню суммарная длина всех ключей - 512 байт... 2. После ? знака идут параметры запроса (query parameters) он и составляет основную часть URL Есть ли ограничение на распределение 512 байт между ключами - не знаю, а так тупо в лоб вроде корректно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Butch3r Опубликовано 16 февраля, 2017 · Жалоба У SCE лимит длины ссылки, в 277 это 100% много. Где-то на форуме уже называли максимальную длину Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pers123 Опубликовано 16 февраля, 2017 · Жалоба Кстати, хорошая идея ограничится суммарной длинной полей flavor 250 символами, обрезать самый длинный ключ, в данном случае query parameters и поставить * в конце. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Butch3r Опубликовано 16 февраля, 2017 · Жалоба Кстати, хорошая идея ограничится суммарной длинной полей flavor 250 символами, обрезать самый длинный ключ, в данном случае query parameters и поставить * в конце. мы даже ещё больше режем и в конце *. Народ сейчас гораздо "лояльнее" воспринимает блокировки и уже как год назад не звонят провайдеру и не кричат недовольным голосом. Все уже понимают, что это не прихоть провайдеров... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ShyLion Опубликовано 16 февраля, 2017 · Жалоба Спасибо, попробую подсократить. Ревизор в основном на супердлинные ссылки и ругается. А вот на сколько критично звездочкой попасть за окончание юникод-символа %D0%xx пофиг или не пофиг? Т.е. вот переводит SCE внутри себя ссылку в юникод или нет? Ваши парсеры как поступают? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...