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

SNMP GetLastError() 40 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
zverek34
0 / 0 / 0
Регистрация: 19.05.2012
Сообщений: 6
19.05.2012, 13:51     SNMP GetLastError() 40 #1
В универе дали задание написать программу мониторинга сети по протоколу 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 проф.
В чем может быть проблема этой ошибке?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2012, 13:51     SNMP GetLastError() 40
Посмотрите здесь:

GetLastError Visual C++
C++ WinAPI Отлов ошибок. GetLastError()
Вопрос по GetLastError C++
Самомодификация. GetLastError() = 299 C++ WinAPI
работа с SNMP (Simlpe network menegement protocol) C++
Как пользоваться GetLastError() ? C++ WinAPI
Релиз консольной программы с SNMP запросами - найти ошибку в коде C++
Описание стандартных библиотек C++ для работы с SNMP v1 C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 17:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru