Перейти к содержимому
Калькуляторы

wtyd

Активный участник
  • Публикации

    530
  • Зарегистрирован

  • Посещение

Все публикации пользователя wtyd


  1. Я так и хотел бы сделать, но только с октетом выдаваемого ip-адреса, не суть важно. На unlang это можно сделать ? Если да, то как ?
  2. Советую не делать этого. Я делал рандомную выдачу dns - клиенты на винде сразу начинают тупить: если будут выданы другие dns или в другом порядке, то винда будет игнорить dhcp ack от сервера, что в итоге приведет к потерю клиентом лизы и нового dhcp discover. Можно сделать "псевдо" рандомно, выдавая определенным подсетям свои dns сервера, но главное всегда одни и те же. Хорошо, это аргумент, с этим согласен. Но так как у нас в радиусе есть кеширование и привязка ip-mac, то можно было бы одному и тому же адресу выдавать первый список ДНС, второму -- второй. Например, нечётным ip выдавать первый список, чётным - второй. Можно ли такое на unlang реализовать ? Не нашёл я там деления или других обычных для языка программирования операций. Через SQL этого делать не хочу :-).
  3. Хотим выдавать список dns рандомно для распредлеения нагрузки, т.е. на один запрос выдавать dnsip1 и dnsip2, а на следующий запрос выдавать dnsip2 и dnsip1. Есть такой конфиг: update reply { &DHCP-Domain-Name-Server[1] = 192.168.1.1 &DHCP-Domain-Name-Server[2] = 192.168.0.1 &DHCP-Subnet-Mask = 255.255.255.0 &DHCP-Renewal-Time = 86300 &DHCP-Rebinding-Time = 86330 &DHCP-IP-Address-Lease-Time = 86400 &DHCP-DHCP-Server-Identifier = 192.168.0.14 &DHCP-Relay-Circuit-Id := "%{request:DHCP-Relay-Circuit-Id}" &DHCP-Relay-Remote-Id := "%{request:DHCP-Relay-Remote-Id}" } Вот, хотелось бы рандомить &DHCP-Domain-Name-Server[1] и &DHCP-Domain-Name-Server[2]. Подскажите, как это можно сделать применительно конфига выше ?
  4. Пока не знаю, какими командами заливать что-то на SCE кроме url. url заливается так: int LineCard 0 sce-url-database import cleartext-file ftp://user:password@192.168.2.3/path/to/url.txt flavor-id 125 флавор 125 был создан через GUI. Как сделать заливку списка с запрещёнными ip, доступ к которым надо закрыть на порт 443, непонятно. Нет там команды типа sce-ip-database import ... Не подскажете команды cli в сторону которых копать ?
  5. Ну я что-то даже не знаю, что сказать :-). Я в SCE не очень, я только составление списка сделал и на expect скрипт написал, а вот как SCE внутри работает, что там можно, как архитектура сделана, я этого не знаю. Я наверное ошибаюсь, но фловер тот с url на 80-ый порт навешивается, нет ? Т.е. в один флавор ещё и ойпи с портами напихать наверное нельзя, но я поэтому и спросил. Как правильно-то ? В Classification что надо выбрать ? Под Browsing это не подходит
  6. Хотим перенести на SCE фильтрацию ip-адресов и ssl (фильтрация по ip и портам из запретинфо, url у нас уже на SCE фильтруется) с маршрутизатора, т.к. там уже 13+ тысяч записей получается и TCAM начал ругаться. Не смогли с ходу найти аналог обычного ip access-group <acl name> in на SCE. Ну и ещё надо чтобы acl подгружался командами telnet. Т.е. есть acl (список команд), который генерит скрипт, надо его загружать на SCE чтобы тупо фильтровать по ip и портам пролетающий через SCE трафик. На expect или ещё как, url загружаем expect'ом по telnet. Подскажите, пожалуйста, как такое сделать на SCE2000 ?
  7. Extfilter работает на dpdk, значит все что поддерживает dpdk, работает с extfilter. Ок. Понятно. Ещё во прос: как именно extfilter блокирует url ? Шлёт tcp-rst ? В обе стороны ? Клиенту шлёт маленький html с редиректом на страничку ? 2-3 года назад, когда стало ясно, что заставят блокировать именно url, я пробовал на сурикате снимать отзеркалированный трафик и блокировать доступ отсылкой rst, но у меня не получилось -- ответ приходил раньше. Смотрел tcpdump'ом, rst отсылался и доходил до клиента, но я всёравно успевал увидеть запрашиваемый url. Это при том, что тестовый клиентский хост был всего один. В итоге я отказался от идеи работать с зеркалированным трафиком. Хотя это гораздо лучше, чем ставить что-то в разрыв сети -- всякие там не вполне адекватные SCE. И вообще, стал замечать, что после того, как провайдеры стали выполнять требования по блокировке, интернет стал работать как-то не так :-). Может быть мне это только кажется. Можно слать клиенту html ответ с редиректом, можно слать просто rst, так же можно слать rst серверу (все задается в конфиге). При правильно настроенной схеме проблем с быстрым получением ответа от фильтра не наблюдается. А как правильнее??? Да хоть как :-), главное чтобы работало. html это один пакет, rst ещё один.
  8. Extfilter работает на dpdk, значит все что поддерживает dpdk, работает с extfilter. Ок. Понятно. Ещё во прос: как именно extfilter блокирует url ? Шлёт tcp-rst ? В обе стороны ? Клиенту шлёт маленький html с редиректом на страничку ? 2-3 года назад, когда стало ясно, что заставят блокировать именно url, я пробовал на сурикате снимать отзеркалированный трафик и блокировать доступ отсылкой rst, но у меня не получилось -- ответ приходил раньше. Смотрел tcpdump'ом, rst отсылался и доходил до клиента, но я всёравно успевал увидеть запрашиваемый url. Это при том, что тестовый клиентский хост был всего один. В итоге я отказался от идеи работать с зеркалированным трафиком. Хотя это гораздо лучше, чем ставить что-то в разрыв сети -- всякие там не вполне адекватные SCE. И вообще, стал замечать, что после того, как провайдеры стали выполнять требования по блокировке, интернет стал работать как-то не так :-). Может быть мне это только кажется.
  9. Скажите, extfilter поддерживает все сетевые карты из списка http://dpdk.org/doc/nics или есть другой список ?
  10. Государству нужны деньги, вы что, не патриот ? :)
  11. например так create igmp_snooping multicast_vlan_group_profile tv config igmp_snooping multicast_vlan_group_profile tv add 239.1.0.0-239.1.31.255 config igmp_snooping multicast_vlan_group mvr add profile_name tv Спасибо, будем проверять.
  12. Покажите, пожалуйста, пример конфигурации для DGS-3120-24SC этого профайла. В других моделях всё несколько иначе делается. Пока не могу понять, как его навесить на влан это профайл, может быть вообще не так всё делаю ...
  13. Нет, т.е. это должен быть конкретный диапазон, который обхватывает ваш плейлист. зачастую там 1-2 сетки /24, или куда реже какой-нибудь /19 (у нтв+ например). У нас я не смогу определить более узкие блоки, т.е. это конечно можно было бы сделать, но адреса каналов часто меняются и это действительно трудоёмко, т.е. пока я в этом смысла не вижу, а свичи переконфигурять скорее всего придётся все. Не проще ли сделать именно "224.0.1.0 - 239.255.255.255" ? Чем это чревато ? Да, наверное есть ещё какие-то "зарезервированные" поддиапазоны адресов мультикаста. Как поступить правильнее ?
  14. Понятно ... т.е. это наверное будет диапазон "224.0.1.0 - 239.255.255.255", я правильно понимаю ? Это я взял из конфига e-core, который не помню где подсмотрел :-). Может ещё какие исключения нужны ?
  15. Ок, спасибо, а как надо правильно ? filter -- значит "снупать", а forward -- не снупать ?
  16. Есть такой аппарат: Device Type : DGS-3120-24SC Gigabit Ethernet Switch Unit ID : 1 MAC Address : D8-FE-E3-8D-4A-20 IP Address : 192.168.1.3 (Manual) VLAN Name : default Subnet Mask : 255.255.255.0 Default Gateway : 192.168.1.1 Boot PROM Version : Build 3.00.501 Firmware Version : Build 3.10.B516 Hardware Version : B1 Firmware Type : EI Serial Number : RXXXXXXXXXX System Name : XXXXX System Location : XXXXXXXXXXXXXXXX System Uptime : 176 days, 11 hours, 21 minutes, 12 seconds System Contact : Spanning Tree : Enabled GVRP : Disabled IGMP Snooping : Enabled MLD Snooping : Disabled VLAN Trunk : Disabled Telnet : Enabled (TCP 23) Web : Enabled (TCP 80) SNMP : Enabled SSL Status : Disabled Настроен mvr, телеки показывают, всё зашибись, но есть подозрения, что свич "трогает" первую сеть класса Ц из маульикаст диапазона. Т.е. 224.0.0.0/24. Свичи не должны её "снупать", т.к. это подсеть для протоколов маршрутизации и т.п. Подозрение возникло из-за того, что OSPF в отдельном клиентском влане не работает. Можетбыть конечно дело не в этом свиче, но других подозреваемых нет, возможности снятьтрафик тоже нет. Есть два вопроса: 1. Может кто сталкивался с подобным явлением ? Что надо сделать , чтобы OSPF через длинк заработал ? 2. Вероятно, поможет обновление прошивки. Какую прошивку брать для данного коммутатора ? Т.е. я не совсем понял на счёт разновидностей свичей и прошивок. У длинка на фтп несколько каталогов: http://ftp.dlink.ru/pub/Switch/DGS-3120-24SC/ http://ftp.dlink.ru/pub/Switch/DGS-3120-24SC_B1AEI/ http://ftp.dlink.ru/pub/Switch/DGS-3120-24SC_B1ARI/ Думаю, что DGS-3120-24SC_B1AEI, но не уверен. Прошивкииз какого каталога следует использовать ? Завалить свич я не имею права :). Ещё там есть более новая мажорная версия, обычно с переходом на другую мажорную версию возникают проблемы и есть та кназываемые промежуточные прошивки. В данном случае будут проблемы с переходом или нет ? Может быть другие проблемы будут, связанные с обновлением на следующую мажорную версию (что-то переконфигурить придётся, старый конфиг не подойдёт ...)?
  17. Коммутаторы ES3528M(ES3552M) являются End of Life. Только критические исправления делают и то по запросу покупателей, которые 100500 их купили. Новых фич точно не будет. Если вы официально купили таких свичей меньше чем 100500, то вендор не будет рассматривать ваши пожелания -- это не относится к Вимкому, это относится к штаб-квартире ежей. Можно сделать не relay, а классический "ip dhcp snooping option 82", на 3528М это работало нормально. Вы случайно не сталкивались с ограничением кол-ва снупинговых записей на порту если на пример source guard выключен и кол-во mac-адресов ~20-40? Да, это было в какой-то документации. Если я правильно помню, то у 3528М на порт 16 биндингов (любых), если надо больше, значит у вас неправильна сеть с точки зрения вендора :-) и я с ним согласен. Надо либо подключать абонентов напрямую в 3528М (16 биндинов на одного абонента это более чем достаточно, у абонента должен быть роутер, а не свич), либо искать другой свич с бОЛьшим числом биндингов. Либо менять схему подключения и делать задачу другими методами, напрмиер, ip unnumbered + ip dhcp snooping + reverce-path-filter на цыске, которая это поддерживает, а на свичах доступа сделать изоляцию портов и castomers-vlan-per-switch .. как-то так. Или vlan-per-user ... много чего есть в этом мире :-).
  18. Коммутаторы ES3528M(ES3552M) являются End of Life. Только критические исправления делают и то по запросу покупателей, которые 100500 их купили. Новых фич точно не будет. Если вы официально купили таких свичей меньше чем 100500, то вендор не будет рассматривать ваши пожелания -- это не относится к Вимкому, это относится к штаб-квартире ежей. Можно сделать не relay, а классический "ip dhcp snooping option 82", на 3528М это работало нормально.
  19. Мы им виртуалку сделали, РКН это устроило. Было несколько раз, что они с каких-то других ip хотели зайти на виртуалку и запустить проверялку, но фаервол их не пустил. Они позвонили, мы им рассказали, что в целях безорасности и всё такое, они поняли, сказали доп. адреса и всё. Тут это ... у нас SCE почему-то раньше зашлушку показывала, а теперь не показывает :-). Было несколько апгрейдов версий firefox и chrome. Это с этим связано ? Сейчас фф пишет "соединение разорвано" (быстро такое сообщение выдаёт), в логах на сервере с заглушкой нет ip, с которого тестирую. Пащему так ? :-)
  20. Пока так получилось: #!/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/"
  21. Ладно, наверное пора уже весь исходник выложить. Он работает с ошибкой: 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"; } }
  22. Да, блокируется. И как вы генерируете список для SCE? Мне осталось забороть ошибку "disallowed character U+0081 at /usr/local/lib/perl/5.14.2/Net/IDN/Encode.pm line 46. " (см. выше) и скорее всего будет всё работать. Помогите, кто в перле шарит ?
  23. Скажите, вы уверены, что если в SCE загрузить ссылку вида "http://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" (это http://сптр-в-орске.рф/доставка-алкоголя-503752.htm), то она заблокируется ? Т.е. вы это проверяли ? А то может я зря мучаюсь ?:-).
  24. Уже ж всем эти тп-линки перепрошитые поставили... не суть. Почему это не работает? #!/usr/bin/perl use strict; use warnings; use Net::IDN::Encode ':all'; use URL::Encode ':all'; my $U = 'http://сптр-в-орске.рф/доставка-алкоголя-503752.htm'; #my $U = 'http://yandex.ru/доставка-алкоголя-503752.htm'; $U =~ /http\:\/\/(.+)\/(.+)$/; print "$1\n"; print "$2\n\n"; my $domain = domain_to_ascii($1); my $url = url_encode_utf8($2); print "$domain\n"; print "$url\n"; Выдаёт: сптр-в-орске.рф доставка-алкоголя-503752.htm disallowed character U+0081 at /usr/local/lib/perl/5.14.2/Net/IDN/Encode.pm line 46. Я уже пару часов ищу рабочий пуникодер на перле ...
  25. Да какая разница, что там открывается или нет и куда резовится ? Главное, чтобы проверялки РКН делали отчёт со статусом "ок". Но "ок" всёравно никогда не будет, хотя бы потому, что операторы блокируют по xml документу, который они получают самостоятельно, а провреялки проверяют по какому-то другому документу, который 100% будет получен в иное время и скорее всего будет отличаться. И вообще, мы отвлеклись от темы :-). Как нормализовать url ?