- 论坛徽章:
- 0
|
最近因为需要,要求写两部分程序实现管理端与代理端信息的交互,在linux系统下,也就是trap陷阱的发送和接收(我装的虚拟机,安装的是red hat enterprise linux 4)
但是从未接触过此类的知识所以进展很慢,希望各位了解的朋友可以告知一二,不胜感激
在网上找到了trap的发送的代码如下(如果有接受trap部分的代码,呵呵,那是更好了):
#include <netinet/in.h>
#include <net-snmp/net-snmp-config.h> /*此处原先是ucd-snmp,因为我的是net-snmp所以 自作主张修改了,下面一个include也是*/
#include <net-snmp/net-snmp-includes.h>
int snmp_input(int operation,struct snmp_session *session,int reqid,struct snmp_pdu *pdu,void *magic)
{
return 1;
}
int main(int argc,char * argv[])
{
struct snmp_session session,*ss;
struct snmp_pdu *pdu,*response;
struct sockaddr_in *pduIP;
oid objid_enterprise[]={1,3,6,1,4,1,3,1,1};
oid objid_sysuptime[]={1,3,6,1,2,1,1,3,0};
oid objid_snmptrap[]={1,3,6,1,6,3,1,1,4,1,0};
struct variable_list *vars;
int status;
char *trap=NULL;
int exitval=0;
long sysuptime;
char csysuptime[20];
init_snmp("snmpd"); /*此处原先代码是init_snmp("");引号中不知和配置文件中的什么一致,请指教 */
snmp_sess_init(&session);
session.version=SNMP_VERSION_2c;
session.peername="172.17.2.16";
session.community="public";
session.community_len=strlen(session.community);
SOCK_STARTUP;
session.callback=snmp_input;
session.callback_magic=NULL;
session.remote_port=SNMP_TRAP_PORT;
ss=snmp_open(&session);
if(ss==NULL) {
snmp_sess_perror("snmptrap",&session);
SOCK_CLEANUP;
exit(1);
}
pdu=snmp_pdu_create(SNMP_MSG_TRAP2);
sysuptime=get_uptime();
sprintf(csysuptime,"%ld",sysuptime);
trap=csysuptime;
snmp_add_var(pdu,objid_sysuptime,sizeof(objid_sysuptime)/sizeof(oid),'t',trap);
//sysUptime.0
status=snmp_send(ss,pdu)==0;
if(status){
snmp_sess_perror("snmptrap",ss);
snmp_free_pdu(pdu);
exitval=1;
}
snmp_close(ss);
SOCK_CLEANUP;
return exitval;
}
现在编译还未通过,报的错误是undefined reference to `init_snmp',后面的所有用到的相关函数都是这个错误,不知是需要在哪里配置还是别的问题,有知道的相烦告知,谢谢 |
|