Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Хак money-grabber v0.1 и другие

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Но пашет.
 
Собственно тырит заданные курсы с принт-паги центробанка РФ на текущую дату.
 
Установка дурная, но мне уж так было удобнее.
 
Для начала стоит решить где будем ставить.
Если в форумах, как у меня, то forum.cgi править, если на главной - ikonboard.cgi, в постах - topic.cgi
 
На примере forum.cgi
 
1. Создаем папки в корне ИБ скриптов - mods/, plugins/
 
2. В папке mods/
надо создать 3 файла - lock.pm, plug.lck, plugins.pm
 
lock.pm

Код:
 
$funclist="ulock(lock_file): locking files used by current procces; unulock(): unulock it;\n";
 
sub ulock {
 my $lockfile=shift;
 open(SEM, ">$lockfile") if (-e $lockfile);
  flock(SEM, 2);
 undef $lockfile;
}
 
sub unulock {
 close(SEM);
}
 

 
plug.lck - пустой файл
 
plugins.pm

Код:
 
$funclist="-free-";
#load_plugins('plugins','.pm$','all');
#load_plugins('plugins','.pm$','mod1,mod2,etc');
 
sub load_plugins {
 my $folder=shift;
 my $greptemplate=shift;
 my $load_modules=shift;
 
 my $i=0;
 
 opendir(PD, $folder);
  my @pluginlist=grep{/$greptemplate/i} readdir(PD);
 closedir(PD);
 $load_modules=~s/[^a-z0-9\-_,]//igs;
 unless ($load_modules=~m/^all$/i) {
  for ($i=0;$i<@pluginlist;$i++) {
   $pluginlist[$i]=~m/^(.*)$greptemplate/i;
   unless ($load_modules=~m/^|,$1,|$/i) {
    $pluginlist[$i]='';
   }
  }
 }
 for ($i=0;$i<@pluginlist;$i++) {
  require "$folder/$pluginlist[$i]" || plug_save_error($folder,"Error requiring module $folder/$pluginlist[$i]") if ($pluginlist[$i] ne '');
 }
}
 
sub plug_save_error {
 my $folder=shift;
 my $text=shift;
 require mods::lock;
 ulock('error.lck');
 open(F, ">>$folder/error.log");
  print F '[',scalar(localtime),"] $text\n";
 close(F);
 unulock();
}
 
 

 
 
 
Далее переходим к папке plugins/
тут надо два файла - money-grabber.pm, DT_date.pm
 
money-grabber.pm

Код:
 
$funclist="-free-";
use LWP::Simple;
 
sub MG_grabpage {
 my $url=shift;
 my $source;
 
 if (defined ($source=get($url))) {
  return $source;
 } else {
  return 0;  
 }
 undef $url; undef $source;
}
 
sub MG_save_and_load {
 my $g_data_file=shift;
 my $g_url_to_load=shift;
 my $g_restart_delay=shift;
 my ($g_data,$i);
 my %g_types=('USD'=>'','EUR'=>'','GBP'=>''); # add more if need
 
 unless ((-M $g_data_file)*24*60<$g_restart_delay && -e $g_data_file) {
  $g_data=MG_grabpage($g_url_to_load);
  if ($g_data ne '') {
   $g_data=~s/[\n\r]//gs;
   foreach (keys %g_types) {
    $g_data=~m/<tr[^<>]*><td[^<>]*>[0-9]*<\/td><td[^<>]*>[^<>]*;$_<\/td><td[^<>]*>[^<>]*<\/td><td>[^<>]*<\/td><td[^<>]*>([0-9]{2},[0-9]{2,5})<\/td><\/tr>/is;
    $g_types{$_}=$1 if ($1);
    $g_types{$_}=~s/,/\./gs;
   }
   ulock('mods/plug.lck');
   open(GDF, ">$g_data_file");
   foreach (sort keys %g_types) {
    print GDF "$_ = $g_types{$_}\n";
   }
   close(GDF);
   unulock();
  }
 }
 
 $g_data='';
 open(GDF, $g_data_file);
  while(<GDF>) {
   $g_data.="$_<br>\n";
  }
 close(GDF);
 
 return $g_data;
}
 

 
 
DT_date.pm

Код:
 
$funclist="-free-";
 
sub DT_getdate {
 (undef,undef,undef,$mday,$mon,$year,undef,undef,undef)=localtime(time);
 $mon++;
 if ($mday<10) {
  $mday="0$mday";
 }
 if ($mon<10) {
  $mon="0$mon";
 }
 $year+=1900;
 return "$mday/$mon/$year";
}
 
sub DT_StrToDig {
 my $str=shift;
 
 $str=~s/jan/01/i;
 $str=~s/feb/02/i;
 $str=~s/mar/03/i;
 $str=~s/apr/04/i;
 $str=~s/may/05/i;
 $str=~s/jun/06/i;
 $str=~s/jul/07/i;
 $str=~s/aug/08/i;
 $str=~s/sep/09/i;
 $str=~s/oct/10/i;
 $str=~s/nov/11/i;
 $str=~s/dec/12/i;
 
 return $str;
 undef $str;
}
 

 
3.
открываем forum.cgi и после

Код:
 
$bypass         = &stripMETA("$bypass");
$inforum        = &stripMETA("$inforum");
$intopic        = &stripMETA("$intopic");
$action         = &stripMETA("$action");
$inshow         = &stripMETA("$inshow");
$jumpto         = &stripMETA("$jumpto");
 

 
Дописываем

Код:
 
#-----------MyAdds-----------#
if ($inforum==1) {
 require mods::plugins;
 require mods::lock;
 load_plugins('plugins','.pm$','money-grabber,DT_date');
 
#---money---#
 
 my $g_date=DT_getdate();
 my $g_url_to_load="http://cbr.ru/currency_base/D_print.asp?date_req=$g_date";
 my $g_data_file='data/cbr-money.dat';
 
 $g_output=MG_save_and_load($g_data_file,$g_url_to_load,$g_restart_delay=30);
 $g_url_to_load=~m/(https?:[\/]{2}[a-z0-9\-_\.]+)\//i;
 $g_output="<div class=\"money_values\"><b>$g_output</b><br>Источник: <a href=\"$_\" target=\"_blank\"><b>ЦБ РФ</b></a></div><br><br>";
}
 
#----------------------------#
 

 
if ($inforum==1) {
 и  
}
 в конце можно убрать, это проверка вывода, т.е. можно кидать только в определенные форума.
 
4. Выводим:
находим

Код:
 
        if ($numberofpages > 10) {
            $toptopicpages = qq~<font face="$font" color=$menufontcolor size=$dfontsize1><b>$ibtxt{'0603'}</b> [ $ibtxt{'0620'} ]~;
            }
            else {
                $toptopicpages = $topicpages;
                }
         
        # Print the forum top bar
 
        $output .= qq~
 

сразу после qq~ вставляем

Код:
$g_output

 
5. Пример стиля для div.money_values

Код:
 
.money_values {
    font: 12px verdana;
    color:#000000;
    width: 130;
    top: 130;
    left: 100;
    background-color: #c8f4f4;
    border: 1px #606060 solid;
    position: absolute;
    z-index:2;
    padding: 4 4 4 4;
}
 

 
 
6. В работе - http://watchforyou.ru/cgi-bin/board/forums.cgi?forum=5

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 09:32 19-05-2006 | Исправлено: CheRt, 20:14 20-05-2006
Marilda

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt
Спасибо. Спасибо, что кто-то для IB2 что-то делает.
 
 

Всего записей: 381 | Зарегистр. 24-10-2002 | Отправлено: 18:01 20-05-2006
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Marilda, на своем очень много что переделал. Далее буду делать код более читабельным.
 
Могу еще оформить в виде хака модифик аватар - .gif+.jpg можно использовать. Не хак, но может кому и надо.
 
Но к сожалению все выдавать не буду по следующим причинам:
1. Некоторые фичи - визитная карточка моего форума.
2. Некоторые вещи уже сам подробно не помню как вводил.
 
После глобальных изменений можно свою сборку сделать, но стоит ли?! ИБ2 никому толком уже не нужен. Знаю как его разогнать хорошенько, только у более новых движков и скорость повыше, и возможности.
 
 
.jpg как аватара
Заточен под ру-боард дистриб(2.1.9рус)
Редактировать придется два файла - topic.cgi, profile.cgi и register.cgi
 
Это для profile.cgi и register.cgi
 
Ищем следующий код:

Код:
 
### Avatar stuff
 
 
if ($avatars eq "on") {
 
        $dirtoopen = "$imagesdir" . "avatars";
        opendir (DIR, "$dirtoopen") or die "$ibtxt{'1923'} ($dirtoopen) $ibtxt{'1924'} \$imagesdir $ibtxt{'1925'} \&gt\; Set-Variables";
        @dirdata = readdir(DIR);
        closedir (DIR);
 
        @images = grep(/gif/,@dirdata);
        @images = sort @images;
         
        foreach (@images) {
 
            $cleanavatar =  $_;
            $cleanavatar =~ s/.gif//i;
 

 
меняем на  
 

Код:
 
### Avatar stuff
 
 
if ($avatars eq "on") {
 
        $dirtoopen = "$imagesdir" . "avatars";
        opendir (DIR, "$dirtoopen") or die "$ibtxt{'1923'} ($dirtoopen) $ibtxt{'1924'} \$imagesdir $ibtxt{'1925'} \&gt\; Set-Variables";
        @dirdata = readdir(DIR);
        closedir (DIR);
 
        @images = grep(/(gif)|(jpg)/,@dirdata);
        @images = sort @images;
         
        foreach (@images) {
 
            $cleanavatar =  $_;
            $cleanavatar =~ s/\.gif$//i;
            $cleanavatar =~ s/\.jpg$//i;
 
 

 
далее ищем
 

Код:
 
            $avatarhtml = qq~
            <script language="javascript">
                function showimage()
                {
                //alert("$imagesurl/avatars/"+document.creator.useravatar.options[document.creator.useravatar.selectedIndex].value+".gif");
                document.images.useravatars.src="$imagesurl/avatars/"+document.creator.useravatar.options[document.creator.useravatar.selectedIndex].value+".gif";
                }
            </script>
             
            <tr>
                <td bgcolor=$miscbackone valign=top><font face="$font" color=$fontcolormisc size=$dfontsize1><b>$ibtxt{'1833'}</b><br>$ibtxt{'1834'}</td>
                <td bgcolor=$miscbackone>
                    <select name="useravatar" size=6 onChange="showimage()">
                    $selecthtml
                    </select>
                    <img src="$imagesurl/avatars/$currentface.gif" name="useravatars" width="64" height="64" border=0 hspace=15>
                </td>
            </tr>
            ~;
            } # end avatar if
 

 
меняем на
 

Код:
 
            $avatarhtml = qq~
            <script language="javascript">
             function showimage() {
              document.images.useravatars.src="$imagesurl/avatars/"+document.creator.useravatar.options[document.creator.useravatar.selectedIndex].value+".gif";
              document.images.useravatars_jpg.src="$imagesurl/avatars/"+document.creator.useravatar.options[document.creator.useravatar.selectedIndex].value+".jpg";
             }
            </script>
             
            <tr>
                <td bgcolor=$miscbackone valign=top><font face="$font" color=$fontcolormisc size=$dfontsize1><b>$ibtxt{'1833'}</b><br>$ibtxt{'1834'}</td>
                <td bgcolor=$miscbackone>
                    <select name="useravatar" size=6 onChange="showimage()">
                    $selecthtml
                    </select>
                    <br>GIF image: &nbsp; &nbsp; JPEG image:<br>
                    <img src="$imagesurl/avatars/$currentface.gif" name="useravatars" width="64" height="64" border=0> &nbsp; &nbsp;  
                    <img src="$imagesurl/avatars/$currentface.gif" name="useravatars_jpg" width="64" height="64" border=0>
                </td>
            </tr>
            ~;
            } # end avatar if
 
 
 
Это для topic.cgi
 

Код:
 
        if (($avatars eq "on") && ($useravatar) && ($useravatar ne "noavatar")) {
            $useravatar = qq(<br><img src="$imagesurl/avatars/$useravatar.gif" border=0>);
            }
            else { undef $useravatar; }
 

 
поменять на  
 

Код:
 
        if (($avatars eq "on") && ($useravatar) && ($useravatar ne "noavatar")) {
            if (-e "$imagesdir/avatars/$useravatar.gif") {
             $useravatar = qq(<br><img src="$imagesurl/avatars/$useravatar.gif" border=0 title="$useravatar">);
            } elsif(-e "$imagesdir/avatars/$useravatar.jpg") {
             $useravatar = qq(<br><img src="$imagesurl/avatars/$useravatar.jpg" border=0 title="$useravatar">);
            } else { undef $useravatar; }
        } else { undef $useravatar; }
 

 
Предполагается отмена урезания размеров аватар до 32*32. Иначе во все выводы добавляем
width="32" height="32"
Не советую, т.к. нет особого смысла в этом ограничении.
Собственно все. Без подробностей.
 
Добавлено:
Чуть-чуть переделываем ikoncode:
 
ищем и меняем sub ikoncode {...} в файле ikon.lib
 

Код:
 
sub ikoncode {
 
    my $post = shift;    
 
###not java### by DimoN
 $post =~ s/(\[img\])(.*?)(script:)(.*?)(\[\/img\])/$2$3$4\[<font color=red>Недопустимое действие! :moderator:<\/font>\]/isg;  
###not java end###  
###not view-source &mailto###
 $post =~ s/(\[img\])(.*?)(view-source:)(.*?)(\[\/img\])/$2$3$4\[<font color=red>Недопустимое действие! :moderator:<\/font>\]/isg;  
 $post =~ s/(\[img\])(.*?)(mailto:)(.*?)(\[\/img\])/\[<font color=red>Недопустимое действие! :moderator:<\/font>]/isg;    
 
###not view-source end###  
    $post =~ s/\<p>/<br><br>/isg;
    $post =~ s|\[\[|\{\{|g;
    $post =~ s|\]\]|\}\}|g;
    $post =~ s|\n\[|\[|g;
    $post =~ s|\]\n|\]|g;
    $post =~ s|<br>| <br>|g;
    $post =~ s|\[hr\]\n|\<hr width=40\% align=left>|g;
    $post =~ s|\[hr\]|\<hr width=40\% align=left>|g;
     
    ##таблица
     $post =~ s/\[table\]\[tr\]/\[table\]/isg;      
     while ($post =~ s{\[table\]([\S\s].+?[\S\s])\[/table\]}  
        {my $Tmp = $1;  
        $Tmp =~ s/\<br>/ /g;  
        $Tmp =~ s/\[tr\]/ <\/td><\/tr><tr class=lgf><td>/g;  
            $Tmp =~ s/\[tab\]/ <\/td><td>/g;  
            $Tmp = qq|<table cellpadding=\"3\" cellspacing=\"0\" bgcolor=\"#FFFFFF\" width=\"75%\" border=\"1\" bordercolor=\"#EEEEEE\"><tr class=lgf><td>$Tmp<\/td><\/tr><\/table>|;  
         }exisog) {}  
## end таблица          
     
     
    $post =~ s/\[q\]\s*(.*?)\s*\[\/q\]/<table class=\"code\"><tr><td class=\"code_header\">Цитата:<hr class=\"code_line\" noshade><\/td><\/tr><tr><td class=\"code_text\">$1<\/td><\/tr><\/table>/isg;
    $post =~ s/\[q\s*=\s*([^\]]+)\]\s*(.*)\s*\[\/q\]/<table class=\"code\"><tr><td class=\"code_header\">Цитата:<br>&nbsp;<b>$1<\/b><hr class=\"code_line\" noshade><\/td><\/tr><tr><td class=\"code_text\">$2<\/td><\/tr><\/table>/isg;
 
    $post =~ s/\[quote\]\s*(.*)\s*\[\/quote\]/<table class=\"code\"><tr><td class=\"code_header\">Цитата:<hr class=\"code_line\" noshade><\/td><\/tr><tr><td class=\"code_text\">$1<\/td><\/tr><\/table>/isg;
    $post =~ s/\[quote\s*=\s*([^\]]+)\]\s*(.*)\s*\[\/quote\]/<table class=\"code\"><tr><td class=\"code_header\">Цитата:<br><b>$1<\/b><hr class=\"code_line\" noshade><\/td><\/tr><tr><td class=\"code_text\">$2<\/td><\/tr><\/table>/isg;
   
    $post =~ s/\[url\](\S+?)\[\/url\]/<a href=\"$1\"\ target=\"_blank\">$1<\/a>/isg;
    $post =~ s/\[url=http:\/\/(\S+?)\]/<a href=\"http:\/\/$1\"\ target=\"_blank\">/isg;
    $post =~ s/\[url=(\S+?)\]/<a href=\"http:\/\/$1\"\ target=\"_blank\">/isg;
    $post =~ s/\[\/url\]/<\/a>/isg;
 
    $post =~ s/(^|\s|\<br\>)(http:\/\/\S+)/$1<a href="$2" target=_blank>$2<\/a> /isg;  
    $post =~ s/(^|\s|\<br\>)(https:\/\/\S+)/$1<a href="$2" target=_blank>$2<\/a> /isg;  
    $post =~ s/(^|\s|\<br\>)(ftp:\/\/\S+)/$1<a href="$2" target=_blank>$2<\/a> /isg;  
    $post =~ s/(^|\s|\<br\>)(www\.\S+)/$1<a href="http:\/\/$2" target=_blank>$2<\/a> /isg;
 
 
# Добавляем новые коды [c] и [s]
 
    $post =~ s/\[c\](.*?)\[\/c\]/<center>$1<\/center>/isg;
    $post =~ s/\[s\](.*?)\[\/s\]/<span class=s>$1<\/span>/isg;
 
    $post =~ s/\[b\]/<b>/isg;
    $post =~ s/\[\/b\]/<\/b>/isg;
    $post =~ s/\[i\]/<i>/isg;
    $post =~ s/\[\/i\]/<\/i>/isg;
    $post =~ s/\[u\]/<u>/isg;
    $post =~ s/\[br\]/<br>/isg;
    $post =~ s/\[\/u\]/<\/u>/isg;
    $post =~ s/\[img\](.*)\[\/img\]/<img src=\"$1\">/isg;
     
#Опять фиксим яву by batva
$post =~ s/\[size=(\d+)\](.*)\[\/size\]/<font size=\"$1\">$2<\/font>/isg;    
$post =~ s/\[font=([\sA-Z\-,]+)\](.*)(\[\/font\])/<font face=\"$1\">$2<\/font>/isg;
$post =~ s/\[color=([a-z]+|[#\dA-F]+)\](.*)\[\/color\]/<font color=\"$1\">$2<\/font>/isg;  
#end фиксим яву  
     
    $post =~ s/\[\/color\]/<\/font>/isg;
    $post =~ s/\\http:\/\/(\S+)/<a href=\"http:\/\/$1\"\ target=\"_blank\">http:\/\/$1<\/a>/isg;
    $post =~ s/(\[list\])(.+?)(\[\/list\])/<UL>$2<\/UL>/isg;
    $post =~ s/(\[list=)(A|1)(\])(.+?)(\[\/list\])/<OL TYPE=$2>$4<\/OL>/isg;
    $post =~ s/(\[\*\])/<LI>/isg;
    $post =~ s/\[\s?code\s?\](.*)\[\s?\/code\s?\]/<table class=\"code\"><tr><td class=\"code_header\">Код:<hr class=\"code_line\" noshade><\/td><\/tr><tr><td class=\"code_text\"><pre>$1<\/pre><\/td><\/tr><\/table>/isg;      
    $post =~ s/\[\s?code\s?=([^\]]*)\](.*)\[\s?\/code\s?\]/<table class=\"code\"><tr><td class=\"code_header\">Код:<br>&nbsp; - $1<hr class=\"code_line\" noshade><\/td><\/tr><tr><td class=\"code_text\"><pre>$2<\/pre><\/td><\/tr><\/table>/isg;
 
#Выключаем автоподсветку мыла DimoN    
    $post =~ s/\[email=(\S+?)\]([^\[\]]*)\[\/email\]/<a href=\"mailto:$1\">$2<\/a>/isg;
    $post =~ s/(\[FLASH SIZE=1\])(.+?)(\[\/FLASH\])/<OBJECT WIDTH=80 HEIGHT=60><PARAM NAME=movie VALUE="$2"><PARAM NAME=quality VALUE=high><PARAM NAME=scale VALUE=exactfit><PARAM NAME=menu VALUE=false><PARAM NAME=bgcolor VALUE=$BGColor><EMBED src="$2" quality=high menu=false scale=exactfit WIDTH=80 HEIGHT=60 swLiveConnect=true TYPE="application\/x-shockwave-flash"><\/EMBED><\/OBJECT>/isg;
    $post =~ s/(\[FLASH SIZE=2\])(.+?)(\[\/FLASH\])/<OBJECT WIDTH=160 HEIGHT=120><PARAM NAME=movie VALUE="$2"><PARAM NAME=quality VALUE=high><PARAM NAME=scale VALUE=exactfit><PARAM NAME=menu VALUE=false><PARAM NAME=bgcolor VALUE=$BGColor><EMBED src="$2" quality=high menu=false scale=exactfit WIDTH=160 HEIGHT=120 swLiveConnect=true TYPE="application\/x-shockwave-flash"><\/EMBED><\/OBJECT>/isg;
    $post =~ s/(\[FLASH SIZE=3\])(.+?)(\[\/FLASH\])/<OBJECT WIDTH=320 HEIGHT=240><PARAM NAME=movie VALUE="$2"><PARAM NAME=quality VALUE=high><PARAM NAME=scale VALUE=exactfit><PARAM NAME=menu VALUE=false><PARAM NAME=bgcolor VALUE=$BGColor><EMBED src="$2" quality=high menu=false scale=exactfit WIDTH=320 HEIGHT=240 swLiveConnect=true TYPE="application\/x-shockwave-flash"><\/EMBED><\/OBJECT>/isg;
    $post =~ s/(\[FLASH=)(\S+?)(\,)(.+?)(\])(.+?)(\[\/FLASH\])/ <embed src="$6" menu=false scale=exactfit HEIGHT="$4" WIDTH="$2" quality="high"><\/embed> /isg;
    $post =~ s/(\[center\])(.+?)(\[\/center\])/<center>$2<\/center>/isg;
    $post =~ s/(\[sound\])(\S+?)(\.mid|\.midi|\.wav)(\[\/sound\])/<EMBED SRC="$2$3" AUTOSTART=FALSE LOOP=FALSE WIDTH=100><\/EMBED> /isg;
    $post =~ s|\{\{|\[|g;
    $post =~ s|\}\}|\]|g;
     
    return $post;    
 
    } # end routine
 

 
Правда для цитаты и кода придется добавить следующие элементы css:

Код:
 
.code {
    font: 12px verdana;
    border: 1px #000000 solid;
    padding: 0 0 0 0;
    margin: 0 0 0 0;
    width: 60%;
}
 
.code_header {
    font: 14px Comic Sans MS;
    color:#000000;
    background-color: #fffbf8;
    padding: 2 2 0 2;
}
 
.code_text {
    font: 12px verdana;
    color:#000000;
    background-color: #ffffff;
    padding: 7 7 7 7;
}
 
.code_line {
    height: 1px;
    color: #404040;
}
 

 
ИМХО так посимпатичнее...

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 18:12 20-05-2006 | Исправлено: CheRt, 00:25 21-05-2006
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Хак money-grabber v0.1 и другие


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru