Нужен пример использования SNMP на VS6.0 или VS2003
От: JKC Украина  
Дата: 10.02.06 13:15
Оценка:
Всем здрасте
Нужен простой пример исходника использования SNMP написанный на VS6.0 или VS 2003.
Если кто то поделиться буду очень благодарен.
Секс, джаз, бокс !!!
Re: Нужен пример использования SNMP на VS6.0 или VS2003
От: max779 Россия  
Дата: 13.02.06 09:11
Оценка:
Здравствуйте, JKC, Вы писали:

JKC>Нужен простой пример исходника использования SNMP написанный на VS6.0 или VS 2003.


Пример выводит 10 значений:

#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);
}
Re[2]: Нужен пример использования SNMP на VS6.0 или VS2003
От: JKC Украина  
Дата: 13.02.06 10:37
Оценка:
Здравствуйте, max779, Вы писали:

M>Здравствуйте, JKC, Вы писали:


JKC>>Нужен простой пример исходника использования SNMP написанный на VS6.0 или VS 2003.


M>Пример выводит 10 значений:


Спасибо пример очень хороший, но я забыл сказать что мне нужно получать данные из удалённого устройства по сети,
если что то есть буду очень рад
Секс, джаз, бокс !!!
Re[3]: Нужен пример использования SNMP на VS6.0 или VS2003
От: Vutik  
Дата: 13.02.06 10:47
Оценка:
E:\Program Files\Microsoft SDK\Samples\netds\Snmp\
SDK 2003
Re[3]: Нужен пример использования SNMP на VS6.0 или VS2003
От: max779 Россия  
Дата: 13.02.06 14:11
Оценка:
JKC>Спасибо пример очень хороший, но я забыл сказать что мне нужно получать данные из удалённого устройства по сети,

Ну так изменяем в строке:
SnmpMgrOpen("127.0.0.1", "public", 5000, 0);

IP и community на которые нужно и будет всем счастье. Или что-то другое имелось ввиду?
Re[4]: Нужен пример использования SNMP на VS6.0 или VS2003
От: Аноним  
Дата: 13.02.06 16:12
Оценка:
Здравствуйте, max779, Вы писали:

JKC>>Спасибо пример очень хороший, но я забыл сказать что мне нужно получать данные из удалённого устройства по сети,


M>Ну так изменяем в строке:

M>SnmpMgrOpen("127.0.0.1", "public", 5000, 0);

M>IP и community на которые нужно и будет всем счастье. Или что-то другое имелось ввиду?


Да пробовал конечно менять IP ,
но выводит следующее
OID=.1.3.6.1.2.1.4.0.0.0.0.0.0.0.0.0.0.0.0.0, Undeclared type!!
Re[5]: Нужен пример использования SNMP на VS6.0 или VS2003
От: max779 Россия  
Дата: 14.02.06 08:42
Оценка:
А>Да пробовал конечно менять IP ,
А>но выводит следующее
А>OID=.1.3.6.1.2.1.4.0.0.0.0.0.0.0.0.0.0.0.0.0, Undeclared type!!

А пробовал заменить строку:
UINT oid[20] = {1, 3, 6, 1, 2, 1, 4};


Например на это:
UINT oid[20] = {1};


И попробуй под дебагером хоть посмотри, что происходит, что возвращает.
Re[6]: Нужен пример использования SNMP на VS6.0 или VS2003
От: JKC Украина  
Дата: 14.02.06 09:44
Оценка:
Здравствуйте, max779, Вы писали:

M>А пробовал заменить строку:

M>
M>UINT oid[20] = {1, 3, 6, 1, 2, 1, 4};
M>


M>Например на это:

M>
M>UINT oid[20] = {1};
M>


M>И попробуй под дебагером хоть посмотри, что происходит, что возвращает.



Большое спасибо вы мне очень помогли, всё работало и в прежнем виде, просто выход на тот IP был закрыт.
Секс, джаз, бокс !!!
Re[2]: Нужен пример использования SNMP на VS6.0 или VS2003
От: RMikola  
Дата: 29.04.06 08:52
Оценка:
Здравствуйте, max779, Вы писали:

M>Здравствуйте, JKC, Вы писали:


JKC>>Нужен простой пример исходника использования SNMP написанный на VS6.0 или VS 2003.


M>Пример выводит 10 значений:


/////................

Откопмилировал код, запускается (правда не было одного заголовочного файла CmnHdr.h, пришлось написать вот так:
//#include "CmnHdr.h"
#define chDIMOF(Array) (sizeof(Array) / sizeof(Array[0])) — именно его не хватало...)

Все вроде ок, но какой бы OID я не поставил пишет све одно
OID=.1.3.6.1.2.1.4.0.0.0.0.0.0.0.0.0.0.0.0.0, Undeclared type!!

В чем может быть трабла, я уже обыскался, ничего не нашел! Помогите, пожалуйста!....
Re[3]: Нужен пример использования SNMP на VS6.0 или VS2003
От: max779 Россия  
Дата: 02.05.06 11:36
Оценка:
RM>Все вроде ок, но какой бы OID я не поставил пишет све одно
RM> OID=.1.3.6.1.2.1.4.0.0.0.0.0.0.0.0.0.0.0.0.0, Undeclared type!!

RM>В чем может быть трабла, я уже обыскался, ничего не нашел! Помогите, пожалуйста!....


Какой-то странный OID выводится... Может что-то не то возвращает сервер? Надо смотреть под отладчиком.
А то, что тип неопределен, так определите его в switch. Там, например, нет типа ASN_COUNTER64 и еще некоторых...
Re[4]: Нужен пример использования SNMP на VS6.0 или VS2003
От: RMikola  
Дата: 13.05.06 00:40
Оценка:
Здравствуйте, max779, Вы писали:

RM>>Все вроде ок, но какой бы OID я не поставил пишет све одно

RM>> OID=.1.3.6.1.2.1.4.0.0.0.0.0.0.0.0.0.0.0.0.0, Undeclared type!!

RM>>В чем может быть трабла, я уже обыскался, ничего не нашел! Помогите, пожалуйста!....


M>Какой-то странный OID выводится... Может что-то не то возвращает сервер? Надо смотреть под отладчиком.

M>А то, что тип неопределен, так определите его в switch. Там, например, нет типа ASN_COUNTER64 и еще некоторых...

У меня возникает чувство, после долгих мытарств, что просто не работает SNMP, может, в винде нужно сначала какой компонент установить или службу запустить специальную? Потому как пробовал компилить пример из MSDN, то же самое получается...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.