Работа с telnet протоколом из 1С #745637


#0 by punkforever
Задача: Коннект к серверу по протоколу telnet, авторизация Отправка данных (запрос) Получение данных (ответ) Желательно, код должен выполняться на сервере (регл. задание) Каким будет оптимальный вариант решения? Существуют ли готовые наработки? Спасибо.
#1 by Гёдза
bat файл
#2 by Гёдза
telnet ... > 1.txt
#3 by punkforever
Т.е. задачу можно решить без com-объекта? Ответ тоже можно будет получить?
#4 by VladZ
Зачем?
#5 by punkforever
Нужно из 1С общаться с сервером оборудования. Мониторить, отключать, подключать и т.д. Связь по протоколам telnet (или ssh)
#6 by Остап Сулейманович
Присоединюсь. В 1С есть WEB-сервисы, HTTP-сервисы... Все штатно. Смысл в телнетах - только если на "той стороне" стоит какая специфичная железка, которая по другому никак во внешний мир не смотрит. И еще вопрос : "Коннект к серверу по протоколу telnet, авторизация ... Желательно, код должен выполняться на сервере (регл. задание)" речь за один и тот же сервер?
#7 by punkforever
Других протолов нет, железка специфичная. Сервер оборудования в локальной сети Код должен выполняться на сервере 1С, это физически другая машина.
#8 by Draziw
Неужели кто-то решился наконец написать на 1С клиент для MUDов ?
#9 by Garikk
писать в файл... потом батником вызывать телнет, результат тоже писать в файл и читать из 1С
#10 by Jaap Vduul
, Не взлетит. Во-первых, ТС требуется интерактивное взаимодействие с хостом, а во-вторых виндовый клиент telnet работает в режиме эмуляции терминала и со StdOut не взаимодействует. ИМХО, можно что-то замутить только если telnet с ключом /f запускать и команды через sendkeys отправлять. Ну, про надёжность такого решения я промолчу.
#11 by Остап Сулейманович
В пакетном режиме - вполне можно обойтись bat-файлом. В режиме вопрос/ответ - ИМХО только эмулировать протокол средствами 1С+КакойНибудьАктивИкс.
#12 by Garikk
так можно putty взять...заодно и ssh будет
#13 by quest
на инфостарте вроде есть же компоненты для работы с сетью. хочешь сам сервером стань, хочешь работай с другими
#14 by punkforever
Спасибо за участие. Будем думать и пробовать)
#15 by beaver1971
Сокеты пробовал?
#16 by punkforever
Нужно попробовать.. Авторизоваться тоже можно? Пока на 1с сервере нет этого актив икса.. Он вроде с VB ставиться или как то так..
#17 by punkforever
Как вариант, конечно, поковыряться с c#, и сделать com-объект (или поискать готовый).. Примеры в сети есть. Была надежда, что кто-то сталкивался с подобной задачей, и возможно, есть более простое и элегантное решение)
#18 by VladZ
Зачем все пихать в 1С? Изначально, 1С - это программа учета. Пихать туда всякие "телнеты" - это все равно что к козе баян прикручивать. Есть механизм внешних компонент - работай через них. Тем более "отключать и подключать" 1С-у я бы не доверил.
#19 by Garikk
<поковыряться с c#, и сделать com-объект (или поискать готовый).. > Можно, а в итоге стать программером на C#, я так в своё время с VB6 на C# переехал...когда оказалось что фрагментацию пакетов из сети нормальные люди вручную собирают ...одну софтинку свою с winsock переводил... Потому что примеры в сети не учитывают кучи нюансов работы с сетью P.S. Лучше в данном случае winsock заюзать, будет проще, быстрее и надёжнее
#20 by Serginio1
#21 by punkforever
winsock - возможна ли авторизация? В любом случае, спасибо за наводку, проанализируем. Спасибо. Посмотрим.
#22 by Garikk
telnet это простой текстовый протокол, там нет понятия авторизации, туда просто надо логин и пароль прямым текстом передать с символами перевода строки
#23 by Serginio1
#24 by beaver1971
Нет в 1С такого типа, ну и фиг с ним, в jscript он точно есть... Вот и пусть jscript поработает прокладкой )))) Уж внутри jscript сам сокеты откроешь )))))
#25 by oleg_km
У меня собирает с АТС звонки уже больше 5 лет. Раньше было на Новый COMОбъект("MSWinsock.Winsock");, теперь все перевел на
#26 by vde69
из 1с конектишся к серверу по WMI и дальше там можно сделать все что угодно...
#27 by oleg_km
В WMI реализован telnet? Может с ping путаешь?
#28 by punkforever
Пробуем через MS winsock. Код: В событии DataArrival получаем данные следующим способом Переменная Стр содержит значение "яэ%яыяыяэ'яэяэ" Подскажите, какая кодировка строк нужна, можно ли это сделать в 1С. Предполагаю, что нужно кодировать как строку для sendData так и полученный ответ..
#29 by ТолькоПросмотр
Нужно выполнить команду системы, то же самое, что писать в командной строке, ну или батник.
#30 by oleg_km
MSWinsock.Winsock работает с ANSI - у него в документации написано. Можно в свойствах сокета указать что в байтах. байты записать в файл, а потом уже из файла смотреть
#31 by punkforever
Нет случайно под рукой примера?))
#32 by punkforever
Как в SendData передать ANSI строку из 1С.. А из GetData получить в формате, читабельном в 1с..
#33 by oleg_km
У тебя похоже сервер работает с Юникодом. Примера работы с байтами нет. Не работал, а сейчас тем более уже не использую. Перешел на .NET, но там сходу сложнее будет разобраться. Попробуй ответ  "яэ%яыяыяэ'яэяэ" записать в файл с кодировкой ANSI, а открыть уже с кодировкой UNICODE. У меня вроде получалось
#34 by punkforever
Попробую, спасибо. Телнет Сервер - в данном случае, для тестирования, использую свой локальный компьютер.. С командной строки всё работает конечно же.. На счет байтов - нашел в методе GetData - вторым параметром можно передать тип получаемых данных.. Пока не получается правда)) Возможно, так же, есть какая то специфика программной работы с телнет протоколом.. Казалось, что должно быть попроще это всё))
#35 by oleg_km
Нет никакой специфики. Telnet-клиент - это по сути голый TCP/IP. Там есть разные заморочки по поводу как отображать на консоли. Попробуй записать ответ в файл и прочитать с разными кодировками. Мне кажется должно получиться
#36 by punkforever
Записываю в этих кодировках oem: пн%плплпн'пнпн пл ansi: яэ%яыяыяэ'яэяэ яы Через notepad++ открываю, толку нет.
#37 by oleg_km
В нотпаде все варианты юникода перепробовал? и UTF-16 и UTF-8 и UNICODE? или положился на автораспознавание?
#38 by punkforever
кодировал и конвертировал. В c#, кстати, почти тоже самое получаю (есть пример работы с сокетами) Массив байтов, которые при конвертации в ascii дают ??????.. Тут что-то прниципиально не так)
#39 by oleg_km
Какая-то трехбайтная кодировка: FF FD 25 FF FB 01 FF FB 03 FF FD 27 FF FD 1F FF FD
#40 by oleg_km
А кстати, а сервер что-то должен осмысленное слать? или двоичные данные?
#41 by Serginio1
Ды закодируй строку в Base64. Возможно, что символы которые больше 127 как то экранируются
#42 by Serginio1
Или можешь переделать на UTF8 или Encoding.GetEncoding(1251);
#43 by punkforever
Да, в массиве байтов в основном значения > 127.. Как бы понять что он хочет.. Я надеюсь получить что-то осмысленное). Как в телнет клиенте windows.. Запрос на ввод логина.. Или что-то типа "youre about to send pass.."
#44 by Serginio1
ASCIIEncoding  соответствует кодовой странице Windows 20127. Поскольку ASCII — 7-разрядая кодировка, символы ASCII ограничены нижними 128 символами Юникода, от U+0000 до U+007F. Если вы используете кодировщик по умолчанию, возвращенный cdjqcndjv Encoding.ASCII или конструктором ASCIIEncoding, символы вне этого диапазона, заменяются на вопросительный знак (?) до выполнения операции кодирования. Поскольку класс ASCIIEncoding поддерживает только ограниченный набор симовлов, классы UTF8Encoding, UnicodeEncoding, и UTF32Encoding лучше подходит для глобализованных приложений. Следующие соображения помогут вам принять решение об использовании ASCIIEncoding:
#45 by punkforever
С utf8 - непонятное что-то C default - яэ%яыяыяэ'яэяэ яы Возможно это особенность телнет протокола.. Мне нужно понять что дальше отправлять, чтобы выйти на авторизацию, её пройти и начать общаться с сервером по существу)
#46 by Garikk
да нет там особенностей, протокол вообще простой, через телнет клиента даже с вебсервером общатся можно вручную проблема явно в кодировке
#47 by Salimbek
Так кодирует, если из CP866 выкинешь в ANSI
#48 by Salimbek
Опс, ты же и так это пишешь, сорри, невнимательно прочитал...
#49 by Serginio1
По умолчанию в компоненте StreamWriter.UTF8NoBOM
#50 by Salimbek
А есть другое ПО, нормально работающее с этим оборудованием? Если есть, то можно взять TCPDump и промониторить весь сетевой трафик в это время. Оттуда уже вытащить - что куда и как сообщается. Вполне возможно, что это нормальные сообщения во внутренней кодировке ПО.
#51 by Serginio1
Прочитай используя кодировку CESU-8
#52 by punkforever
Да пока на своем компе тестирую, через телнет сервер винды.. И здесь уже затык, при первом получении)
#53 by punkforever
Это попытка записать в файл полученную строку через GetData с кодировкой CESU-8:
#54 by Serginio1
А пользуешься 28? Попробуй
#55 by Serginio1
Ты уже неправильную строку получаешь. Смысл её записывать.
#56 by Serginio1
Вот тут народ с винсокетами мучился
#57 by punkforever
Да, использую winsock. Надо будет что то пробовать) Если не будет получаться.
#58 by punkforever
Пробовал такое: Даже парсинг специфический присутствует.. Не помню в чем, но тоже где то не пошло..
#59 by Serginio1
здесь есть пример использования TCP/IP Или 54.
#60 by punkforever
Спасибо за поддержку) Буду пробовать разные варианты.
#61 by xaozai
Есть всякие ActiveX, которые позволяют работать по протоколу telnet программно. Вот в первых результатах поиска гугола с примером даже:
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С