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;}
WinSNMP SNMPAPI_OTHER_ERROR при отправке snmp trap
приложение должно отвечать на 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.
кусоче кода:
Код:
просьба если кто знает как отправить snmp trap через winsnmp отписаться
ps службу snmp c диска с виндой установил
В самом начале кода ошибка: st = SnmpStrToOid(...
а дальше везде проверяется и подставляется se.