BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 68 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 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 :

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


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
с Mikrotik по SSH те же проблемы . Он также шлет доп символы . Это не проблема ПРОТОКОЛА . Это проблема ТЕРМИНАЛА .


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

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
Слил туда последние рассуждения. Пока выступаю в качестве корявого переводчика :))
Будем ждать ответов )


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

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
В общем походу поддержки режима без лишних символов нету.
там подсказали вариант с +cte к логину, но я если честно не смог даже разобраться в том что происходит ибо тут даже в стандартном телнете курсор уносило в начало экрана каждый раз..

остается только фильтровать лишнее и искать последнее приглашение ввода команды >


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

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

остается только фильтровать лишнее и искать последнее приглашение ввода команды >


ясно .. Ну я api для telnet уже написал которое выреазеет лишние смиволы , на днях отлажу и выложу .. пока это будет еще один класс работы с telnet , его протестируем вначале , потом будут подменять им стандартный класс TelnetSession. там не только эта проблема , хочется 2-х зацев убить .

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


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

Зарегистрирован: 17 апр 2009, 18:57
Сообщения: 28
Карма: 0
http://wiki.mikrotik.com/wiki/Console_l ... in_options
вот еще последний ответ, можете поэкспериментировать..


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Rionet писал(а):
http://wiki.mikrotik.com/wiki/Console_login_process#Console_login_options
вот еще последний ответ, можете поэкспериментировать..


пока не помогает .пробовал и +с, и +ct , +t, +e, +te. Не помоагет ..иногда начиает вместо 2-х раз писать 4 раза приглашение

по этой ссылке есть вот это
Цитата:
Q: My expect script does not work with newer 3.0 releases, it receives some strange characters. What are those?
A: These sequences are used to automatically detect terminal size and capabilities. Add '+t' after login name to turn them off.


тут похоже идет речь о самом телент протоколе . об субопциях. Но утут у меня проблемы нет, т.к я во впервых обрабатываю субопции коректно - тут нет левых символов , а во-вторых поскольку я откзыаюсь от всех предложений (тип терминала, размер окна ) и т.п, то он их не присылает . Причем даже если я не отказываюсь , он все равно запрашивает тип терминала в субопции .Т.е +t не работает получается, или работает но как-то странно . Но это неважно . Т.к у нас нет проблемы с обработкой самого telnet протокола..

Вроде как судя по описанию поддержка dumb terminal-а отключается опцией "+e" отджельно . Т.е по умолчанию поддеркжа включена получается . Он всегда пытается договоритс я типе терминала(независомо от опций). Я пытался от отказываться и соглашаться и потом посылать ему териманал "dump" с ввлюченной и отключенной опцией +e , но пока нет результата . При этом опции и сочетания вкляют на тип результата, но понять закономерность пока не могу ..


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Выложил новое api для работы с telnet . Надо использовать bitel.billing.server.util.telnet.ansi.TelnetAnsiSession вместо bitel.billing.server.util.telnet.TelnetSession . В остальном интрефейс тот же самый + новые функции.

Этот класс вырезает все левые esc-последедовательности и нули. С дублированием информации он ничего не делает, для этого пошли другим путем . Добавлены функция setRegExp помимо setLoginPromptSequence . В случае с mikrotik(в момент получения стартового приглашения ) это работает так :
session.setRegexp( "^.*\\[rionet@MikroTik\\] >.*\\[rionet@MikroTik\\] >\\s$" );
session.doCommand( pswd )
В остальных случаях можно использовать как по старинке setLoginPromptSequence(лучше его новый аналог - setEndString) - работает. левые символы не появляются


Пока тестирую это аpi. Возможно потом переведу все telnet-шлюзы на него, точнее скорее всего подменю стандартный TelnetSession на него . Для Mikrotik пока добавл отдельный шлюз - MikrotikTelnetAnsiGateWorker , который использует это api


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

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

я пока временно не у дел в связи с защитой диссертации...


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 1


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

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