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

Ваш аккаунт

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

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

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

WinSNMP SNMPAPI_OTHER_ERROR при отправке snmp trap

63K
07 октября 2010 года
zloybenx1
1 / / 07.10.2010
Доброе время суток, у меня такая проблема:
приложение должно отвечать на snmp v1 запросы и отправлять snmp trap пакеты.
Msdn http://msdn.microsoft.com/en-us/library/aa379364(v=VS.85).aspx
Посылка get,set,response работает нормально. К сожалению там не описано как правильно сформировать PDU для трапа. Делаю как для обычного пакета, только typePDU ставлю SNMP_PDU_TRAP(0x7). И естественно получаю SNMPAPI_OTHER_ERROR от SnmpSendMsg.
кусоче кода:
Код:
smiOID tOID;
        smiVALUE tSmiVal;

        st = SnmpStrToOid(
        "1.3.6.1.2.1.4.5.6",
        &tOID
        );
        if(se == SNMPAPI_FAILURE){MemoLog->Lines->Add("SnmpStrToOid Error");return;}

        tSmiVal.syntax = SNMP_SYNTAX_INT;
        tSmiVal.value.sNumber = 1;

        HSNMP_VBL tVarlist;
        tVarlist = SnmpCreateVbl(
        se,
        &tOID,
        &tSmiVal
        );
        if(tVarlist == SNMPAPI_FAILURE){MemoLog->Lines->Add("SnmpCreateVbl Error");return;}

        HSNMP_PDU tPDU = SnmpCreatePdu(
        se,
        SNMP_PDU_TRAP,
        0,
        NULL,
        NULL,
        tVarlist
        );
        if(tPDU == SNMPAPI_FAILURE){MemoLog->Lines->Add("SnmpCreatePdu Error");return;}

        HSNMP_ENTITY tEsrc = SnmpStrToEntity(
        se,
        "0.0.0.0"//Edit1->Text.c_str()
        );
        if(tEsrc == SNMPAPI_FAILURE){MemoLog->Lines->Add("SnmpStrToEntity Error");return;}

        HSNMP_ENTITY tEdst = SnmpStrToEntity(
        se,
        Edit2->Text.c_str()
        );
        if(tEdst == SNMPAPI_FAILURE){MemoLog->Lines->Add("SnmpStrToEntity Error");return;}

        char* tPassStr = "public";
        smiOCTETS tPass;
        tPass.len = 6;
        tPass.ptr = tPassStr;
        HSNMP_CONTEXT tCon = SnmpStrToContext(
        se,
        &tPass
        );
        if(tCon == SNMPAPI_FAILURE){MemoLog->Lines->Add("SnmpStrToContext Error");return;}


        st = SnmpSendMsg(
        se,
        tEsrc,
        tEdst,
        tCon,
        tPDU
        );
        if(st == SNMPAPI_SUCCESS){MemoLog->Lines->Add("SnmpSendMsg OK");}
        else
        {
                st = SnmpGetLastError(se);
                switch(st)
                {
                        case SNMPAPI_NOT_INITIALIZED : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_NOT_INITIALIZED");break;
                        case SNMPAPI_ALLOC_ERROR : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_ALLOC_ERROR");break;
                        case SNMPAPI_SESSION_INVALID : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_SESSION_INVALID");break;
                        case SNMPAPI_ENTITY_INVALID : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_ENTITY_INVALID");break;
                        case SNMPAPI_CONTEXT_INVALID : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_CONTEXT_INVALID");break;
                        case SNMPAPI_PDU_INVALID : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_PDU_INVALID");break;
                        case SNMPAPI_OPERATION_INVALID : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_OPERATION_INVALID");break;
                        case SNMPAPI_TL_NOT_INITIALIZED : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_NOT_INITIALIZED");break;
                        case SNMPAPI_TL_NOT_SUPPORTED : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_NOT_SUPPORTED");break;
                        case SNMPAPI_TL_NOT_AVAILABLE : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_NOT_AVAILABLE");break;
                        case SNMPAPI_TL_RESOURCE_ERROR : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_RESOURCE_ERROR");break;
                        case SNMPAPI_TL_SRC_INVALID : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_SRC_INVALID");break;
                        case SNMPAPI_TL_INVALID_PARAM : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_INVALID_PARAM");break;
                        case SNMPAPI_TL_PDU_TOO_BIG : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_PDU_TOO_BIG");break;
                        case SNMPAPI_TL_OTHER : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_TL_OTHER");break;
                        case SNMPAPI_OTHER_ERROR : MemoLog->Lines->Add("SnmpSendMsg SNMPAPI_OTHER_ERROR");
                }
        }


        st = SnmpFreeVbl(
        tVarlist
        );
        if(tVarlist == SNMPAPI_FAILURE){MemoLog->Lines->Add("SnmpFreeVbl Error");return;}


просьба если кто знает как отправить snmp trap через winsnmp отписаться

ps службу snmp c диска с виндой установил
11K
19 июня 2013 года
sergsh
2 / / 05.09.2005
Давний вопрос, но все-же.
В самом начале кода ошибка: st = SnmpStrToOid(...
а дальше везде проверяется и подставляется se.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог