Russian Qt Forum

Qt => Работа с сетью => Тема начата: white_crow от Июнь 29, 2012, 11:56



Название: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 11:56
Доброго времени суток.
Начал изучать qt для себя.
Я одмин в сетке. Есть сотни однотипных свичей.
Сейчас я их настраиваю вручную (каждый по очереди через командную строку (CLI)).
Там сотни параметров и фишек.
Если нужно поменять что-то однотипное - было бы неплохо задать "шаблон" и послать на все свичи.

свичи можно настраивать через следующие протоколы telnet, ssh, snmp, http.

Вот хочу написать прогу сам себе.
(уже написал свое первое приложение - IP калькулятор простенький)
Посоветуйте - какой протокол управления мне выбрать (в контексте Qt) ?
Критерии следующие:
- простота реализации
- безопасность в данном случае не волнует (т.е. ssh не  обязательно (хотя только он не передает все данные в открытом виде по сети, включая пароль)).
(если кому интересно - почему не волнует безопасность  - потому что даже зная пароль от свича - юзеры не могут поулчить доступ к нему - потому что на свчие настроен отдельный VLAN управления, и задан список IP адресов, с которых разрешен вход в управление - (в списке тока мой IP адрес,  а сменить адреса юзеры себе не могут - тоже одна из фич свича...))


Через web и snmp  - не все параметры коммутатора можно изменить.
К тому же snmp - не имеет подтверждение выполнения (хотя можно просто еще раз считать данные из свчиа и если парметр уже новый - значит команда прошла удачно).
И изучать проприетарные mib  к свичам - тоже не охота.
Склоняюсь к телнету - так как формат команд мне уже привычен и знаком.
и протокол очень простой.
И можно проанализировать результат выполнения команд.
Подскажите куда рыть по поводу Qt+ телнет.
И еще я так понимаю - мне нужно писать прогу - чтобы она параллельно слала указанный набор команд на все свичи из списка, иначе последовательно это будет очень долго.
Нужно создавать потоки? Или запускать копии, например консольных приложений, которые  в фоне по телнету делают свою работу параллельно, приняв нужные параметры? А GUI только для "обвязки" и удобства выбора списка свичей и профилей конфигов для свичей?


Название: Re: написать прогу управления "умными свичами"
Отправлено: Bepec от Июнь 29, 2012, 12:01
Насколько я тебя понимаю - тебе нужно просто послать дофига дофига команд на сотни ip адресов :) Хоть в протоколах не силён (разве только в своих силён аки бык), скажу - выбирай что тебе больше подходит из протоколов и изучай. http, telnet самые простые. далее snmp и последним ssh.


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 12:02
Да . именно так.
выбрал telnet : )
Толкните дальше, я уже много форумов почитал, погуглил, факи и доки почитал - в голове каша....
нужен волшебный пинок...: )

И вот по-поводу этого прокомментируйте

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


Название: Re: написать прогу управления "умными свичами"
Отправлено: alexis031182 от Июнь 29, 2012, 12:05
Сделайте просто GUI-фронтэнд к консоли. Во-первых, это будет быстрее. Во-вторых, у Вас будет возможность использовать любой из протоколов, иначе, если писать их поддержку самому, уж очень много времени уйдёт.


Название: Re: написать прогу управления "умными свичами"
Отправлено: alexis031182 от Июнь 29, 2012, 12:06
И еще я так понимаю - мне нужно писать прогу - чтобы она параллельно слала указанный набор команд на все свичи из списка, иначе последовательно это будет очень долго.
Нужно создавать потоки? Или запускать копии, например консольных приложений, которые  в фоне по телнету делают свою работу параллельно, приняв нужные параметры? А GUI только для "обвязки" и удобства выбора списка свичей и профилей конфигов для свичей?
GUI-фронтэнд к консоли + QProcess.


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 12:12
Ага. значит с консолью и фронтендом я правильно мыслил.
Но тогда вроде как многопоточность особо не нужна.
В том смысле, что -  через фронтенд будет запускаться бэкенд (консольное приложение , которая приняв параметры (адрес свича и команды)) - уходит в фон и выполянется,  а фронтенд вызывает следующую копию консольного приложения уже с другими параметрами из списка. т.е.  тут не нужно ждать выполения бэкенда, а значит нечего распараллеливать с помощью QProcess.
Так ?

P.S. кстати, консольная софтинка у меня уже написана - на bash + expect  = принимает параметры из командной строки и по телнету отсылает команды на свичи.
Я бы и дальше так и работал - но хочу скинуть с себя на сотрудников с меньшими правами доступа и знаниями (чтобы им не тупить в консоли "линагза", чтобы не давать доступ, чтобы не видели в совсем уж явно пароли). Вот почему захотелось гуи. Но, судя по всему - мне совсем не много придется писать - чтобы "подцепить" готовый бэкенд...


Название: Re: написать прогу управления "умными свичами"
Отправлено: Bepec от Июнь 29, 2012, 12:16
Да, если нужен самый простой работающий вариант.

Нет, если нужна ещё и система контролирующая, скажем так, узлы. Мониторящая параметры и прочее :D


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 12:19
Для мониторинга давно юзается готовая штука   - zabbix называется - свободное ПО - для мониторинга сетевых служб и тысячи их параметров состояния, железа и прочее.  Рисует кучу красифых графиков, есть разные события , сигнализация и прочие плюшки....
А мне именно для массового управления однотипным сетевым железом...
Я уже все понял - как проще сделать, только подтвердите мою мысль. что мне тут даже абсолютно не нужна многопоточность (на уровне фронтенда....)
(ибо в фоне можно запустить кучу копий backend приложения...)


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 12:33
А, хотя вот н7юансы возникают:

- если тупо запускать в фоне консольные команды - тогда как контролировать результат выполнения команды.....

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


Название: Re: написать прогу управления "умными свичами"
Отправлено: alexis031182 от Июнь 29, 2012, 12:42
А, хотя вот н7юансы возникают:

- если тупо запускать в фоне консольные команды - тогда как контролировать результат выполнения команды.....
Из QProcess по моему есть возможность получать результат выполнения.

- и если дать прогу с фронтендом какому-нить сотруднику, он ее ставит на винде без настроеного окуржения для бэкенда (который настроен на linux серваке). Либо нужно под венду проработать аналогичный бэкенд и всякий раз его настравиать на разных windows XP (после очередной переустанвоки), либо как-то передавать параметры по сети на сервер, на котором останется бэкенд)...
Ну, а если уж совсем круто делать (долго и на перспективу) - нужно, как и вы и сказали - полностью пилить все в одной софтине....включая и телнет, и анализ ответов, и многопоточность....и профили конфигов (и брать списки свичей из базы) и прочее...  если будет вдохновение - может попробую потиху пилить такую шткуку....(ибо времени появилось свободного достаточно...)
Тогда GUI-фронтэнд, устанавливаемый на win-клиентах может через сокеты (через самописный протокол) посылать команды Console-фронтэнду, устанавливаемому на сервере.


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 12:54
ок, буду пилить пробовать по-тиху.
Спасибо за ответы.


Название: Re: написать прогу управления "умными свичами"
Отправлено: DmitryM от Июнь 29, 2012, 14:13
ИМХО для таких целей лучше Python/Perl, у них куча библиотек для работы с различными протоколами.


Название: Re: написать прогу управления "умными свичами"
Отправлено: alex312 от Июнь 29, 2012, 14:15
....
- если тупо запускать в фоне консольные команды - тогда как контролировать результат выполнения команды.....
....
http://qt-project.org/doc/qt-4.8/qprocess.html#communicating-via-channels


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 14:57
ИМХО для таких целей лучше Python/Perl, у них куча библиотек для работы с различными протоколами.
Ну так или bash, как в моем случае уже сделано... : )
Но ведь речь идет об "морде".
А веб морду к Python/Perl  не охота делать (аллергия на веб интерфейс : )

да и вообще - хочется что-то уж одно изучить....Вот читал долго и выбрал Qt.  Думаю - вполне можно запилить GUI приложение (причем скомпилить на win, linux, MAC).


Название: Re: написать прогу управления "умными свичами"
Отправлено: DmitryM от Июнь 29, 2012, 16:53
А веб морду к Python/Perl  не охота делать (аллергия на веб интерфейс : )
PyQt, а так же Tcl/Tk

Вот читал долго и выбрал Qt.  Думаю - вполне можно запилить GUI приложение (причем скомпилить на win, linux, MAC).
Qt в первую очередь библиотека языка C++, а на C++ вы будете делать долго и мучительно, в первую очередь из-за работы через telnet, ssh, snmp  ;)


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 17:40
я думаю вы преувиличиваете - телнет достаточно простой протокол (как грабли)  - так что реализовать мою задачу на Qt/С++  - это вполне тривиальная задача, не хочу я перл или питон ради этого изучать...
а для ssh и snmp тоже есть свободные либы, что неудивительно. И даже не важно на чем они написаны - хотя есть и на С++.


Название: Re: написать прогу управления "умными свичами"
Отправлено: Bepec от Июнь 29, 2012, 19:14
ДмитрийМ вы ооооООчень сильно преувеличиваете :D На С++ написано гораздо больше по этим протоколам, чем на питоне и иже с ним. Соответсвенно библиотек и примеров в разы больше.
Так что удачи Белому ворону :D


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 20:12
спасибо, удача мне не помешает...


Название: Re: написать прогу управления "умными свичами"
Отправлено: OKTA от Июнь 29, 2012, 20:41
а SNMP уже не канает??
и что за коммутаторы?


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июнь 29, 2012, 21:06
я уже писал про snmp -  реально сложнее, чем телнет - mib нужно изучить, не вполне очевидное дерево параметров и типов - нужно изучать доки с нуля, а команды телнет уже изучены . И в телнете можно ответ анализировать.
Хотя, при желании можно было бы и snmp - c точки зрения уровня сетевой модели - там все тоже просто -  посылается строка с параметрами по UDP и все дела (я смотрел снифером). Просто реально некоторые вещи очень неудобно там делать.
Самое важное - по snmp не все можно настроить.
Коммутаторы Zyxel MES-3528, ES-3124, MES-3712F, GS-4012F, XGS-4728F


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


Название: Re: написать прогу управления "умными свичами"
Отправлено: kostya2vntu от Июль 02, 2012, 17:13
Даже так: http://doc.qt.nokia.com/solutions/4/qttelnet/qttelnet.html


Название: Re: написать прогу управления "умными свичами"
Отправлено: DmitryM от Июль 03, 2012, 11:41
ДмитрийМ вы ооооООчень сильно преувеличиваете :D На С++ написано гораздо больше по этим протоколам, чем на питоне и иже с ним. Соответсвенно библиотек и примеров в разы больше.
Так что удачи Белому ворону :D
Telnetlib (http://docs.python.org/library/telnetlib.html) в составе CPython, так что ничего не надо писать и прикручивать.


Название: Re: написать прогу управления "умными свичами"
Отправлено: Bepec от Июль 03, 2012, 11:42
Дмитрий не путай ) Там такая же библиотечка/дополнение. Таких сотни/тысячи/миллионы для С++ и подключаются одной левой )

Не делай трагедии из писанины и прикручивания :D Она порой даже приятна и полезна.


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июль 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 ?) который очень часто "вылазит"

    }


Название: Re: написать прогу управления "умными свичами"
Отправлено: Bepec от Июль 08, 2012, 19:19
Что сказать - поздравляю с почином.
Насчёт инклуда моков - видимо используемая вами библиотечка их требует. Хотя хз хз.

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

Посмотрите что у вас в вызове stripCR(const QString &msg)  приходит. Если не удаляется, значит надо менять regExp. Темку тогда на форуме создайте, а то это та ещё головная боль :D


Название: Re: написать прогу управления "умными свичами"
Отправлено: white_crow от Июль 08, 2012, 22:25
думаю, нюанс в том, что телнет "работает" с ASCII.  Надо видимо копать в сторону QString to ASCII  или QbyteArray  - и уже там анализировать и фильтровать спец символы...  Потому что QString  - это двухбайтовые символы, так ?


Название: Re: написать прогу управления "умными свичами"
Отправлено: kostya2vntu от Июль 09, 2012, 23:41
Все так любят regexp'ы...
Можно ведь и без них обойтись, просто пройтись по строке и оставить только нужные символы.
P.S. Это так, на крайний случай.


Название: Re: написать прогу управления "умными свичами"
Отправлено: Bepec от Июль 10, 2012, 07:23
РегЭкспы универсальны, но избыточны. Иногда проще свою функцию написать, как заметил Константин :)


Название: Re: написать прогу управления "умными свичами"
Отправлено: oath от Июль 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?


Название: Re: написать прогу управления "умными свичами"
Отправлено: Bepec от Июль 28, 2012, 19:40
Некромант oath, не стоит будить зомби тему :D

PS все протоколы хороши, но выбор уже произошёл :D