BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 04 июл 2025, 21:22

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 21 окт 2008, 16:20 
Первый опыт - первая неудача:
1. В документации на странице http://bgbilling.ru/v4.5/doc/ch09s11s13.html сказано, что при добавлении шлюза появятся вкладки cisco,switch и привязки, однако у меня эти вкладки не появились, не отображаются так же команда которые будут выполнены на циске. Возможно это связано, что класс подменяется скриптом указанным в параметрах шлюза?
2. На той же странице документации приведен пример создания шлюза cisco, управляемого по telnet. Есть опция cfg.pswd - пароль на enabled, далее при создании шлюза можно указать еще и сам пароль к устройству, а где login? Опция login есть только в примере шлюза управляемого по ssh. Как быть с телнетом?
3. При добавлении шлюза по документации, он добавляется со статусом по умолчанию "Закрыт" любое действие по изменению статуса приводит к зависанию системы :shock: , и выйти можно только убив billing.client.
Вобщем прошу по возможности разъянить ситуацию по всем пунктам.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 окт 2008, 18:22 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
SPY писал(а):
Первый опыт - первая неудача:
1. В документации на странице http://bgbilling.ru/v4.5/doc/ch09s11s13.html сказано, что при добавлении шлюза появятся вкладки cisco,switch и привязки, однако у меня эти вкладки не появились, не отображаются так же команда которые будут выполнены на циске. Возможно это связано, что класс подменяется скриптом указанным в параметрах шлюза?

Конфигурацию типов шлюзов для cisco2 и коммутатора покажите . Команды их тоже покажите .. Покажите скриншот, на котором у вас не появились вкладки - ошибки есть в лога сервера и клиента ?

SPY писал(а):
2. На той же странице документации приведен пример создания шлюза cisco, управляемого по telnet. Есть опция cfg.pswd - пароль на enabled, далее при создании шлюза можно указать еще и сам пароль к устройству, а где login? Опция login есть только в примере шлюза управляемого по ssh. Как быть с телнетом?

В данном конретном шлюзе нет логина
Код этого шлюза есть тут :
http://wiki.bgbilling.ru/index.php/%D0% ... _BeanShell
можно поправить его на использование логина ..дайте лог общения с циской ..т.е приглашение, ввод вашего логина , пароля ответ на него, потом enable и т.п ..Просто это все зависит от настроек , кто-то возможно не использует логина

SPY писал(а):
3. При добавлении шлюза по документации, он добавляется со статусом по умолчанию "Закрыт" любое действие по изменению статуса приводит к зависанию системы :shock: , и выйти можно только убив billing.client.
Вобщем прошу по возможности разъянить ситуацию по всем пунктам.


По умолчанию в 4.5 шлюз добавляется со статусом удален


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 окт 2008, 23:59 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Andreiii1 писал(а):
Что по поводу Cisco на BeanShell в wiki ?


Я выложил Cisco на BeanShell, но не тестировал пока . Попробуйте , ошибки из лога прислылайте если что - поправлю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 11:10 
Цитата:
Конфигурацию типов шлюзов для cisco2 и коммутатора покажите . Команды их тоже покажите .. Покажите скриншот, на котором у вас не появились вкладки - ошибки есть в лога сервера и клиента ?


Итак скриншоты?
1. Создаем тип шлюза и шлюз
Изображение
Изображение
код скрипта 1 в 1 как на странице "Реализация стандартного шлюза Cisco2 на BeanShell" в wiki
Изображение
вкладки не появляются
Изображение

Из логов общения с циской только 1 строка в server.log

Код:
INFO   21.10.2008 14:01:40  Running script
INFO   21.10.2008 14:01:40  start of cisco........................................................
DEBUG  21.10.2008 14:01:40  1 gate: ip_циски:23 pswdLogin: пароль_на_вход pswdCfg: null


Цитата:
дайте лог общения с циской ..т.е приглашение, ввод вашего логина , пароля ответ на него, потом enable и т.п .

Возможно я не в том месте смотрю эти самые диалоги общения, куда они должны попадать если не server.log и с каким уровнем отладки info или debug?


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 12:48 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Так естественно не появляются . вы добавили только шлюз cisco2 на договор. Эти вкладки появляются у коммутатора Zyxel , т.е у потомка этого шлюза . А чтобы правила появились у cisco2 нужно:
-зайти в правила и добавить "пустое правило"(или назовите как хотите ) и оставить его пустым
-потом зайти в настройкц типа шлюза cisco и на вкалдке правила - добавить это правило
-потом при редактирвании шлюза в договоре у вас кроме пользовательского правила появится "пустое правило" , если его выбрать , то команды циски отобразятся

вот так


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 13:46 
Спасибо большое, дейтсвительно правило было необходимо.
Осталась одна, самая важная задача- заставить биллинг общаться с циской. При изменении статуса шлюза в server.log выводится:
Код:
INFO   22.10.2008 11:40:45  Running script
INFO   22.10.2008 11:40:45  start of cisco........................................................
DEBUG  22.10.2008 11:40:45  2 gate: ip_cisco:23 pswdLogin: telnet_password pswdCfg: null

В логах клиента ничего. Система намертво виснет, спасает только убитие процесса клиента из консоли без иксов :?

В консоли диалог telnet соединения:
Код:
Trying cisco_ip...
Connected to cisco_ip.
Escape character is '^]'.

User Access Verification

Username:

Дальше ввод пользователя и пароля.

Судя по всему выполнение скрипта тормозится при выполнении команды
Код:
TelnetSession session = new TelnetSession( host, port);


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 14:55 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
и увас cfg.pswd - пустой в конифгурации шлюза .Судя по вашему скриншоту вы зачем то все рамаетры ШЛЮЗА забил в ТИП шлюза, а надо наоборот

если не заработает , то дайте лог общения с циской ..т.е. зайдите на нее , авторизуйтесь и зайдите в режим конфигурации Тогда я скажу как поменять скрипт


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 15:47 
Не в сети

Зарегистрирован: 02 июн 2008, 16:53
Сообщения: 215
Карма: 0
stark писал(а):

Я выложил Cisco на BeanShell, но не тестировал пока . Попробуйте , ошибки из лога прислылайте если что - поправлю


Скрипт вижу, а во вкладку "Команды" ничего забивать не надо?

По скрипту:

Код:
session = new SSHSession(  host, port, login, pswd );


эти данные где указывать?

Код:
result.append( session.command( "ip access-list extended " + options.name ) );


У нас лист standard. И где указывать название его?

Сейчас у меня во вкладке Шлюзы забит один шлюз:
IP-адрес, порт, пароль, тип CiscoXXX, конфигурация его:

login=Xxxxx
#


Во вкладе Типы шлюзов забит тип CiscoXXX, конфигурация:

Код:
user_rule.editor.class=bitel.billing.module.services.ipn.editor.CiscoContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.CiscoGateWorker
use.script=1


Скрипт из вкладки "Типы шлюзов" вытащит логин и пароль из вкладки "Шлюзы"?

И по договорам. Нужно ли что-либо дополнительно указывать в договорах, если шлюз один? Он кстати не добавляется в договор. Но статус меняется по шедулеру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 17:38 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
2 Andreiii1 . Скриптовая реализация стандартного шлюза Cisco подразумеевает , что вы настраиваете Cisco точь в точь как описано в документации , а потом подменяете его логику скриптом, выложенным в wiki. Поведение не должно изменится . если у вас лист standart , а не extened, то меняете этот код в скрипте.Именно поэтому это и была сделана поодержка скриптовых шлюзов , потому как нельзя все предусмотреть в шлюзе и вынести все обсолютно в конфиг


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 18:08 
Не в сети

Зарегистрирован: 02 июн 2008, 16:53
Сообщения: 215
Карма: 0
я понял, самому придется скрипт дорабатывать?

Вот на это не получил ответа:

Код:
session = new SSHSession(  host, port, login, pswd );


эти данные где указывать?

Сейчас у меня во вкладке Шлюзы забит один шлюз:
IP-адрес, порт, пароль, тип CiscoXXX, конфигурация его:

login=Xxxxx
#


Во вкладе Типы шлюзов забит тип CiscoXXX, конфигурация:

Код:
user_rule.editor.class=bitel.billing.module.services.ipn.editor.CiscoContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.CiscoGateWorker
use.script=1


Скрипт из вкладки "Типы шлюзов" вытащит логин и пароль из вкладки "Шлюзы"?

И по договорам. Нужно ли что-либо дополнительно указывать в договорах, если шлюз один? Он кстати не добавляется в договор. Но статус меняется по шедулеру. Так и должно быть?

_________________
~~


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 18:15 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Andreiii1 писал(а):
я понял, самому придется скрипт дорабатывать?

Вот на это не получил ответа:

Код:
session = new SSHSession(  host, port, login, pswd );


эти данные где указывать?

эти данные беруться из конфига шлюза или из самого шлюза.Там же выше есть код :
Код:
 host = gate.getHost();
    port = gate.getPort();
    gid = gate.getId();
 
    gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );       
 
    login = gateSetup.getStringValue( "login", "root" );
    pswd = gate.getKeyword();
 
    if( log.isDebugEnabled() )
    {
        log.debug( gid + " gate: " + host + ":" + port + " login: " + login + " pswd: " + pswd );
    }




Andreiii1 писал(а):

Скрипт из вкладки "Типы шлюзов" вытащит логин и пароль из вкладки "Шлюзы"?

да

Andreiii1 писал(а):
И по договорам. Нужно ли что-либо дополнительно указывать в договорах, если шлюз один? Он кстати не добавляется в договор. Но статус меняется по шедулеру. Так и должно быть?


не понял вопроса про один .. не понял что значит не добаляется в договор


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2008, 23:58 
Итак, после нескольких попыток самостоятельно подправить скрипт, я сдаюсь. Пока тестил, я немного передалал начало диалога с циской:
Код:
   TelnetSession session = new TelnetSession( host, port);

   //   session.setLoginPromptSequence( ":" );                  
      session.connect();
      //session.setLoginPromptSequence( ">" );
      session.setLoginPromptSequence( ":" );

       result.append( session.doCommand( "логин" ) );
log.info( "5");
   //   session.setLoginPromptSequence( ":" ); <-пробовал раскоментировать но результата не дало
      
      result.append( session.doCommand( "пароль" ) );
   //   result.append( session.doCommand( pswdLogin ) );
log.info( "6");

В логах вижу только "5"

Сам диалог с циской с консоли:
Код:
User Access Verification

Username:
Password:
Cisco****-VT-1>
en
Password:
Cisco****-VT-1#

Заранее спасибо


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2008, 15:48 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
SPY писал(а):
User Access Verification

Username:
Password:
Cisco****-VT-1>
en
Password:
Cisco****-VT-1#
[/code]
Заранее спасибо


У вас в циске требуется ввод логина , а в том варианте который реализован, его нет .. Вам нужно либо убрать логин на циске , либо изменить код. Чтобы изменить код, добавте еще одно поле login в конфигурацию шлюза , прочитайте его так :
Код:
login = gateSetup.getStringValue( "login");


потом сам код шлюза поменяйте так(я писал коментарии чтобы было понятно) :
Код:
...      
      TelnetSession session = new TelnetSession( host, port);
      //читаем поток до появления "UserName:" к конце
      session.setLoginPromptSequence( ":" );                  
      session.connect();
      //Вводим login и читаем ответ  до появления "Password:" в конце
      result.append( session.doCommand( login ) );

      //Вводим парроль и читаем ответ  до появления "Cisco****-VT-1>" в конце
      session.setLoginPromptSequence( ">" );                  
       result.append( session.doCommand( pswdLogin ) );
 
      //делаем размер терминала , читаем ответ до появления ">" в конце          
      result.append( session.doCommand( "terminal length 0" ) );
      //делаем размер терминала , читаем ответ до появления ">" в конце          
      result.append( session.doCommand( "terminal width 0" ) );
 
 
 
      //Вводим enable и читаем ответ  до появления "Password:" в конце
      session.setLoginPromptSequence( ":" );
      result.append( session.doCommand( "enable" ) );
 
       //Вводим пароль от enable и читаем ответ  до появления "Cisco****-VT-1#" в конце
      session.setLoginPromptSequence( "#" );
      result.append( session.doCommand( pswdCfg ) );
 
       //Далее везде работает с "#" в конце
      result.append( session.doCommand( "configure terminal" ) );
 
      log.debug( "execute commands" );
      doCommands( session, result);
 
      ...


Принцип такой, что мы постоянно привязаны к завершающему символу . он постоянно меняется, то ":", то ">", то "#" .. Если он утсановлен, и не меняется , то после каждой очердной команды шлюз ждет появления этого смовола . Если после ввода команды появляется особый символ , напрмер , до этого шли только ":" , а после этой команды - ">" , то перед выполнением команды надо поменять символ на ">".

Если есть возможность настроить завершающий символ в циске, хотя бы чтобы были ":" перед выводом пароля, и "#" во всех отсальных случаях , то было бы проще писать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2008, 16:01 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
2 SPY возможно потом пределаем шлюз так, чтобы он требовал обязательно ввода логина в конфигурации, выложим его в wiki и поменяем основную реализацию .. Но пока так


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2008, 17:16 
Уже и на этом большое спасибо, потому что все заработало! Теперь задача привязать статус шлюза к тарифному плану. Хочу чтобы пользователю выделялся лимит в мегабайтах, по превышении которого шлюз закрывался (на сам деле будет запускаться шейпер), а в начале месяца открывался..... вобщем буду думать!
Огромное спасибо за помощь и поддержку!


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2008, 00:04 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
SPY писал(а):
Если есть возможность настроить завершающий символ в циске, хотя бы чтобы были ":" перед выводом пароля, и "#" во всех отсальных случаях , то было бы проще писать

возможность есть!
нада цыске сказать следующее:
Прописать юзера имющего высокий допуск
username bg privilege 15 password
Разрешить терминалу сразу быть энабле:
line vty 0 4
privilege level 15
и всё
общение с цыской выглядит после этого так:
login as: bg
bg@core's password:
c6509-CORE# conf t
всё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2008, 00:26 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
Товарищи помогите пожалуйста победить связку бг-биллинг и 6509 цыску
имеем следующее:
---------------------------------------------

Тип шлюза:
Код:
Cisco CORE router SHEL


Конфигурация:
Код:
user_rule.editor.class=bitel.billing.module.services.ipn.editor.ManadContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.ManadGateWorker
use.script=1


Комманды:
Код:
 
[DEFAULT]
[REMOVE]
    ip access-list extended 100
    remark REMOVE
    exit
[/REMOVE]
 [OPEN]
    ip access-list extended 100
    remark OPEN
    exit
[/OPEN]
 [CLOSE]
    ip access-list extended 100
    remark CLOSE
    exit
[/CLOSE]
[/DEFAULT]

Типы правил:
Код:
 тестовое правило


Скрипт:
Код:
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import bitel.billing.common.module.ipn.IPNContractStatus;
import bitel.billing.server.ipn.GateWorker;
import bitel.billing.server.ipn.UserStatus;
import bitel.billing.server.ipn.bean.ManadUtils;
import bitel.billing.server.ipn.bean.VlanManager;
import bitel.billing.server.util.DefaultServerSetup;
import bitel.billing.server.util.Utils;
import bitel.billing.server.util.telnet.OperationTimedoutException;
import bitel.billing.server.util.telnet.TelnetSession;
 
protected void doSync()
{
   try
   {
      log.info( "start of cisco........................................................");
      String host = gate.getHost();
      int port = gate.getPort();
 
 
      DefaultServerSetup gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );       
 
      String pswdLogin = gate.getKeyword();
      String pswdCfg = gateSetup.getStringValue( "cfg.pswd");
      String login = gateSetup.getStringValue( "login");
 
 
      StringBuffer result = new StringBuffer();
 
 
      if( log.isDebugEnabled() )
      {
          log.debug( gate.getId() + " gate: " + host + ":" + port  + " pswdLogin: " + pswdLogin + " pswdCfg: " +        pswdCfg );
      }
 
      //TODO - завершающте символы вытащить в конфиг
 
       TelnetSession session = new TelnetSession( host, port);
      //читаем поток до появления "UserName:" к конце
      session.setLoginPromptSequence( ":" );                 
      session.connect();
      //Вводим login и читаем ответ  до появления "Password:" в конце
      result.append( session.doCommand( login ) );

      //Вводим парроль и читаем ответ  до появления "Cisco****-VT-1>" в конце
      //session.setLoginPromptSequence( ">" );                 
      //result.append( session.doCommand( pswdLogin ) );
 
      //делаем размер терминала , читаем ответ до появления ">" в конце         
      //result.append( session.doCommand( "terminal length 0" ) );
      //делаем размер терминала , читаем ответ до появления ">" в конце         
      //result.append( session.doCommand( "terminal width 0" ) );
 
      //Вводим enable и читаем ответ  до появления "Password:" в конце
      //session.setLoginPromptSequence( ":" );
      //result.append( session.doCommand( "enable" ) );
 
       //Вводим пароль от enable и читаем ответ  до появления "Cisco****-VT-1#" в конце

      session.setLoginPromptSequence( "#" );
      result.append( session.doCommand( pswdCfg ) );
 
       //Далее везде работает с "#" в конце
      result.append( session.doCommand( "configure terminal" ) );
 
      log.debug( "execute commands" );
      doCommands( session, result);
      //TODO commands here
 
      result.append( session.doCommand( "exit" ) );
 
 
 
      log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
      log.info( result );
      log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");      
 
 
      log.debug( "ok" );
   } catch (Exception e)
   {
 
      throw new RuntimeException ( e );
   }
 
   log.info( "end of cisco........................................................");
}
 
protected void add()
{
 
}
 
 
private void doCommands( TelnetSession session, StringBuffer result) throws IOException, OperationTimedoutException
{      
   for( UserStatus status : statusList )
   {
      VlanManager manager = new VlanManager(status.mid, con);
      gateId  = gate.getId();
      log.info("gateId=" + gateId);
      vid = manager.getVlan( gateId, status.contractId );
      log.info("vid=" + vid);   
 
 
      int cid = status.contractId;
 
 
      //TODO - подумать что сделать справилами на добавление
 
      rules = null;
      if (status.status == IPNContractStatus.STATUS_OPEN)
      {
 
         rules = getOpenRules( status, vid );
 
      }          
      else if (status.status == IPNContractStatus.STATUS_REMOVED)
      {
         rules = getRemoveRules( status, vid );   
      }
      //if closed and etc
      else
      {
         rules = getCloseRules( status, vid );
 
      }
 
      if (vid > 0)
      {
         for ( String rule : rules )
         {               
            result.append(  session.doCommand( rule ) );            
         }
      }
 
   }      
 
}
 
 
 
private List getOpenRules( UserStatus status, int vid )
{
 
   return getRules( status, "\\[OPEN\\]((.|\n)*)\\[/OPEN\\]", vid );
}
 
private List  getCloseRules( UserStatus status, int vid )
{
 
 
   return getRules( status, "\\[CLOSE\\]((.|\n)*)\\[/CLOSE\\]", vid );
}
 
private List  getRemoveRules( UserStatus status, int vid )
{
 
 
   return getRules( status, "\\[REMOVE\\]((.|\n)*)\\[/REMOVE\\]", vid  );
}
 
 
 
private List  getRules(  UserStatus status, String template, int vid )
{
   // пользовательское правило, без типа - то все оставляем как есть
   rule = status.rule.getRuleText();
   log.info("rule=" + rule);
 
   //типизированное правило
   if( status.ruleType != null )
 
   {   
      log.info("222222");
      ruleText = ManadUtils.getRule( status.gateType, status.ruleType );
      log.info("ruleText=" + ruleText);
      Map replacements =  new HashMap ();
      replacements.put( "\\{VID\\}", String.valueOf( vid ) );
      rule = ManadUtils.generateRule( ruleText, status.rule.getRuleText(), replacements, status.ruleType );
   }
 
   log.info("1111");
   log.info("rule=" + rule);
 
 
 
   Pattern pattern = Pattern.compile( template );
   Matcher m = pattern.matcher( rule );
   if (m.find())
   {
      rule = m.group( 1 );
   }      
 
   rule.replaceAll( "\r", "" );
 
 
   parts  = rule.split( "\n" );
 
   List result = new ArrayList();
   for ( String part : parts )
   {
      if ( !Utils.isEmptyString( part ))
      {
         result.add( part );
      }
   }
 
 
   return result;
}

-------------------------------------------------
Шлюзы:
IP: 192.168.0.1
Порт: 23
Ключевое слово: test
Тип шлюза:Cisco CORE router SHEL
Конфигурация:
Код:
login=test
timeout=20
cfg.pswd=12345
mid=5

В договоре добавляю данный шлюз, меняю статус на открыт, статус меняется, но на самой цыске ничего не происходит.
Иду в лог, и вижу:
Код:
INFO   24.10.2008 00:23:18  Running script
INFO   24.10.2008 00:23:18  start of cisco........................................................
INFO   24.10.2008 00:23:18  gateId=5
INFO   24.10.2008 00:23:18  vid=-1
INFO   24.10.2008 00:23:18  rule=1439302052,1439302053,1439302054,1439302055
INFO   24.10.2008 00:23:18  222222
INFO   24.10.2008 00:23:18  ruleText=

[REMOVE]
    ip access-list extended 100
    remark REMOVE
    exit
[/REMOVE]

[OPEN]
    ip access-list extended 100
    remark OPEN
    exit
[/OPEN]

[CLOSE]
    ip access-list extended 100
    remark CLOSE
    exit
[/CLOSE]

INFO   24.10.2008 00:23:18  1111
INFO   24.10.2008 00:23:18  rule=[REMOVE]
    ip access-list extended 100
    remark REMOVE
    exit
[/REMOVE]
[OPEN]
    ip access-list extended 100
    remark OPEN
    exit
[/OPEN]
[CLOSE]
    ip access-list extended 100
    remark CLOSE
    exit
[/CLOSE]
INFO   24.10.2008 00:23:18  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
INFO   24.10.2008 00:23:18  test
Password:

c6509-CORE#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
c6509-CORE(config)#exit
c6509-CORE#
INFO   24.10.2008 00:23:18  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
INFO   24.10.2008 00:23:18  end of cisco........................................................
INFO   24.10.2008 00:23:18  Process time => 638

непонятно по чему он выполняет exit не зависимо от того что стоит в RULE....
Если победим готов написать все материалы в викки...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2008, 15:15 
Не в сети

Зарегистрирован: 02 июн 2008, 16:53
Сообщения: 215
Карма: 0
Пытаюсь разобраться со скриптом из wiki для Cisco.
Заменил extended на standard.
Не пойму, где вбивать options.name (имя нужного acl)

и почему местами в скрипте упоминается Manad, когда настраиваем Cisco?

Помогите. Полгода ждали версию 4.5, теперь еще сколько разбираться?

_________________
~~


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 окт 2008, 18:16 
[quote="max"][/quote]
result.append( session.doCommand( "exit" ) ); - стоит в bean скрипте, поэтому видимо и выполняется.
Вы на циске что ожидаете увидеть? У вас какие-то абстрактные дейтсвия выполняются, попытайтесь привязать действия скрипта к интерфейсу. Смотрите мои примеры. И попробуйте вместо remark команду description.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 окт 2008, 11:56 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
SPY писал(а):
max писал(а):

result.append( session.doCommand( "exit" ) ); - стоит в bean скрипте, поэтому видимо и выполняется.
Вы на циске что ожидаете увидеть? У вас какие-то абстрактные дейтсвия выполняются, попытайтесь привязать действия скрипта к интерфейсу. Смотрите мои примеры. И попробуйте вместо remark команду description.

мля то что ексит выполняется я и сам вижу, у меня вопрос такой: что нужно написать туда, что бы он брал параметры из правил?
ведь в логе он их пишет, но почему то выполнить не хочет

ремарк - это правильно, дескрипшен - это тока на интерфейсах


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 окт 2008, 12:45 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
SPY писал(а):
max писал(а):

result.append( session.doCommand( "exit" ) ); - стоит в bean скрипте, поэтому видимо и выполняется.
Вы на циске что ожидаете увидеть? У вас какие-то абстрактные дейтсвия выполняются, попытайтесь привязать действия скрипта к интерфейсу. Смотрите мои примеры. И попробуйте вместо remark команду description.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2008, 13:08 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
max писал(а):
Товарищи помогите пожалуйста победить связку бг-биллинг и 6509 цыску
имеем следующее:

непонятно по чему он выполняет exit не зависимо от того что стоит в RULE....
Если победим готов написать все материалы в викки...


Вы взяли код cisco2, он привязан к vlan, а vlan вы ему не выдали ( к он вам и не нужен) ..Поэтому поменяете код ..У вас правала не срабатываеют из-за вот этой проверки :
Код:
 if (vid > 0)
      {
         for ( String rule : rules )
         {               
            result.append(  session.doCommand( rule ) );           
         }
      }


уберите проверку if (vid > 0) и все .. вообще можете убрать вообще все обращения к vlan -они вам не нужны


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2008, 13:18 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Andreiii1 писал(а):
Пытаюсь разобраться со скриптом из wiki для Cisco.
Заменил extended на standard.
Не пойму, где вбивать options.name (имя нужного acl)

вы про это http://bgbilling.ru/forum/posting.php?mode=quote&p=9087:
Код:
acl.<id>.name=<имя ACL записи>
acl.<id>.from.pos=<с какой позиции биллинг будет вставлять правила>
acl.<id>.to.pos=<до какой позиции биллинг будет вставлять правила>
acl.<id>.on.contract=<количество правил на договор>

Andreiii1 писал(а):
и почему местами в скрипте упоминается Manad, когда настраиваем Cisco?

Где конретно ? может быть где-то ошибки в документации ..
Andreiii1 писал(а):
Помогите. Полгода ждали версию 4.5, теперь еще сколько разбираться?

Выкладываете логи, настройки , скриншоты, описывайте свои проблемы .. Напрмер вот max- все выложил , стало потнятно ..я не телепат, чтобы вам помочь без четкого описания


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2008, 14:55 
Не в сети

Зарегистрирован: 02 июн 2008, 16:53
Сообщения: 215
Карма: 0
stark писал(а):


что про это? вы ссылку бы проверили...

stark писал(а):
Andreiii1 писал(а):
и почему местами в скрипте упоминается Manad, когда настраиваем Cisco?

Где конретно ? может быть где-то ошибки в документации ..


дак елки-палки, ваша же документация, посмотрите

почему я должен тут экспериментировать с рабочей системой на свой страх и риск, а затем ждать ответа несколько дней, если что-то не работает. Например обновился с 4.4 до 4.5 - перестал работать приход/расход. Я уж не говорю про то, КАК вы пишите документацию, с каким количеством ошибок. Ту же самую инструкцию по обновлению с 4.4 до 4.5...

Цитата:
Выкладываете логи, настройки , скриншоты, описывайте свои проблемы .. Напрмер вот max- все выложил , стало потнятно ..я не телепат, чтобы вам помочь без четкого описания


я тоже не телепат, чтобы разобраться в ВАШЕЙ системе самостоятельно. Есть четкое задание, я его сформулировал. Скрипт вы дали какой-то левый. Дайте нормальный, или укажите стоимость его написания под наше оборудование.

Это элементарные вещи и мне приходится вам их объяснять в момент оплаты лицензии. Ну это же не дело!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2008, 15:50 
Не в сети

Зарегистрирован: 02 июн 2008, 16:53
Сообщения: 215
Карма: 0
Еще раз: порядок такой (ssh):

login as: XXXXX
.... password: XXXXX

....# config t
...(config)# ip access-list standard XXXXX
...(config-std-nacl)# permit X.X.X.X (открытие шлюза)
...(config-std-nacl)# no permit X.X.X.X (блокирование/закрытие)
...(config-std-nacl)# exit
...(config)# exit
...#


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2008, 17:36 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Andreiii1 писал(а):
stark писал(а):


что про это? вы ссылку бы проверили...



прошу прощения.Ссылку эту кидал :
http://bgbilling.ru/v4.5/doc/ch09s11s09.html

Andreiii1 писал(а):
и почему местами в скрипте упоминается Manad, когда настраиваем Cisco?

дак елки-палки, ваша же документация, посмотрите

это так сложно указать ссылку на доку и сказать что там неправильно? у нас для этого отдельный раздел форума есть..Ну не хотите , ладно - пусть будет ошибка. может там ее и нет на самом деле

Andreiii1 писал(а):
почему я должен тут экспериментировать с рабочей системой на свой страх и риск, а затем ждать ответа несколько дней, если что-то не работает. Например обновился с 4.4 до 4.5 - перестал работать приход/расход. Я уж не говорю про то, КАК вы пишите документацию, с каким количеством ошибок. Ту же самую инструкцию по обновлению с 4.4 до 4.5...

какие проблемы ? пишите на почту, договоримся о разработке скрипта для вас..вы нам дадите доступ к вашей циске и вы получите скрипт, какой хотите. А тут я пишу для тех , для тех кто хочет эксперементировать

Цитата:
Andreiii1 писал(а):
stark писал(а):
Выкладываете логи, настройки , скриншоты, описывайте свои проблемы .. Напрмер вот max- все выложил , стало потнятно ..я не телепат, чтобы вам помочь без четкого описания


я тоже не телепат, чтобы разобраться в ВАШЕЙ системе самостоятельно. Есть четкое задание, я его сформулировал. Скрипт вы дали какой-то левый. Дайте нормальный, или укажите стоимость его написания под наше оборудование.

Это элементарные вещи и мне приходится вам их объяснять в момент оплаты лицензии. Ну это же не дело!


Прочитайте правила форума. Если вам нужен скипт никто вас не заставляет писать сюда . Можете его заказать .Это ЭЛЕМЕНТРАНЫЕ вещи .Это вы просто не поняли что этот форум по своей сути неформален . хотите доработку и готовы заплатить - пишите на почту . Если хотите я не буду вообще скриптов в вики выкладывать, не "левых" , ни "правых"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 окт 2008, 22:39 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
stark писал(а):
max писал(а):
Товарищи помогите пожалуйста победить связку бг-биллинг и 6509 цыску
имеем следующее:

непонятно по чему он выполняет exit не зависимо от того что стоит в RULE....
Если победим готов написать все материалы в викки...


Вы взяли код cisco2, он привязан к vlan, а vlan вы ему не выдали ( к он вам и не нужен) ..Поэтому поменяете код ..У вас правала не срабатываеют из-за вот этой проверки :
Код:
 if (vid > 0)
      {
         for ( String rule : rules )
         {               
            result.append(  session.doCommand( rule ) );           
         }
      }


уберите проверку if (vid > 0) и все .. вообще можете убрать вообще все обращения к vlan -они вам не нужны

да, действительно помогло, большое спасибо! Я просто не силён в яво программировании....

но возникла новая напасть! а как в скрипт передать сеть или ip адрес и маску клиента да ещё и в вайлкарде?
например клиент: 192.168.0.0/30
нужный формат ip=192.168.0.0 mask=0.0.0.3

Дело в том что моей цыске в экстенденд листах при передаче сети (не хоста) в привило листа подавай маску в вайлкарде!
Код:
c6509-CORE#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
c6509-CORE(config)#ip access
c6509-CORE(config)#ip access-list ex 100
c6509-CORE(config-ext-nacl)#permit ip any 192.168.0.1 ?
  A.B.C.D  Destination wildcard bits
c6509-CORE(config-ext-nacl)#permit ip any 192.168.0.1 0.0.0.3


Поясню как это работает у меня сейчас:
Есть ядро биллинга.
Если клиент подключается какм то макаром, то биллинг выполянет скрипт ONConnect и передаёт ему следующие параметры:
login - логин
ip - ип адрес вида ххх.ххх.ххх.ххх
netmask - маска вида ххх.ххх.ххх.ххх
cash - баланс
id - уникальный айди
napravlenie - тарифная зона
nas - айпи наса!

вот для примера сам скрипт ONConnect:

Код:
#!/usr/bin/perl
#edit 03.07.2008 11:12 Max

$login=@ARGV[0];
$ip=@ARGV[1];
$netmask=@ARGV[2];
$cash=@ARGV[3];
$id=@ARGV[4];
$napravlenie=@ARGV[5];
$nas=@ARGV[6];

#Превращаем маску в вайлкард
#Wailcard netmask
if($netmask eq '255.255.255.255'){$wnetmask='0.0.0.0';}
elsif($netmask eq '255.255.255.252'){$wnetmask='0.0.0.3';}
elsif($netmask eq '255.255.255.248'){$wnetmask='0.0.0.7';}
elsif($netmask eq '255.255.255.240'){$wnetmask='0.0.0.15';}
elsif($netmask eq '255.255.255.224'){$wnetmask='0.0.0.31';}
elsif($netmask eq '255.255.255.192'){$wnetmask='0.0.0.63';}
elsif($netmask eq '255.255.255.128'){$wnetmask='0.0.0.127';}
elsif($netmask eq '255.255.255.0'){$wnetmask='0.0.0.255';}
elsif($netmask eq '255.255.254.0'){$wnetmask='0.0.1.255';}
elsif($netmask eq '255.255.252.0'){$wnetmask='0.0.3.255';}
elsif($netmask eq '255.255.248.0'){$wnetmask='0.0.7.255';}
elsif($netmask eq '255.255.240.0'){$wnetmask='0.0.15.255';}
elsif($netmask eq '255.255.224.0'){$wnetmask='0.0.31.255';}
else{&error;}

if($nas eq '127.0.0.1'){&unix_127;}
if($nas eq '10.11.0.2'){&cisco_2600;}
if($nas eq '10.11.0.6'){&cisco_2600;}
if($nas eq '10.11.0.10'){&cisco_2600;}
if($nas eq '10.11.0.14'){&cisco_2600;}
if($nas eq '10.11.0.1'){&cisco;}
if($nas eq '10.11.0.3'){&unix;}
if($nas eq '10.11.0.4'){&cisco;}

&error;

#НЕ ОПРЕДЕЛЁН NAS#########################################################################
sub error{
    open(ERR,">>/usr/billing/err.connect.log");
    print ERR "ERROR: ON_CONNECT login=$login, ip=$ip, netmask=$netmask|$wnetmask, cash=$cash, id=$id, nas=$nas\n";
    close ERR;
    exit 1;
}
##########################################################################################

sub cisco{
    use Net::Telnet ();
    $t = new Net::Telnet (Timeout => 30, Prompt => '/#/');
    $t->open("$nas") || die("False\n");
    $t->login("xxxx", "xxxx");
    $t->cmd(String => 'conf t', Cmd_remove_mode => 0);

    $t->cmd("ip access-list extended 100");
    $t->cmd("deny ip $ip $wnetmask any");
    $t->cmd("no permit ip any any");
    $t->cmd("permit ip any any");
    $t->cmd("$cmd");
    $t->cmd("exit");

exit 0;
}
sub cisco_2600{
    use Net::Telnet ();
    $t = new Net::Telnet (Timeout => 30, Prompt => '/#/');
    $t->open("$nas") || die("False\n");
    $t->login("xxxx", "xxxx");
    $t->cmd(String => 'conf t', Cmd_remove_mode => 0);

    $t->cmd("ip access-list extended 100");
    $t->cmd("permit ip $ip $wnetmask any");
    $t->cmd("no deny ip any any");
    $t->cmd("deny ip any any");
    $t->cmd("$cmd");
    $t->cmd("exit");

exit 0;
}
sub unix{
    $ipfw="/sbin/ipfw -q";
    system "ssh $nas -p 5896 '$ipfw add `expr $id + 100` skipto 25555 ip from $ip to any'";
    system "ssh $nas -p 5896 '$ipfw add `expr $id + 101` skipto 25555 ip from any to $ip'";
    #system "$ipfw add `expr $ID '*' 2 + 30000` pipe $PIPE ip from any to $IP";
exit 0;
}

sub unix_127{
    $ipfw="/sbin/ipfw -q";
    system "$ipfw add `expr $id '*' 10 + 100` skipto 25555 ip from $ip to any";
    system "$ipfw add `expr $id '*' 10 + 101` skipto 25555 ip from any to $ip";
    #system "$ipfw add `expr $ID '*' 2 + 30000` pipe $PIPE ip from any to $IP";
exit 0;
}

sub unix_sp{
    $ipfw="/sbin/ipfw -q";
    system "ssh $nas -p 5896 '$ipfw add `expr $id + 100` skipto 25555 ip from $ip to any'";
    system "ssh $nas -p 5896 '$ipfw add `expr $id + 101` skipto 25555 ip from any to $ip'";
    #system "$ipfw add `expr $ID '*' 2 + 30000` pipe $PIPE ip from any to $IP";
exit 0;
}


И заметьте у меня в скрипте поддержаны много видов насов!

При отключении пользователя выполняется скрипт ONDisconnect в котором описана обратная логика, при этом биллингу монописуарно что тама написано в этих скриптах.... а скрипты могут быть написаны хоть на шеле.

Исходя из вышеописанного у меня два основных вопроса вопроса и подвопрос:
1. как енту логику моей цыски:
ip access-list extended 100
deny ip $ip $wnetmask any
no permit ip any any
permit ip any any
exit

реализовать в этом скрипте на яве???

2. нельзя ли что бы сервер при переходе шлюза из одного состояния (например открыт) в другое состояние (например закрыт) выполнял не долбанный скрипт на яве, а дёргал скрипт на на жёстком диске и передавал ему нужные нам параметры???????????
При этом скрипт может быть написан на том на чём умеет писать админ провайдера!!!!

А вы избавитесь от всяких там логик и классов в клиенте!

2.1 Если реализовать схему в пункте 2 незя, или сильно много времени займёт, то как написать данное действие в скрипте шлюза, что бы он вызывал нужные мне скрипты на диске сервера и передавал им параметры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 окт 2008, 14:28 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
max писал(а):
2. нельзя ли что бы сервер при переходе шлюза из одного состояния (например открыт) в другое состояние (например закрыт) выполнял не долбанный скрипт на яве, а дёргал скрипт на на жёстком диске и передавал ему нужные нам параметры???????????
При этом скрипт может быть написан на том на чём умеет писать админ провайдера!!!!

А вы избавитесь от всяких там логик и классов в клиенте!

2.1 Если реализовать схему в пункте 2 незя, или сильно много времени займёт, то как написать данное действие в скрипте шлюза, что бы он вызывал нужные мне скрипты на диске сервера и передавал им параметры?


можно вот пример кода на яве , который вызывает команду ps и распечатывает процессы в системе . Переделать его под BeanShell несложно :
Код:
import java.io.BufferedReader;
import java.io.InputStreamReader;


public class ExecTest
{

   /**
    * @param args
    */
   public static void main( String[] args )
   {
      try
      {
         //
         String arguments [] = { "ps", "-A", "-F"  };

         //выполняем команду
         Process process = Runtime.getRuntime().exec( arguments );
         
         
         BufferedReader is = new BufferedReader(new InputStreamReader(process.getInputStream()));
           BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream()));
           String line = null;
           //читаем резулитруйщи поток (это по желанию) .. Для команд типа ping mail.ru мы будем читать его вечно
           while ((line = is.readLine( )) != null)
           {
               System.out.println( line );
           }
           //читаем поток ошибок/ опять же по желанию
           while ((line = err.readLine( )) != null)
           {
              System.out.println( line );
           }
          
          
          
          
           //ждем окончания работы процесса ..Это не обязательно
           process.waitFor();
          
          
          
           //печатаем результат выполянения. можно получить толко если вызывали process.waitFor() 
         System.out.println( "exitCode=" + process.exitValue() );     
      }
      
      catch ( Exception ex)
      {
         ex.printStackTrace();
      }
   }
   

}



можете вызывать внешний скрипт если хотите , а его уже писать на "долбанном"(как вы сами выразились) perl, или на "долбанном" python или на чем хотите .. Мы можем конечно реализовать еще один шлюз для вызова внешних скриптов, который будет брать путь к скрипту из конфигурации, вызывать его и передавать ему эти параметры. Но опять же этого будет не всем достаточно, т.к наш биллинг предоставляет некоторое программное API , т.е обращение кобъктам , базе и т.п . Передать это все в универсальный скрипт мы не можем .Дальнейшим развитием может быть поддержка API для petl, python и т.п . только это уже будет лишним


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 окт 2008, 14:42 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
max писал(а):

но возникла новая напасть! а как в скрипт передать сеть или ip адрес и маску клиента да ещё и в вайлкарде?


ип можете передавать сейчас ..{A}. Насчет маски ..пока у нас не реализована передача диапазона адресов в виде маски, пока только отдельными ip. Мы записали это в TODO, постараемся сделать в 4.6.
А вы сейчас можете в скриптовом шлюзе если хотите считать все диапазоны ип адресов клиента, действуишие в текущий момент(могу дать код ка это делать) и устанвленных данному шлюзу и передавать его своему внешнем скрипту в виду масок. Т.е пока возможно все что вы просите .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 28 окт 2008, 18:19 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
stark писал(а):
max писал(а):

но возникла новая напасть! а как в скрипт передать сеть или ip адрес и маску клиента да ещё и в вайлкарде?


ип можете передавать сейчас ..{A}. Насчет маски ..пока у нас не реализована передача диапазона адресов в виде маски, пока только отдельными ip. Мы записали это в TODO, постараемся сделать в 4.6.
А вы сейчас можете в скриптовом шлюзе если хотите считать все диапазоны ип адресов клиента, действуишие в текущий момент(могу дать код ка это делать) и устанвленных данному шлюзу и передавать его своему внешнем скрипту в виду масок. Т.е пока возможно все что вы просите .

очень хочу получить код, но сразу есть немного вопросиков!
у вас есть ICQ? так бы получилось быстрей состыковаться! Номер можно в PM. или вот мой ___
В свою очередь обещаю описать технологию на wikki


Последний раз редактировалось max 11 май 2011, 17:58, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.065s | 64 Queries | GZIP : On ]