BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 17 май 2024, 18:16

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




Начать новую тему Ответить на тему  [ Сообщений: 68 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 06 май 2009, 15:57 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Chaos писал(а):
Благодарен. Получилось вот так
Код:
   response = event.getResponse();
   ip = response.getIntAttribute(RadiusStandartAttributes.Framed_IP_Address);
   ipadr = Utils.convertIpToString( ip );
   print("ip=" + ipadr);
ИМХО на много проще, да и мороки нету с массивом. Только почему-то работает только в случае, если ip занесен/привязан в договоре. Можно конечно забить, но хотелось бы использоваться микротишные пулы.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 май 2009, 17:19 
Не в сети

Зарегистрирован: 16 апр 2009, 00:12
Сообщения: 62
Карма: 0
Да, возвращает нулевые значения
Код:
   response = event.getResponse();
   ip = response.getByteAttribute(RadiusStandartAttributes.Framed_IP_Address);
   ipadr = Utils.convertIpToString( Utils.IuTol( Utils.convertBytesToInt( ip ) ) );
print("ip=");
if ( ip != null)
{
  for ( i =0; i < ip.length;i++)
  {
   print(ip[i]);
  }
  print("\n");
}
print("ip=" + ipadr);
причем и в случае использования и event.getReqest();
Код:
05-06/15:13:14  INFO [processor-p-2-t-1] EventProcessor - Process event cid:2; event:Event bitel.billing.server.processor.event.RadiusAuthenticationEvent cid: 2; module: 1; type: 120
05-06/15:13:15  INFO [processor-p-2-t-1] ScriptInstance - Eval script Function [id:4; title:hello]
05-06/15:13:15  INFO [processor-p-2-t-1] script - Process time => 726
05-06/15:13:15  INFO [processor-p-2-t-1] script - ip=
ip=0.0.0.0

05-06/15:13:15  WARN [processor-p-2-t-1] ScriptInstance - Function [id:4; title:hello]: using deprecated method [public static java.lang.String bitel.billing.server.util.Utils.convertIpToString(long)]
05-06/15:13:16  INFO [processor-p-2-t-2] EventProcessor - Process event cid:2; event:Event bitel.billing.server.processor.event.RadiusAuthenticationEvent cid: 2; module: 1; type: 120
05-06/15:13:16  INFO [processor-p-2-t-2] ScriptInstance - Eval script Function [id:4; title:hello]
05-06/15:13:16  INFO [processor-p-2-t-2] script - Process time => 336
05-06/15:13:16  INFO [processor-p-2-t-2] script - ip=
ip=0.0.0.0

05-06/15:13:16  WARN [processor-p-2-t-2] ScriptInstance - Function [id:4; title:hello]: using deprecated method [public static java.lang.String bitel.billing.server.util.Utils.convertIpToString(long)]
05-06/15:13:17  INFO [processor-p-2-t-3] EventProcessor - Process event cid:2; event:Event bitel.billing.server.processor.event.RadiusAuthenticationEvent cid: 2; module: 1; type: 120
05-06/15:13:17  INFO [processor-p-2-t-3] ScriptInstance - Eval script Function [id:4; title:hello]
05-06/15:13:17  INFO [processor-p-2-t-3] script - Process time => 195
05-06/15:13:17  INFO [processor-p-2-t-3] script - ip=
ip=0.0.0.0

05-06/15:13:17  WARN [processor-p-2-t-3] ScriptInstance - Function [id:4; title:hello]: using deprecated method [public static java.lang.String bitel.billing.server.util.Utils.convertIpToString(long)]


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
вообще соглсано докменации :
http://bgbilling.ru/v4.5/doc/ch07s06.html
микротки мождет и сам выдвавать ip из своего пула..радиус в этом случае возмет его из start-пакета (если нигде больше нет)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 май 2009, 03:36 
Не в сети

Зарегистрирован: 16 апр 2009, 00:12
Сообщения: 62
Карма: 0
пробовали передавать микротику команды через telnet вместо ssh.

Код:
      host = ( "192.168.8.1" );
        port = (23);
        login = ( "login+ct" );
        pswd = ("password");
        session = null;

       try
        {
           session = new TelnetSession( host, port );
            session.setLoginPromptSequence( ":" );
            session.connect();
           session.doCommand( login );
            session.setLoginPromptSequence( ">" );
             session.doCommand( pswd );

         list = session.doCommand ( ":put $Flag");      
            print ("list: " + list);

         session.doCommandAsync( "quit" );
      }
         
      catch( Exception e )
       {
           throw new RuntimeException( e );
         print ( "connect error " );
       }

        finally
        {
            if ( session != null )
           {
            session.disconnect();
         print ( "disconnected " );
           }
        }   


команда session.doCommand ( ":put $Flag"); должна возвращать только значение переменной (false), а приходит вместе с ним каша:
Код:
list: ^[7^[[r^[8:put $Flag^M
^M^@false^M
^M^@^M^@^M^@^[[9999B[billing_mt@MikroTik] >

причем каша и приглашение содержит и команду тоже.

нормальный telnet:
Код:
[billing_mt@MikroTik] > :put $Flag
false
[billing_mt@MikroTik] >


однако, команды, возвращающие более одной строки выполняются нормально (типа /ip firewall address-list print) - приходит только ответ.

как с этим можно бороться?
или как выделить искомый ответ из каши?
(пытался задействовать метод string.IndexOf(), но он не реализован...)


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 14 май 2009, 13:16 
Не в сети

Зарегистрирован: 16 апр 2009, 00:12
Сообщения: 62
Карма: 0
Нужна не констатация факта, нужно решение для нестандартного телнета, который использован в БГбиллинге. Под кашей понимается все то, что не равно возвращаемой переменной.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 май 2009, 16:27 
Не в сети
Разработчик

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


Код:
String template = "^.*?(\\d{2,}).*?$";
         Pattern pattern = Pattern.compile( template, Pattern.DOTALL );         
         Matcher m = null;         
         String input = "^[7^[[r^[8:put $Flag^M\n^M^@false^M\n^M^@^M^@^M^@^[[9999B[billing_mt@MikroTik] >" ;
         
         if( (m = pattern.matcher( input )).find() )
         {
            String number =   m.group(1);
            System.out.println( "number=" + number );

            
         }


у меня так находит 9999


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

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
думаю, что единственно правильным способом выделения нужных данных из каши является заключение их в заранее известные стартовые и стоповые поля -
т.е. выполняем :put ("aaaa" . $Flag . "bbbb")
в результате ответ обязательно будет содержать строку "aaaafalsebbbb".
нужно выделить из него то что находится между стартовым и стоповым полем, а далее уже преобразовать полученную строку в заранее известный тип данных.
(в примере выше нужно было выделить "false" а не "9999", следовательно, при попытке передать число могут возникнуть проблемы, т.к. чисел в ответе может оказаться несколько...)

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

и, все-таки, существует ли ПОЛНАЯ документация по языку, где было бы описано все, что он может выполнить?
я так понимаю, что в нем есть классы и методы, унаследованные из явы, а есть написанные разработчиками биллинга. Если последние более-менее документированы, то с первыми непонятно вообще ничего.. - открыл первую попавшуюся книжку по яве, нашел метод string.IndexOf () для поиска одной строки в другой, вставил - биллинг ругается что не знает этого метода..
согласитесь, гораздо проще было бы показать документацию на язык, чем собственноручно писать скрипты под задачи каждого покупателя...


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Rionet писал(а):
думаю, что единственно правильным способом выделения нужных данных из каши является заключение их в заранее известные стартовые и стоповые поля -
т.е. выполняем :put ("aaaa" . $Flag . "bbbb")
в результате ответ обязательно будет содержать строку "aaaafalsebbbb".
нужно выделить из него то что находится между стартовым и стоповым полем, а далее уже преобразовать полученную строку в заранее известный тип данных.
(в примере выше нужно было выделить "false" а не "9999", следовательно, при попытке передать число могут возникнуть проблемы, т.к. чисел в ответе может оказаться несколько...)

я не спорю ..просо явообще не знал что такое 9999 и зачем его ищут

Rionet писал(а):
посмотрел пример увидел новый для себя класс Pattern и метод .compile... как-то заморочено выглядит, особенно сама маска (надо почитать подробнее...)
Неужели в языке нет элементарных функций работы со строками? которые есть даже в Си (без плюсов)..

интресно как с regexp-ом в Си ..Это не просто поиск по подстровке , это regexp.. это несколь сложнее, тут можно здавать услвоия на порядок сложнее и пришло это из perl , лучше читать докуменатци по perl, усли вы с этим еще не сталкивались и думаете, что это аналог indexof ..То, что я привел, это не совсем элемет языка - это библиотека работы со строками.. все классы из пакета java.util.regex.*, входит в jre.

Rionet писал(а):
и, все-таки, существует ли ПОЛНАЯ документация по языку, где было бы описано все, что он может выполнить?
я так понимаю, что в нем есть классы и методы, унаследованные из явы, а есть написанные разработчиками биллинга. Если последние более-менее документированы, то с первыми непонятно вообще ничего.. - открыл первую попавшуюся книжку по яве, нашел метод string.IndexOf () для поиска одной строки в другой, вставил - биллинг ругается что не знает этого метода..
согласитесь, гораздо проще было бы показать документацию на язык, чем собственноручно писать скрипты под задачи каждого покупателя...


вот тут вы меня удивили..вы первый человек, который говорит, что наша документация лучше, чем докуменация по java . Меня даже гордость после такого распирает :) ..на самом деле как раз с явой то нет проблем, было бы желание .. почитайте для начала Bruce Eckel's, Thinking in Java..и java.sun.com ..и много других ресурсов

на самом деле почему не работает IndexOf не понятно у вас..покажите ской код .. еще есть String.match - но в данном случае она не очень сгодится..она только определит что есть то, что надо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 май 2009, 19:00 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Да .. и докуменатцию к beanshell родную


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 май 2009, 04:18 
Не в сети

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
тут можно здавать услвоия на порядок сложнее и пришло это из perl , лучше читать докуменатци по perl, усли вы с этим еще не сталкивались и думаете, что это аналог indexof ..
верно, я еще очень многого не знаю в высокоуровневом программировании - большую часть программ писал на си и не для х86.. )

а вот насчет книжек - уже очень хорошо, все ждал посыла на точный адрес :).
Thinking in java - http://www.planetpdf.com/codecuts/pdfs/eckel/TIJ3.zip - оригинал, http://www.uic.rsu.ru/doc/programming/j ... utors.html - перевод.
доки на beanshell - http://www.beanshell.org/manual/contents.html
на java.sun.com пока не понял что именно читать - много буков.. )

а насчет того что ваши доки лучше не говорил - имел в виду что по ним можно что-то понять и сделать :) (поскольку других не читал)
до совершенства далеко, конечно - идеальная дока должна содержать описание и полнотекстовый ПРИМЕР использования для каждого метода..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 01:49 
Не в сети

Зарегистрирован: 16 апр 2009, 00:12
Сообщения: 62
Карма: 0
stark писал(а):
покажите ской код .. еще есть String.match - но в данном случае она не очень сгодится..она только определит что есть то, что надо

Пока товарищ занимается чтением книжек....Микротишная команда ":put $Flag" возвратит значение переменной в виде "true" либо "false". Вот их и нужно прочесть "flag = session.doCommand ( ":put $Flag);" может и String.match сгодится, покажите на примере как им пользоваться. я так понимаю, что-то вроде этого
Код:
 
flag = session.doCommand ( ":put $Flag);
//тут в переменной flag будет каша, как приведено выше.
if (flag.match(true))
{
сделать то
}
if (flag.match(false))
{
сделать другое
}
поправьте меня для минимизации экспериментов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 11:15 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Chaos писал(а):
stark писал(а):
покажите ской код .. еще есть String.match - но в данном случае она не очень сгодится..она только определит что есть то, что надо

Пока товарищ занимается чтением книжек....Микротишная команда ":put $Flag" возвратит значение переменной в виде "true" либо "false". Вот их и нужно прочесть "flag = session.doCommand ( ":put $Flag);" может и String.match сгодится, покажите на примере как им пользоваться. я так понимаю, что-то вроде этого
Код:
 
flag = session.doCommand ( ":put $Flag);
//тут в переменной flag будет каша, как приведено выше.
if (flag.match(true))
{
сделать то
}
if (flag.match(false))
{
сделать другое
}
поправьте меня для минимизации экспериментов.


ну match - это тот, же самый regexp ..т.е
if (flag.match( "^.*?true.*?$" )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июл 2009, 03:04 
Не в сети

Зарегистрирован: 16 апр 2009, 00:12
Сообщения: 62
Карма: 0
Не получилось.
Код:
07-16/00:43:35  INFO [pool-1-thread-39] ScriptInstance - Eval script Function [id:22; title:test_logon]
07-16/00:43:35 ERROR [pool-1-thread-39] script - Eval error: Sourced file: Function [id:22; title:test_logon] : Error in method invocation: Method match( java.lang.String ) not found in class'java.lang.String'
Sourced file: Function [id:22; title:test_logon] : Error in method invocation: Method match( java.lang.String ) not found in class'java.lang.String' : at Line: 30 : in file: Function [id:22; title:test_logon] : flag .match ( "^.*?true.*?$" )

   at bsh.BSHMethodInvocation.eval(Unknown Source)
   at bsh.BSHPrimaryExpression.eval(Unknown Source)
   at bsh.BSHPrimaryExpression.eval(Unknown Source)
   at bsh.BSHIfStatement.evaluateCondition(Unknown Source)
   at bsh.BSHIfStatement.eval(Unknown Source)
   at bsh.BSHBlock.evalBlock(Unknown Source)
   at bsh.BSHBlock.eval(Unknown Source)
   at bsh.BSHBlock.eval(Unknown Source)
   at bsh.BSHTryStatement.eval(Unknown Source)
   at bsh.Interpreter.eval(Unknown Source)
   at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:310)
   at bitel.billing.server.script.bean.ScriptMachine$SimpleScriptRunner.runScript(ScriptMachine.java:65)
   at bitel.billing.server.script.bean.ScriptMachine.runScriptImpl(ScriptMachine.java:185)
   at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:124)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:238)
   at bitel.billing.server.processor.DefaultProcessor.standartAuth(DefaultProcessor.java:204)
   at bitel.billing.server.processor.dialup.DialUpProcessor.authenticationProcess(DialUpProcessor.java:130)
   at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:181)
   at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:80)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
   at java.lang.Thread.run(Thread.java:619)
07-16/00:43:35  INFO [pool-1-thread-39] script - Process time => 598


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Chaos писал(а):
Не получилось.
Код:
07-16/00:43:35  INFO [pool-1-thread-39] ScriptInstance - Eval script Function [id:22; title:test_logon]
07-16/00:43:35 ERROR [pool-1-thread-39] script - Eval error: Sourced file: Function [id:22; title:test_logon] : Error in method invocation: Method match( java.lang.String ) not found in class'java.lang.String'
Sourced file: Function [id:22; title:test_logon] : Error in method invocation: Method match( java.lang.String ) not found in class'java.lang.String' : at Line: 30 : in file: Function [id:22; title:test_logon] : flag .match ( "^.*?true.*?$" )

   at bsh.BSHMethodInvocation.eval(Unknown Source)
   at bsh.BSHPrimaryExpression.eval(Unknown Source)
   at bsh.BSHPrimaryExpression.eval(Unknown Source)
   at bsh.BSHIfStatement.evaluateCondition(Unknown Source)
   at bsh.BSHIfStatement.eval(Unknown Source)
   at bsh.BSHBlock.evalBlock(Unknown Source)
   at bsh.BSHBlock.eval(Unknown Source)
   at bsh.BSHBlock.eval(Unknown Source)
   at bsh.BSHTryStatement.eval(Unknown Source)
   at bsh.Interpreter.eval(Unknown Source)
   at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:310)
   at bitel.billing.server.script.bean.ScriptMachine$SimpleScriptRunner.runScript(ScriptMachine.java:65)
   at bitel.billing.server.script.bean.ScriptMachine.runScriptImpl(ScriptMachine.java:185)
   at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:124)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:238)
   at bitel.billing.server.processor.DefaultProcessor.standartAuth(DefaultProcessor.java:204)
   at bitel.billing.server.processor.dialup.DialUpProcessor.authenticationProcess(DialUpProcessor.java:130)
   at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:181)
   at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:80)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
   at java.lang.Thread.run(Thread.java:619)
07-16/00:43:35  INFO [pool-1-thread-39] script - Process time => 598


matches


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

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
И все-таки корявый ваш телнет...

Специально послушал сниффером что возвращает микротик.
Коннекчусь, пишу команду - :put $Flag
жму энтер.
вижу в сниффере ушедший от меня пакет с содержимым
Код:
\r\n

сразу за ним следует пакет ответа с содержимым:
Код:
\r\000
false\r\n
\r\000
\r\000
\r\000
\033[9999B[rionet@MikroTik] >


Никаких повторов команд нет, также как и нет никаких лишних непечатных символов.
Я сначала подумал что \000 тоже попадают в строку ответа и регэксп не может ее разобрать (согласно докам он стопается на первом \000 символе).
Написал в микротик даже:
Цитата:
Telnet. Problems with using MT reply in Java.


We use Telnet to execute some scripts on MT router when new user is logged on.

It is needed to read value from one variable before execute script.

I try use :put $Variable.

Real MT reply (get by sniffer) is: (variable value = "false", used login+ct)
\r\000
false\r\n
\r\000
\r\000
\r\000
\033[9999B[rionet@MikroTik] >


There was many other symbols in reply. I try to use RegExp to find "false" value in reply, but parsing stops on first \000 symbol...

Can you fix sending \r\000 characters in telnet session?


На что получил ответ:
Цитата:
Hello,

Telnet is working according to RFC 854.
Quote from RFC
the sequence "CR NUL" must be used where a carriage
return alone is actually desired;

If you don't want to get rid of \00, tell your telnet client to enable binary
mode.

Regards,
Maris

Come to MUM USA,
Dallas/Fort Worth, TX, September 3-4
http://mum.mikrotik.com/


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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 июл 2009, 21:02 
Не в сети

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
Отослал в личку доступ.
Напишите мне IP свой с которого логиниться будете я только для него доступ оставлю, остальное прикрою.


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
чето я все ранво не понял . что чатое 9999B - это уже мусор ? или как ?
и еше там есть куча мусора после притглашения
в итоге мы отправляем :

Код:
0D 00


получаем в резульатате :
Код:
0D 0A 0D 00 │ 0D 00 0D 00 │ 0D 00 1B 5B │ 39 39 39 39 │ 42 5B 72 69 │ 6F 6E 65 74 │ 40 4D 69 6B │ 72 6F 54 69 │ 6B 5D 20 3E │ 20 1B 37 1B
5B 72 1B 38


т.е визульно имеем :
Код:
...........[9999B[rionet@MikroTik] > .7.[r.8


так откуда берется кусок - 1B 5B │ 39 39 39 39 │ 42 ? откуда эти 9999 ? ..Стандартный коносльный клиент их не отображают . в яве они печатаются - потому что там что пришло то и печатаем . значит стандартный клиент делает какую-то дополнительную обработку ..он показывет только - [rionet@MikroTik] > , обрезая лишине символы в начале и в конце ..причем эти лишние символы вроде как не похожи на команды telnet , там нет 255 ..да и режим уже не тот чтобы послылать эти команды


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
я поеял что есть - 9999B,это не мусор - это директивы для терминала - двигать курсор и т.п


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
кажется все таки есть прооблемв miktotik . Он всегда шлет дополнительные команды для терминала .
обынчо терминал (и микроик тоже) присылает команду :
IAC DO 24 . Что означет - дай мне тип терминала
в ответ ему есть 2 варианта .
1.отказать : IAC WONT 24 . типа - не хочу ..Так у нас сейчас работает. Я проверил на обчнм telnetd и да и другие подобные типа cisco в этом случае считают, что раз тип терминал не дают , занчит не будет слать ничего специфического . А Mikrotik рабаоте все равно по умолчанию с терминалом (кажется VT100 или еще какой-то в этом роде ) .
2. согласится : IAC WILL 24 . Типа вышлю тебе тебе тип терминала

Тогда через некто время любой сервер(в том числе и mikrotik) : IAC SB TERMINAL-TYPE SEND IAC SE
Типа -дай мне значение твоего типа терминала
на что клиент обычно ответчает :
IAC SB TERMINAL-TYPE IS XXX IAC SE

где XXX- это тип терминала . так вот если тут укзать dump - то это считается самый примтивыне тип терминала , там не шлется информация по куросрам и т.п. telnetd в этом случае нормально работает . подозреваю что cisco тоже. но вот mikrotik похоже продолжает работать с VT100, который у него идет типа по умолчанию..Т.е пока не поулчается заствить mikrotik не слать эти символы . елси не получится, то придется здавать ему тип терминала (которые он поодерживает) и нам убирать дополнительные симовлы с точки зрения этого терминала.. В общем надо выяснить паочему наи не поодерживают dumb(или может он у них по другому называется)


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
полчаестя 2 варианта
1. либо они поодерживают более примтинвые треминалы(фактчиски у нас примтвыфе терминал -нас не волнует информация о курсорах вообще ) .

2. Либо нам нужно поддержать ANSI terminal. Но поддержать только для того, чтобы выкинуть из него все эти дерективы, т.к мы рабаоатем из программы удаленно и нас не волнует отображения курсора . У меня есть подозрение что свой телент сервер они реализовали не сами , может быть он все-таки он поодерживает примтивные терминалы, может там настроить это как-то можно? их все поодерживают, кроме mikrotik


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 авг 2009, 00:09 
Не в сети

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
Честно говоря не знаю что ответить на подобный вопрос. ибо стандарт я не читал.

То что там могут использоваться управляющие последовательности курсором и т.п. - это наверняка.
Попробуйте залогиниться с логином без префикса +ct. и увидите ЦВЕТНЫЕ команды..
причем он расцвечивает их по мере набора и выделяет светлым набранные правильно, красным неправильные, фиолетовым переменные и тп.
когда терминал из родной винбоксовской консоли используешь там еще автодописывание команд работает по первым набранным буквам. правда не всегда, я не разбирался подробно как именно.

Настроек телнета никаких нету кроме вкл/выкл и фильтра адресов.
Официальная дока - http://www.mikrotik.com/testdocs/ros/3. ... telnet.php
единственное что там подробного это ссылка на RFC - http://www.faqs.org/rfcs/rfc854.html

Думаю, имеет смысл копаться в стандарте и искать ответ там.
Если совсем тупик наступит могу как licensed user отправить официальный запрос в саппорт. Просто скорее всего также как и в прошлый раз пошлют в какую-нить строчку в RFC..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 авг 2009, 00:49 
Не в сети

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
аа, стоп, кажется я понимаю - вопрос идет уже не о телнете, а о данных передаваемых по телнету.
Т.е. о типе шелла ?

я посмотрел в http://www.mikrotik.com/testdocs/ros/3. ... serial.php там есть поле типа терминала, правда я нигде не нашел списка поддерживаемых..
можете тоже попробовать покопаться в меню /system console ...


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Rionet писал(а):
аа, стоп, кажется я понимаю - вопрос идет уже не о телнете, а о данных передаваемых по телнету.
Т.е. о типе шелла ?



да. Эти данные сам телнет пропускает ..Он пропускает любой байт(даже 0) , если он не равен 255(для него это начало команды — IAC)..Но там есть еще много чего лишнего для управления консолью - команды управления курсором , очистки экрана, 0 и т. п . .это все нужно для консоли и тоолько для нее.. . Я написал тестовые пример, который все это вырезает(9999 и т.п - это escape- последовательности) ..Но есть одно но ..допустим возмем приглашение , которое печататься после ввода пароля . Большое слово mikrotik на весь экран, и т.п ..там в конце он выводит:
[ r i o n e t @ M i k r o T i k ] > [ r i o n e t @ M i k r o T i k ] >

2 раза на самом деле .Потому что он после первого раза ставит курсор(специальная esc-команда идет после 1-ой фразы ) на начало строки и выводи это заново поверх ..Поэтому визуально в терминале всего один раз строку видно... они должны поддержать примитивные терминал без возможности управления курсором - иначе нам придётся эмулировать полноценный теминал в памяти на случай они начнут правит то, что уже напечатали(правиь могут не обязательно в последней строке) . Пока такое есть только у микротик. Cisco, dlink, telnetd поддерживают простой терминал - с ними пока этой проблемы нет ..


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Rionet писал(а):
Думаю, имеет смысл копаться в стандарте и искать ответ там.
Если совсем тупик наступит могу как licensed user отправить официальный запрос в саппорт. Просто скорее всего также как и в прошлый раз пошлют в какую-нить строчку в RFC..


в rfc 854 этого всего нет . то что печатается лишнее - это не стандарт telnet .это стандарт для теримналов vt100 и т.п .. ну пусть в тот стандарт потыкают.. вопрос в том поддерживают ли они примитвные терминалы


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

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
Создал пока тему на тамошнем форуме, там быстрее обычно отвечают.
правда скорее всего в рабочие дни. будем ждать.
http://forum.mikrotik.com/viewtopic.php?f=2&t=34004


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
они советуют binary mode. Я пробовал в него переключаттся и не увидел никакой разницы . идет таже же самая информация - 0 , esc-последовательности для перемещения курсора (и 2 раза приглашение)


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
вот мой диалог с сервером:
сервер:
IAC DO 24 IAC DO 32 IAC DO 35 IAC DO 39
клиент:
IAC WONT 24 IAC WONT 32 IAC WONT 35 IAC WONT 39 IAC DO 0
сервер:
IAC WILL 0 IAC WILL 3 IAC DO 1 IAC DO 31 IAC WILL 5 IAC DO 33
клиент:
IAC DONT 3 IAC WONT 1 IAC WONT 31 IAC DONT 5 IAC WONT 33
сервер:
IAC WILL 3 IAC WILL 1

M i k r o T i k v 3 . 2 3

L o g i n :

клиент:
IAC DONT 3 IAC DONT 1 логин

сервер:
P a s s w o r d :

И далее пошел обмен только данными ...опяь теже 0, esc- последовательности для курсора


клиент пытается включить бинарный режим : IAC DO 0 . сервер соглашается :
IAC WILL 0 , но это ничего не меняет .. если это убрать то, тоже самое . если согласится на передачу типа терминала(опция 24 ) и потом его передать ("dumb"), то все равно ничего не меняется ..т .е ни бинарный режим ни тип терминала никак не влияют на тип общения. сервер на все согласен , но приходит от него все тоже самое

последние команыды : "IAC DONT 3 IAC DONT 1" клиент посылает чтобы сервер их отрубил. тот упорно путается включить эхо (опция 1 ) - вывод всего того что послал клиент, обратно. это запрет работает , перестает слать эхо


Последний раз редактировалось stark 10 авг 2009, 11:40, всего редактировалось 2 раз(а).

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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Вот тоже самое с типом терминала (опция 24)
server:
IAC DO 24 IAC DO 32 IAC DO 35 IAC DO 39
client:
IAC WILL 24 IAC WONT 32 IAC WONT 35 IAC WONT 39 IAC DO 0
server:
IAC WILL 0 IAC SB 24 IAC SE
client:
SB 24 IS dumb IAC SE
server:
IAC WILL 3 IAC DO 1 IAC DO 31 IAC WILL 5 IAC DO 33
client:
IAC DONT 3 IAC WONT 1 IAC WONT 31 IAC DONT 5 IAC WONT 33
server:
IAC WILL 3 IAC WILL 1

M i k r o T i k v 3 . 2 3

L o g i n :
client:
IAC DONT 3 IAC DONT 1 <login>

server:
P a s s w o r d :

и все то же самое


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

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


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

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


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

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