Помогите с SNMP в C++?

Я пытаюсь написать простую программу, используя WinSnmp на С++. Информации по этому поводу очень мало, и я в полной растерянности. Все, что я хочу сделать, это запросить принтеры в моей сети и прочитать информацию, отправленную мне. Вот мой код:

#include <WinSnmp.h>
#include <stdio.h>

smiLPUINT32 majorVers;
smiLPUINT32 minorVers;
smiLPUINT32 nLevel;
smiLPUINT32 translateMode;
smiLPUINT32 retranslateMode;

BYTE pdu;


int main()
{
    //Starting the snmp session
    SnmpStartup(majorVers, minorVers, nLevel, translateMode, retranslateMode);

    printf("%i majorVers \n %i minorVers \n "
           "%i nLevel \n "
           "%i translateMode \n "
           "%i retranslateMode \n\n", 
           majorVers, minorVers, nLevel, translateMode, retranslateMode);


    SnmpCleanup();
}

Я использую API. пока что пытаюсь понять, как должна быть устроена программа, но сложно написать программу, полностью основанную на API.

Я не могу найти в Интернете хороших руководств, примеров кода или полезной документации. Мне было интересно, если бы кто-нибудь знал что-нибудь, что могло бы привести меня в правильном направлении, например, фрагменты рабочего кода или полезные учебные пособия, это было бы здорово. Заранее спасибо :)

РЕДАКТИРОВАТЬ: я немного продвинулся, но я все еще застрял. Я пытаюсь выяснить значение окна консоли, чтобы передать его функции SnmpCreateSession, но у меня возникли проблемы. вот мой обновленный код:

#include <WinSnmp.h>
#include <stdio.h>
#define MY_BUFSIZE 1024 // Buffer size for console window titles.

smiLPUINT32 majorVers;
smiLPUINT32 minorVers;
smiLPUINT32 nLevel;
smiLPUINT32 translateMode;
smiLPUINT32 retranslateMode;

HWND window;
HWND hwndFound;

char* returnInfo;
char newWindowTitle[MY_BUFSIZE];
char oldWindowTitle[MY_BUFSIZE];

LPWSTR consoleTitle;
BYTE pdu = 1;

void Startup(){

    //Starting the snmp session
    SnmpStartup(majorVers, minorVers, nLevel, translateMode, retranslateMode);

    printf("%i majorVers \n"
           "%i minorVers \n"
           "%i nLevel \n"
           "%i translateMode \n"
           "%i retranslateMode \n\n", 
            majorVers, minorVers, nLevel, translateMode, retranslateMode);

    GetConsoleTitle(oldWindowTitle, MY_BUFSIZE);
    hwndFound = FindWindow(NULL, oldWindowTitle);

}

void CreateSession(){

    SnmpCreateSession(window,5,0,0);
    printf("create session returns: %s", SnmpCreateSession(window,5,0,0));

}

int main(){

    Startup();
    CreateSession();
    SnmpCleanup();
}

Все значения, которые я получаю, на данный момент равны NULL... Я не знаю, что делать дальше.


person Ashton    schedule 11.07.2011    source источник
comment
Это больше похоже на код C. Вы даже используете заголовок, который устарел в C++.   -  person Lightness Races in Orbit    schedule 12.07.2011
comment
Можно ли вызывать SnmpCreateSession дважды для одного и того же окна?   -  person RedX    schedule 12.07.2011
comment
Я чувствую разочарование ОП. Windows SNMP имеет так много проблем с документацией.   -  person EhevuTov    schedule 24.04.2013


Ответы (2)


Для параметров out, таких как SnmpStartup, передайте адрес UINT32, который получит значения:

smiUINT32 majorVers;
smiUINT32 minorVers;
smiUINT32 nLevel;
smiUINT32 translateMode;
smiUINT32 retranslateMode;

SnmpStartup(&majorVers, &minorVers, &nLevel, &translateMode, &retranslateMode);

Может быть больше ошибок, но это может привести к тому, что вы пройдете первую базу.

person Roddy    schedule 12.07.2011
comment
Спасибо! Мне пришлось привести каждый параметр к типу (smiLPUINT32), чтобы заставить его скомпилироваться, но теперь все значения возвращаются успешно. - person Ashton; 12.07.2011
comment
@ Эштон - а. использование smiUINT32 должно избавиться от приведения типов. Обновлен фрагмент кода... - person Roddy; 12.07.2011
comment
@Ashton - Может быть, прочитать книги, которые предлагает @yms? SNMP — это темная и ужасная область, и эти ссылки выглядят так же хорошо, как и все остальное. - person Roddy; 12.07.2011
comment
Я скачал и просмотрел их оба. Если бы я делал карьеру на SNMP, то они были бы идеальными; много информации высокого уровня и принципов дизайна, очень хорошо осведомленных и всеобъемлющих. Но это демонстрационный проект, который попросил мой босс, чтобы посмотреть, возможна ли более масштабная реализация в нашем продукте. Так что 800 страниц информации сейчас немного выходят за рамки моих возможностей... Но спасибо вам, Родди и @yms !!! Я действительно ценю твою помощь. - person Ashton; 12.07.2011
comment
@Ashton Может быть, вам следует скачать и взглянуть на примеры проектов, которые я указал для первой книги, они могут помочь вам начать работу, не читая 800 страниц. - person yms; 12.07.2011

Несколько лет назад мне пришлось сделать модуль SNMP для приложения Windows, и из-за отсутствия документации и онлайн-ресурсов я купил следующие книги:

person yms    schedule 11.07.2011