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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запрос по SNMP в Qt  (Прочитано 5390 раз)
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 и получить ответ пусть даже без предварительного преобразования в читабельный код.

Записан
Bepec
Гость
« Ответ #1 : Февраль 08, 2013, 11:19 »

У вас задача широкая, оформление отвратное и путанное

Цитировать
}

QUdpSocket    *udpSocket = new QUdpSocket();
void MainWindow :: recive()
Вот эта часть меня пугает.

Ничем помочь не могу, не понял вашей хотелки на 90%.
Записан
alexis031182
Гость
« Ответ #2 : Февраль 08, 2013, 11:29 »

Не приходилось работать с SNMP, но может быть протокол подразумевает определённый формат запроса? Вы как бы отправляете просто строку по UDP. Этого наверное недостаточно.
Записан
Bepec
Гость
« Ответ #3 : Февраль 08, 2013, 11:54 »

Окинул взглядом - бред.

Вы посылаете по UDP строку. Причём пытаетесь его направить видимо на адрес 192.168.0.252.

UDP - широковещательный запрос. Это не TCP/IP. А вам нужен запрос узла 192.168.0.252 с нужными параметрами.

smnp это не тупо строку отправить, там форматы вызовов есть, насколько я помню.

Проще выражаясь - ищите книги и пособия по smnp и читайте.
Записан
Andrey
Гость
« Ответ #4 : Февраль 08, 2013, 12:11 »

Спасибо всем. Наверное у меня еще плохо получается. Я так полагаю ,что инструментов в QT  напрямую работать по SNMP нет.  И придется наверное копать дальше.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Февраль 08, 2013, 12:14 »

Цитировать
Спасибо всем. Наверное у меня еще плохо получается. Я так полагаю ,что инструментов в QT  напрямую работать по SNMP нет.  И придется наверное копать дальше.

[сарказм]
Ой, а я вот хочу чтобы в Qt были инструменты для работы с ModBus, IEC101-104, DNP3, ProfiBus и пр. Ах, какая-же плохая Qt раз в ней этого нет. И придется наверное копать дальше.
[/сарказм]
Записан

ArchLinux x86_64 / Win10 64 bit
Andrey
Гость
« Ответ #6 : Февраль 08, 2013, 12:22 »

Я не сказал, что Qt  плохой набор библиотек. Наоборот мне кажеться ,что это одно из лучших средст для написания программ. В данном случае здесь понадобятся более глубокие знание по Qt чем они есть у меня.
 Я брал кусок кода из программ примеров для Qt.  там дейтаграмма оправлялась конкретному адресу IP  и порта. Поэтому прочитав MIB для коммутатора попробовал послать строку запроса. Но видимо этого действительно мало.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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