本人在redhat linux写了一个基于net-snmp的trap程序(嵌入代理程序snmpd中),代码如下所示,编译通过,执行snmpd程序后,每隔3秒发送一次,通过提示信息可以得知snmp_send()函数执行结果非0,可是我的trap监视器却无法获取到所发送的trap信息。而执行snmptrap -v2c -c publictrap 192.168.0.147:162 "" UCD-SNMP-MIB::ucdStart命令则接收正常,请各位朋友指点一下迷津,谢谢!
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "asTrap.h"void
send_myTrapp(unsigned int clientreg, void *clientarg)
{
netsnmp_session session,*ss;
netsnmp_pdu *pdu;
long sysuptime;
char csysuptime[20];
int status = 0;
oid oid_sysuptime[] = { 1,3,6,1,2,1,1,3,0 };
char *cp1="192.168.0.147", *cp2="publictrap"; // init session
snmp_sess_init(&session);
session.version = SNMP_VERSION_2c;
session.peername = cp1;
session.remote_port = 162;
session.community = cp2;
session.community_len = strlen(session.community);
ss = snmp_open(&session);
if(ss==NULL)
{
snmp_sess_perror("snmptrap open session error!",&session);
exit(1);
}
// create pdu
pdu = snmp_pdu_create(SNMP_MSG_TRAP2);
sysuptime = get_uptime();
sprintf(csysuptime, "%ld", sysuptime);
status = snmp_add_var(pdu, oid_sysuptime,OID_LENGTH(oid_sysuptime), 't', csysuptime);
if(status!=0)
{
snmp_sess_perror("snmptrap add sysuptime error!",&session);
return;
} status = snmp_send(ss, pdu);
if (status==0)
{
snmp_sess_perror("snmptrap send info error!",&session);
snmp_free_pdu(pdu);
return;
}
snmp_close(ss); fprintf(stderr,"send snmptrap over %d...\n",status);
}void
init_asTrap(void)
{
snmp_alarm_register(3, SA_REPEAT, send_asTrap_trap, NULL);
}
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "asTrap.h"void
send_myTrapp(unsigned int clientreg, void *clientarg)
{
netsnmp_session session,*ss;
netsnmp_pdu *pdu;
long sysuptime;
char csysuptime[20];
int status = 0;
oid oid_sysuptime[] = { 1,3,6,1,2,1,1,3,0 };
char *cp1="192.168.0.147", *cp2="publictrap"; // init session
snmp_sess_init(&session);
session.version = SNMP_VERSION_2c;
session.peername = cp1;
session.remote_port = 162;
session.community = cp2;
session.community_len = strlen(session.community);
ss = snmp_open(&session);
if(ss==NULL)
{
snmp_sess_perror("snmptrap open session error!",&session);
exit(1);
}
// create pdu
pdu = snmp_pdu_create(SNMP_MSG_TRAP2);
sysuptime = get_uptime();
sprintf(csysuptime, "%ld", sysuptime);
status = snmp_add_var(pdu, oid_sysuptime,OID_LENGTH(oid_sysuptime), 't', csysuptime);
if(status!=0)
{
snmp_sess_perror("snmptrap add sysuptime error!",&session);
return;
} status = snmp_send(ss, pdu);
if (status==0)
{
snmp_sess_perror("snmptrap send info error!",&session);
snmp_free_pdu(pdu);
return;
}
snmp_close(ss); fprintf(stderr,"send snmptrap over %d...\n",status);
}void
init_asTrap(void)
{
snmp_alarm_register(3, SA_REPEAT, send_asTrap_trap, NULL);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货