Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с SnmpRecvMsg

41K
16 октября 2008 года
phantomka
8 / / 22.09.2008
Здравствуйте!
У меня большая проблема. Нужно сделать SNMP-менеджер. Пишу на Visual C++, для решения задачи использую стандартные функции из winsnmp.h Если у кого-нибудь возникали похожие проблемы, поделитесь опытом, пожалуйста. А проблема заключается в следующем: функция SnmpSendMsg вполне успешно выполняется, но не вызывается callback функция, а если попробовать напрямую вызвать SnmpRecvMsg, то при ее выполнении возникает ошибка (hRecv = SNMPAPI_FAILURE)
Может быть, я что-то неправильно делаю?
Заранее большое спасибо :)

Код:
SNMPAPI_STATUS lStat;
    char* LocalAddr = "10.151.97.39";
    char* AgentAddr = "10.151.96.206";

    unsigned long major = 2;
    unsigned long minor = 0;
    unsigned long level = 2;
    unsigned long translate = SNMPAPI_UNTRANSLATED_V1;
    unsigned long retran = SNMPAPI_ON;

   
    lStat = SnmpStartup(&major, &minor, &level, &translate, &retran);
    if(lStat != SNMPAPI_SUCCESS)
    {
        printf("SNMP Initialize error\n");
        return 0;
    }
    else
        printf("SNMP has been initialized\n");

    SnmpSetTranslateMode(SNMPAPI_UNTRANSLATED_V1);
    SnmpSetRetransmitMode(SNMPAPI_ON);

   
    HSNMP_SESSION hSession;

    SNMPAPI_CALLBACK CallBack = &Snmp_CallBack_Func;

    hSession = SnmpCreateSession(NULL,0,CallBack,NULL);
    if(hSession == SNMPAPI_FAILURE)
    {
        printf("Create Session error\n");
        return 0;
    }
    else
        printf("SNMP session has been created\n\n");

.
    HSNMP_ENTITY LocalEntity;
    HSNMP_ENTITY AgentEntity;
    LocalEntity = SnmpStrToEntity(hSession, LocalAddr);
    if(LocalEntity == SNMPAPI_FAILURE)
    {
        printf("Entiy local error\n");
        SnmpGetLastError(hSession);
        return 0;
    }

    AgentEntity = SnmpStrToEntity(hSession, AgentAddr);

    if(AgentEntity == SNMPAPI_FAILURE)
    {
        printf("Entiy local error\n");
        SnmpGetLastError(hSession);
        return 0;
    }

    smiOID oid;
    lStat = SnmpStrToOid("1.3.6.1.2.1.1.1.0",&oid);

    if(lStat == SNMPAPI_FAILURE)
    {
        printf("OID error\n");
        SnmpGetLastError(hSession);
        return 0;
    }


    smiVALUE lVal;
    smiOCTETS lOct;
    char* _SysDescr = "SysDescr";
    int length = strlen(_SysDescr);
    //HSNMP_ENTITY _Name = SnmpStrToEntity(hSession,_SysDescr);
    unsigned char c1[8];
    for(int i = 0; i < length; i ++)
        c1 = (unsigned char)(_SysDescr);
    lOct.len = length;
    lOct.ptr = c1;
    lVal.syntax = SNMP_SYNTAX_OCTETS;  
    lVal.value.string = lOct;

    HSNMP_VBL lVbl;
    lVbl = SnmpCreateVbl(hSession,&oid,&lVal);

    if(lVbl == SNMPAPI_FAILURE)
    {
        printf("Creating varbindlist structure error\n");
        SnmpGetLastError(hSession);
        return 0;
    }

    HSNMP_PDU lPDU = SnmpCreatePdu(hSession, SNMP_PDU_GET, 0, 0, 0, lVbl);

//Community
    smiOCTETS lContext;
    char* cont = "public";
    lContext.len = strlen(cont);
    lContext.ptr = (smiLPBYTE)(cont);
    HSNMP_CONTEXT hContext = SnmpStrToContext(hSession, &lContext);
    if(hContext == SNMPAPI_FAILURE)
    {
        printf("Context errror");
        SnmpGetLastError(hSession);
        return 0;
    }

    SNMPAPI_STATUS hSend = SnmpSendMsg(hSession, LocalEntity, AgentEntity, hContext, lPDU);
    if(hSend == SNMPAPI_FAILURE)
    {
        printf("Send error");
        SnmpGetLastError(hSession);
        return 0;
    }

    SNMPAPI_STATUS hRecv = SnmpRecvMsg(hSession, &AgentEntity, &LocalEntity, &hContext, &lPDU);

    if(hRecv == SNMPAPI_FAILURE)
    {
        printf("Can't recieve\n");
    }
//сдесь hRecv равно 0. т.е. сообщение не может быть получено, следовательно, устройство мне его не отправляет?

    SnmpFreeContext(hContext);
    SnmpFreePdu(lPDU);
    SnmpFreeVbl(lVbl);
    SnmpClose(hSession);
    printf("Session is closed\n");
    SnmpCleanup();
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог