Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
zverek34
0 / 0 / 0
Регистрация: 19.05.2012
Сообщений: 6
#1

SNMP GetLastError() 40 - C++

19.05.2012, 13:51. Просмотров 1097. Ответов 0
Метки нет (Все метки)

В универе дали задание написать программу мониторинга сети по протоколу SNMP. Решил найти сначала какие есть примеры, нашел не много. Но при запуске этих примеров возникает одна и таже ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "CmnHdr.h"
#include <Mgmtapi.h>
#include <SNMP.h>
#include <iostream>
using namespace std;
 
#pragma comment(lib, "Snmpapi.lib")
#pragma comment(lib, "Mgmtapi.lib")
 
void ShowOID(UINT *oid, int len)
{
    for (int i = 0; i < len; i++)
        cout << '.' << oid[i];
}
void ShowIP(BYTE *IP)
{
    for (int i = 0; i < 3; i++)
        cout << (int) IP[i] << '.';
    cout << (int) IP[i];
}
 
int main()
{
    LPSNMP_MGR_SESSION psnmp = SnmpMgrOpen("127.0.0.1", "public", 5000, 0);
    if (!psnmp)
        return (1);
    SnmpVarBind vid = {0};
    UINT oid[20] = {1, 3, 6, 1, 2, 1, 4};
    vid.name.ids = oid;
    vid.name.idLength = chDIMOF(oid);
    vid.value.asnType = ASN_NULL;
    SnmpVarBind var;
    SnmpUtilVarBindCpy(&var, &vid);
    SnmpVarBindList varList;
    varList.len = 1;
    varList.list = &var;
 
    AsnInteger errStat = SNMP_ERRORSTATUS_NOERROR;
    AsnInteger errIndex = 0;
    SNMPAPI snmpErr = 1;
    char *str;
    for (int i = 0;snmpErr && (errStat == SNMP_ERRORSTATUS_NOERROR) && (i < 10); i++)
    {
        snmpErr = SnmpMgrRequest(psnmp, SNMP_PDU_GETNEXT, &varList, &errStat, &errIndex);
        cout << "OID=";
        ShowOID(varList.list->name.ids, varList.list->name.idLength);
        cout << ", ";
        switch (varList.list->value.asnType)
        {
        case ASN_INTEGER:
        case ASN_UNSIGNED32:
        case ASN_COUNTER32:
        case ASN_GAUGE32:
            cout << "Integer=" << varList.list->value.asnValue.number << endl;
            break;
        case ASN_OCTETSTRING:
        case ASN_IPADDRESS:
            if (varList.list->value.asnType == ASN_OCTETSTRING)
            {
                str = (char*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
                    varList.list->value.asnValue.string.length + 1);
                CopyMemory(str, varList.list->value.asnValue.string.stream, varList.list->value.asnValue.string.length);
                cout << "String=" << str << endl;
                HeapFree(GetProcessHeap(), 0, str);
            }
            else if (varList.list->value.asnType == ASN_IPADDRESS)
            {
                cout << "IP=";
                ShowIP(varList.list->value.asnValue.address.stream);
                cout << endl;
            }
            if (varList.list->value.asnValue.string.dynamic)
                SnmpUtilMemFree(varList.list->value.asnValue.string.stream);
            break;
        case ASN_OBJECTIDENTIFIER:
            cout << "OID=";
            ShowOID(varList.list->value.asnValue.object.ids, varList.list->value.asnValue.object.idLength);
            cout << endl;
            break;
        case ASN_TIMETICKS:
            cout << "Ticks=" << varList.list->value.asnValue.ticks << endl;
            break;
        default:
            cout << "Undeclared type!!!" << endl;
        }
        SnmpUtilVarBindFree(&var);
        SnmpUtilVarBindCpy(&var, varList.list);
        varList.len = 1;
        varList.list = &var;
    }
    SnmpUtilVarBindFree(&var);
    SnmpMgrClose(psnmp);
    return (0);
}
Пример кода взят тут: http://www.rsdn.ru/forum/network/1672323.flat.aspx
так же пробывал пример кода отсюда: c/c++ использование snmp

Функция SnmpMgrOpen отрабатывает без ошибок, а вот функция запроса SnmpMgrRequest всегда завершается с ошибкой. GetLastError() возвращает ошибку 40.
Протокол SNMP настроен как тут написано: http://support.microsoft.com/kb/324263/ru
Пробовал на двух разных компах. На одном стоит Windows 7 Startup, на другом Windows 7 проф.
В чем может быть проблема этой ошибке?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2012, 13:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SNMP GetLastError() 40 (C++):

Вопрос по GetLastError - C++
Кто поможет советом? Создаю обычную консольку, в ней пытаюсь функцией CreateFile открыть Com порт (заведомо не существующий), по идеи...

New MyClass & GetLastError - C++
подскажите, допустим, закончилась память и при выделении для объекта myclass = new MyClass myclass будет содержать NULL, а что будет...

Не получается открыть семафор. GetLastError 5 - C++
Пишу программу Парикмахерская. Она подразумевает использование семафоров. Первые 4 семафора создаются в первой программе, и открываются во...

Описание стандартных библиотек C++ для работы с SNMP v1 - C++
Всем доброго дня. Озадачили меня соединить мои демоны под linux-ом с контроллером через SNMP. Полез искать стандартные библиотеки и...

работа с SNMP (Simlpe network menegement protocol) - C++
SNMP Ребята может кто работал с этим протоколом подскажите как его обрабатывать в Borland или подкинте примеры по работе с SNMP а то...

Релиз консольной программы с SNMP запросами - найти ошибку в коде - C++
Привет всем! Я написал программку, которая опрашивает некоторые устройства используя запросы по протоколу SNMP. Программа отлично...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 13:51
Привет! Вот еще темы с ответами:

GetLastError - Visual C++
А как иожно сделать так, чтобы при вызове этой функции возвращалась пользовательская ошибка. Т.е. я хочу написать функцию, которая читает...

Отлов ошибок. GetLastError() - C++ WinAPI
Отлов ошибок, ошибка регистрации окна, ошибка создания окна, ошибка создания дочернего окна. Может кому пригодится.. #include...

Самомодификация. GetLastError() = 299 - C++ WinAPI
Решил потренироваться и изучить самомодификацию. Написал код: int _tmain(int argc, _TCHAR* argv) { unsigned char* AddressFunc =...

Как пользоваться GetLastError() ? - C++ WinAPI
Хотел узнать, как пользоваться этой функцией? Где-то говорят вывести её на экран и посмотреть(не получается...), где-то - через Error...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru