Russian Qt Forum
Ноябрь 23, 2024, 18:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: написать прогу управления "умными свичами"  (Прочитано 17161 раз)
white_crow
Гость
« Ответ #15 : Июнь 29, 2012, 17:40 »

я думаю вы преувиличиваете - телнет достаточно простой протокол (как грабли)  - так что реализовать мою задачу на Qt/С++  - это вполне тривиальная задача, не хочу я перл или питон ради этого изучать...
а для ssh и snmp тоже есть свободные либы, что неудивительно. И даже не важно на чем они написаны - хотя есть и на С++.
« Последнее редактирование: Июнь 29, 2012, 17:44 от white_crow » Записан
Bepec
Гость
« Ответ #16 : Июнь 29, 2012, 19:14 »

ДмитрийМ вы ооооООчень сильно преувеличиваете Веселый На С++ написано гораздо больше по этим протоколам, чем на питоне и иже с ним. Соответсвенно библиотек и примеров в разы больше.
Так что удачи Белому ворону Веселый
Записан
white_crow
Гость
« Ответ #17 : Июнь 29, 2012, 20:12 »

спасибо, удача мне не помешает...
Записан
OKTA
Гость
« Ответ #18 : Июнь 29, 2012, 20:41 »

а SNMP уже не канает??
и что за коммутаторы?
Записан
white_crow
Гость
« Ответ #19 : Июнь 29, 2012, 21:06 »

я уже писал про snmp -  реально сложнее, чем телнет - mib нужно изучить, не вполне очевидное дерево параметров и типов - нужно изучать доки с нуля, а команды телнет уже изучены . И в телнете можно ответ анализировать.
Хотя, при желании можно было бы и snmp - c точки зрения уровня сетевой модели - там все тоже просто -  посылается строка с параметрами по UDP и все дела (я смотрел снифером). Просто реально некоторые вещи очень неудобно там делать.
Самое важное - по snmp не все можно настроить.
Коммутаторы Zyxel MES-3528, ES-3124, MES-3712F, GS-4012F, XGS-4728F
Записан
kostya2vntu
Гость
« Ответ #20 : Июль 02, 2012, 17:11 »

Не вижу никаких проблем с телнетом. Когда-то писал подобную штуковину, правда управлял не свичами а турникетами.
Уже много кто подобное делал - https://www.google.com/search?q=qt4+telnet
Записан
kostya2vntu
Гость
« Ответ #21 : Июль 02, 2012, 17:13 »

Даже так: http://doc.qt.nokia.com/solutions/4/qttelnet/qttelnet.html
Записан
DmitryM
Гость
« Ответ #22 : Июль 03, 2012, 11:41 »

ДмитрийМ вы ооооООчень сильно преувеличиваете Веселый На С++ написано гораздо больше по этим протоколам, чем на питоне и иже с ним. Соответсвенно библиотек и примеров в разы больше.
Так что удачи Белому ворону Веселый
Telnetlib в составе CPython, так что ничего не надо писать и прикручивать.
Записан
Bepec
Гость
« Ответ #23 : Июль 03, 2012, 11:42 »

Дмитрий не путай ) Там такая же библиотечка/дополнение. Таких сотни/тысячи/миллионы для С++ и подключаются одной левой )

Не делай трагедии из писанины и прикручивания Веселый Она порой даже приятна и полезна.
Записан
white_crow
Гость
« Ответ #24 : Июль 08, 2012, 17:23 »

Зря пугали не юзать Qt и С++ и Telnet.
Все достаточно просто и куча готового кода существует. И подключать сторонние либы - никто не мешает.

Удалось разобраться с готовым классом и примером телнет клиента.
http://code.google.com/p/qtelnetperso/source/browse/trunk/v2/libs/solutions/qttelnet-2.1-opensource/

Удалось  обойтись без костылей типа
Цитировать
GUI-фронтэнд, устанавливаемый на win-клиентах может через сокеты (через самописный протокол) посылать команды Console-фронтэнду, устанавливаемому на сервере.
И не нужен сервер для бэкенда.
Все в рамках одной программы, которую можно скомпилить на разные целевые платформы.

Удалось "локализовать" вышеуказаный пример - для своих нужд, вырезать лишнее, и заставить компилироваться и работать.
("из коробки" - сразу не компилился - нюансы с анахронизмами : )
Неделю потратил уже на простые вещи.
Уже  привык к Qt Creator.
Потиху привыкаю к синтаксису С++, к особенностям ООП,
параметрам в .pro фале и прочим хитростям и тонкостям.
Читаю книжки...: )
Долго не получалось скомпилить пример.
Потом удалось скомпилить. Но долго не получалось авторизоваться на "телнет-сервере" - начал изучать дамп трафика - очень помогло.
На данный момент в интерактивном режиме работает простейший телнет клиент.
Теперь буду распаралеливать и автоматизировать без интерактива -  выполнять шаблоны команд на N свичах (по списку из файла (позже из БД брать).

Короче - постепенно вникаю в тему )
Пока что от ООП и C++  немного едет башня - все-таки сломали мне мозг паскалем и процедурным программированием )))

P.S.  На данный момент есть  нюансы некритичные

- при компиляции (возникает 2 Warning). (При этом все работает, но раздражает)

Makefile.Debug:105: предупреждение: overriding commands for target `debug/moc_qttelnet.cpp'
Makefile.Debug:102: предупреждение: ignoring old commands for target `debug/moc_qttelnet.cpp'

При этом в книжке прочитал, что теперь не нужно в конце файла инклюдить moc файл. Но без инклюда совсем не компилиться...
так что оставил #include "main.moc"
и #include "qttelnet.moc" в соответстующих файлах.

Вот на базе чего я все делаю:
http://code.google.com/p/qtelnetperso/source/browse/trunk/v2/libs/solutions/qttelnet-2.1-opensource/
Если кому не лень поковырять - посмотрите...

- еще валит "мусор" (спец. символы) от телнет-сервера. Это никак не мешает, и даже реализована функция stripCR - которая с помощью RegExp типа должна резать (.remove) этот мусор, но похоже не режет...  

Код:
private:
    QString stripCR(const QString &msg)  
    {
        QString nmsg(msg);
        nmsg.remove('\r');
        nmsg.remove(QRegExp("\033\\[[0-9;]*[A-Za-z]")); // Also remove terminal control codes
        return nmsg;
    }
и используется в слоте (который активируется от сигнала получения данных с серва - добавлется строка в элемент textEdit)

Код:
private slots:
    void telnetMessage(const QString &msg)
    {
        
        textEdit->append(stripCR(msg));
       //textEdit->append(msg);  без stripCR работает так же как и со stripCR - не режет символ \033 (<- backspace ?) который очень часто "вылазит"

    }
« Последнее редактирование: Июль 08, 2012, 17:56 от white_crow » Записан
Bepec
Гость
« Ответ #25 : Июль 08, 2012, 19:19 »

Что сказать - поздравляю с почином.
Насчёт инклуда моков - видимо используемая вами библиотечка их требует. Хотя хз хз.

А мусор надо просто отделить и вырезать - там же символьные команды походу.

Посмотрите что у вас в вызове stripCR(const QString &msg)  приходит. Если не удаляется, значит надо менять regExp. Темку тогда на форуме создайте, а то это та ещё головная боль Веселый
Записан
white_crow
Гость
« Ответ #26 : Июль 08, 2012, 22:25 »

думаю, нюанс в том, что телнет "работает" с ASCII.  Надо видимо копать в сторону QString to ASCII  или QbyteArray  - и уже там анализировать и фильтровать спец символы...  Потому что QString  - это двухбайтовые символы, так ?
Записан
kostya2vntu
Гость
« Ответ #27 : Июль 09, 2012, 23:41 »

Все так любят regexp'ы...
Можно ведь и без них обойтись, просто пройтись по строке и оставить только нужные символы.
P.S. Это так, на крайний случай.
Записан
Bepec
Гость
« Ответ #28 : Июль 10, 2012, 07:23 »

РегЭкспы универсальны, но избыточны. Иногда проще свою функцию написать, как заметил Константин Улыбающийся
Записан
oath
Гость
« Ответ #29 : Июль 28, 2012, 17:15 »

Зря кстати отказались от управления по  snmp
Тем более net-snmp нормально работает с qt

вопрос на засыпку что проще в плане реализации
Выключение 5 порта и запись конфигурации

 по телнету

Цитировать
telnet 10.200.1.3
Trying 10.200.1.3...
Connected to 10.200.1.3.
Escape character is '^]'.

User name: admin

Password: *******
Copyright (c) 1994 - 2009 ZyXEL Communications Corp.
sw_15_31# configure
sw_15_31(config)# interface port-channel 5
sw_15_31(config-interface)# inactive
sw_15_31(config-interface)# exit
sw_15_31(config)# exit
sw_15_31# write memory
sw_15_31# exit
Connection closed by foreign host
или
тоже самое но через snmp

Цитировать
[root@s2 oath]# snmpset  -O a -c 1234567890 -v 2c 10.200.1.3  1.3.6.1.2.1.2.2.1.7.5 i 2
IF-MIB::ifAdminStatus.5 = INTEGER: down(2)
[root@s2 oath]# snmpset  -O a -c 1234567890 -v 2c 10.200.1.3 1.3.6.1.4.1.890.1.5.8.18.9.1.0 i 1



По протоколу snmp устройство отдает ответ , если значение совпадает с тем что отправляли , значит все ок.


Цитировать
Самое важное - по snmp не все можно настроить.
По snmp, из того с чем сталкивался  в zyxel,нельзя сменить только пароль.

Что конкретно не получилось у Вас настроить в них по snmp?
« Последнее редактирование: Июль 28, 2012, 18:37 от oath » Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.105 секунд. Запросов: 21.