本人想做一个管理端的TRAP接收程序,最好用SNMP Manager API实现.因为它的VBL比较好设置.实现步骤较少.当然用WinSNMP API实现也好,只要提供有用的资料(请用WinSNMP API实现的资料尽量详细点,实现的函数SnmpRegister我知道,但不知道步骤),将以高分重谢!!!!
大吓们,救救我
大吓们,救救我
解决方案 »
- 求视频编解码的开源类库,如Mpeg-2的类库
- 想问一下STL分配内存的问题
- 对话框弹不出来
- 介绍一本关于 WINDOWS SOCKET 编程的书籍,重点是介绍管道的,谢谢!
- mfc directshow 静止画面
- 如何获得一个隐藏的窗口的句柄
- 请问哪里有有关VC++界面编程的培训教程(最好是powerpoint),最多可直接给300分重谢!
- 定义了一个字符串宏,有没有办法知道它的长度????
- 有没有类似于W2K Server中的终端服务,的并可以运行在professional中的替代品
- 关于流套接字和数据报套接字?
- 怎样实现下载文件时用进度条显示下载进度?
- 选重clistctrl的checkbox时发送什么消息?
1、接收Trap:只要用SnmpRegister注册后就可以在消息响应函数里用SnmpRecvMsg和SnmpGetPduData提取到Trap消息,根据SnmpGetPduData函数返回的UDP类型判断(如果是SNMP_PDU_TRAP或SNMP_PDU_V1TRAP则是接收到trap消息),然后和一般的snmp消息一样进行处理即可。
2、发送Trap:必须在变量绑定列表的第一个位置绑定(用SnmpCreateVbl函数)1.3.6.1.2.1.1.3.0(即sysUpTime节点),并设定它的值,第二个位置绑定(用SnmpSetVb函数)1.3.6.1.6.3.1.1.4.1.0(即snmpTrapOID节点),并设定它的值为你要发送的trap的MIB编号,举例如下:
smiOID m_enterId;
LPCSTR lpszEntMib ="1.3.6.1.4.1.300.0.1100"; //你自己的trap MIB编号
SnmpStrToOid(lpszEntMib, &m_enterId);
smiOID oid0;
char lp[40]="1.3.6.1.2.1.1.3.0"; //必须设定第一个变量为sysUpTime
smiVALUE tmpValue;
tmpValue.syntax = SNMP_SYNTAX_TIMETICKS;
tmpValue.value.uNumber = 10; // 设定sysUpTime的值
SnmpStrToOid(lp,&oid0);
hVbl=SnmpCreateVbl(hSession, &oid0, &tmpValue);
::SnmpFreeDescriptor(SNMP_SYNTAX_OID, (smiLPOPAQUE)&oid0);
SnmpStrToOid("1.3.6.1.6.3.1.1.4.1.0", &oid0); // 设定第二个变量snmpTrapOID
tmpValue.syntax = SNMP_SYNTAX_OID; // 设定snmpTrapOID的值类型和值
tmpValue.value.oid.ptr = m_enterId.ptr;
tmpValue.value.oid.len = m_enterId.len;
SnmpSetVb(hVbl, 0, &oid0, &tmpValue);
SnmpFreeDescriptor(SNMP_SYNTAX_OID, (smiLPOPAQUE)&m_enterId);
SnmpFreeDescriptor(SNMP_SYNTAX_OID, (smiLPOPAQUE)&oid0);
smiINT32 errorState = NULL;
smiINT32 errorIndex = NULL;
// Create PDU
if ((hPdu = SnmpCreatePdu(hSession, SNMP_PDU_TRAP, 0, errorState, errorIndex, hVbl))
== SNMPAPI_FAILURE)
{
AfxMessageBox("Failed to Create PDU\n");
return false;
}
if (errorState > 0)
{
AfxMessageBox("Error: error state = %d, error index = %d",errorState,errorIndex);
return false;
}
if (SnmpSendMsg(hSession,NULL,hDstEntity,hContext,hPdu) != SNMPAPI_SUCCESS)
{
AfxMessageBox("Failed to Send message\n");
return false;
}以上仅供参考!
SnmpStartup()
SnmpCreateSession()
SnmpStrToEntity()
SnmpSetTimeout()
SnmpSetRetransmitMode()
SnmpSetRetry()
SnmpStrToContext()
SnmpSetTranslateMode()
SnmpRegister()
1、定以:
SnmpRegister(hSession,NULL,NULL,NULL,SNMPAPI_ON);
提示:网络传输层未定以.
2、我用Snmpgetpdudata时也老是提示出错,错误原因还没用getlasterror去查。
搞定后来结贴!!!!
我现在调晕了,SnmpRegister函数老出错,救救我啊!!!
LPCSTR lpszEntMib ="1.3.6.1.4.1.300.0.1100"; //你自己的trap MIB编号++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++请教:自己的trap MIB编号, 作用是什么? 还有:snmpUptime 和 snmpTrapOID的作用是什么?
设置它们的值的关键是什么? 望高人赐教!十分感激!!!
谢谢!!!
何不问问已经把这个问题消化好了的人,节省时间和人力.