Название: Запрос по SNMP в Qt Отправлено: Andrey от Февраль 08, 2013, 09:58 Доброго Всем суток. Есть конкретная задача написать запрос SNMP в поле LineEdit например: "1.3.6.1.2.1.1.1.0". По нажатию кнопки оправить его в порт 161 с определенным IP адресом и получить ответ в поле TextEdit.
Для примера взял образец на Еxample; #include "mainwindow.h" #include "ui_mainwindow.h" #include "QtNetwork" #include<QUdpSocket> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->pushButton_2,SIGNAL(clicked()),SLOT(sbroadcastDatagram())); recive(); } MainWindow::~MainWindow() { delete ui; } QUdpSocket *udpSocket = new QUdpSocket(); void MainWindow :: recive() { connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams())); udpSocket->bind (161,QUdpSocket::ShareAddress); } void MainWindow::sbroadcastDatagram() { QByteArray datagram = "1.3.6.1.2.1.1.1.0"; udpSocket->writeDatagram( datagram, QHostAddress("192.168.0.252"), 161); // Запрос данных версии коммутатора СISCO void MainWindow::processPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(), datagram.size()); ui->textEdit->setText(trUtf8("%1") // ("\"%1\"") .arg(datagram.data())); } } Прослушивая порт 161 пытаюсь поймать ответ в локальной сети. В итоге поле пустое. Если оправляю дейтаграмму на свой хост адрес получаю то что отправил " 1.3.6.1.2.1.1.1.0" Если из командной строки то.... В командной строке Linux ответ на запрос выглядет так: linux-upj2:~ # snmpget -v1 -c public 192.168.0.252 1.3.6.1.2.1.1.1.0 SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, C3750 Software (C3750-IPBASE-M), Version 12.2(35)SE5, RELEASE SOFTWARE (fc1) Copyright (c) 1986-2007 by Cisco Systems, Inc. Compiled Thu 19-Jul-07 19:15 by nachen Подскажите, если это возможно , как написать аналогичный запрос в Qt и получить ответ пусть даже без предварительного преобразования в читабельный код. Название: Re: Запрос по SNMP в Qt Отправлено: Bepec от Февраль 08, 2013, 11:19 У вас задача широкая, оформление отвратное и путанное
Цитировать } Вот эта часть меня пугает.QUdpSocket *udpSocket = new QUdpSocket(); void MainWindow :: recive() Ничем помочь не могу, не понял вашей хотелки на 90%. Название: Re: Запрос по SNMP в Qt Отправлено: alexis031182 от Февраль 08, 2013, 11:29 Не приходилось работать с SNMP, но может быть протокол подразумевает определённый формат запроса? Вы как бы отправляете просто строку по UDP. Этого наверное недостаточно.
Название: Re: Запрос по SNMP в Qt Отправлено: Bepec от Февраль 08, 2013, 11:54 Окинул взглядом - бред.
Вы посылаете по UDP строку. Причём пытаетесь его направить видимо на адрес 192.168.0.252. UDP - широковещательный запрос. Это не TCP/IP. А вам нужен запрос узла 192.168.0.252 с нужными параметрами. smnp это не тупо строку отправить, там форматы вызовов есть, насколько я помню. Проще выражаясь - ищите книги и пособия по smnp и читайте. Название: Re: Запрос по SNMP в Qt Отправлено: Andrey от Февраль 08, 2013, 12:11 Спасибо всем. Наверное у меня еще плохо получается. Я так полагаю ,что инструментов в QT напрямую работать по SNMP нет. И придется наверное копать дальше.
Название: Re: Запрос по SNMP в Qt Отправлено: kuzulis от Февраль 08, 2013, 12:14 Цитировать Спасибо всем. Наверное у меня еще плохо получается. Я так полагаю ,что инструментов в QT напрямую работать по SNMP нет. И придется наверное копать дальше. [сарказм] Ой, а я вот хочу чтобы в Qt были инструменты для работы с ModBus, IEC101-104, DNP3, ProfiBus и пр. Ах, какая-же плохая Qt раз в ней этого нет. И придется наверное копать дальше. [/сарказм] Название: Re: Запрос по SNMP в Qt Отправлено: Andrey от Февраль 08, 2013, 12:22 Я не сказал, что Qt плохой набор библиотек. Наоборот мне кажеться ,что это одно из лучших средст для написания программ. В данном случае здесь понадобятся более глубокие знание по Qt чем они есть у меня.
Я брал кусок кода из программ примеров для Qt. там дейтаграмма оправлялась конкретному адресу IP и порта. Поэтому прочитав MIB для коммутатора попробовал послать строку запроса. Но видимо этого действительно мало. |