snmp方式发送告警示例代码(linux)-验证通过_第1页
snmp方式发送告警示例代码(linux)-验证通过_第2页
snmp方式发送告警示例代码(linux)-验证通过_第3页
snmp方式发送告警示例代码(linux)-验证通过_第4页
snmp方式发送告警示例代码(linux)-验证通过_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*Alarm.cpp*/

/*=================================================================

============*

*DESCRIPTION:receiveinformationandwritefile

*

*

*HISTORY:NAMEDATEREASON

*--------------

*WangXinXin11/14/2012Original

*

*SEEALSO:

*

*NOTES:g++Alarm.cpp-osnmp_test-lsnmp

*==================================================================

===========*/

#include"Alarm.h"

enum{

IP_POS=0,

AS_POS,

};

#ifndefMIN

#defineMIN(a,b)((a)<(b)?(a):(b))

#endif

#ifndefMAX

#defineMAX(a,b)((a)>(b)?(a):(b))

#endif

char*g_itemstr;

charg_IpBuf[50];

charlineBuf[MAX_LINE_ALARM_LEN];

Alarm*Alarm::_instance=NULL;

Alarm::Alarm(void)

{

//printf("brotherisgonnasendalarm!\n");

readNMSConfig();

}

Alarm*Alarm::instance()

{

if(_instance==NULL)

{

_instance=newAlarm();

}

return(_instance);

}

FILE*Alarm::openCfgfile(char*pFilename)

{

FILE*pFile=NULL;

if(!(pFile=fopen(pFilename,"r")))

{

strcpy(g_IpBuf,"

10

");

//printf(">>failtoopenfile>%s\n\n",pFilename);

g_itemstr=g_IpBuf;

returnNULL;

}

//printf(">>openfile>%s\n",pFilename);

returnpFile;

}

intAlarm::readLine(intline,ALARM_LINE_ITEMS*pLineItems)

{

inti,n;

intpos,offset;

char*pbuf=lineBuf;

for(i=0,n=0;i<MAX_LINE_ALARM_LEN;n++){

for(;i<MAX_LINE_ALARM_LEN;i++){

if(!isspace(pbuf[i]))break;

}

pos=i;

for(;i<MAX_LINE_ALARM_LEN;i++){

if(isspace(pbuf[i]))break;

}

offset=i-1;

if(offset<=pos)break;

memset(pLineItems[line].item[n].content,0,MAX_ITEM_ALARM_LEN);

memcpy(pLineItems[line].item[n].content,&pbuf[pos],

MIN((offset-pos+1),MAX_ITEM_ALARM_LEN));

//printf("Getline[%d]item[%d]:%s\n",line,n,

pLineItems[line].item[n].content);

}

returnn;

}

ALARM_LINE_ITEMS*Alarm::itemsptr()

{

staticALARM_LINE_ITEMS*pLineItems=NULL;

if(!pLineItems){

pLineItems=

(ALARM_LINE_ITEMS*)calloc(sizeof(ALARM_LINE_ITEMS),MAX_ALARM_LINE);

}

returnpLineItems;

}

intAlarm::readCfgItems(char*pfilename)

{

FILE*fp=NULL;

intline;

memset(lineBuf,'',MAX_LINE_ALARM_LEN);

ALARM_LINE_ITEMS*pItems=itemsptr();

if(NULL==(fp=openCfgfile(pfilename))){

return-1;

}

//fseek(fp,0,SEEK_SET);

line=0;

while(NULL!=fgets(lineBuf,MAX_LINE_ALARM_LEN,fp)){

//printf("readline%d:%s",line,lineBuf);

if(readLine(line,pItems)){

line++;

}

else{

//printf("thisisablankline,ignore\n");

}

memset(lineBuf,'',MAX_LINE_ALARM_LEN);

}

fclose(fp);

return(line>0?(line-1):0);

}

voidAlarm::readNMSConfig()

{

intret=0;

ALARM_LINE_ITEMS*pitems=itemsptr();

//printf("..readingNMSconfigfile\n");

ret=readCfgItems(NMS_CFG_FILE_PATH);

if(ret>=0)

{

g_itemstr=pitems[0].item[IP_POS].content;

}

}

voidAlarm::SendAlarm(AlarmInfo*Info)

{

charC16_AlarmTime[STR_LEN];

structtm*STim;

time_tSencTim;

oidobj1[]={1,3,6,1,4,1,28107,68,1,2,2,1,1};

oidobj2[]={1,3,6,1,4,1,28107,68,1,2,2,1,2};

oidobj3[]={1,3,6,1,4,1,28107,68,1,2,2,1,3};

oidobj4[]={1,3,6,1,4,1,28107,68,1,2,2,1,4};

oidobj5[]={1,3,6,1,4,1,28107,68,1,2,2,1,5};

oidobj6[]={1,3,6,1,4,1,28107,68,1,2,2,1,6};

oidobj7[]={1,3,6,1,4,1,28107,68,1,2,2,1,7};

oidobj8[]={1,3,6,1,4,1,28107,68,1,2,2,1,8};

oidobj9[]={1,3,6,1,4,1,28107,68,1,2,2,1,9};

oidobj10[]={1,3,6,1,4,1,28107,68,1,2,2,1,10};

oidobj11[]={1,3,6,1,4,1,28107,68,1,2,2,1,11};

oidobj12[]={1,3,6,1,4,1,28107,68,1,2,2,1,12};

oidobj13[]={1,3,6,1,4,1,28107,68,1,2,2,1,13};

oidobj14[]={1,3,6,1,4,1,28107,68,1,2,2,1,14};

oidobj15[]={1,3,6,1,4,1,28107,68,1,2,2,1,15};

oidobj16[]={1,3,6,1,4,1,28107,68,1,2,2,1,16};

oidobj17[]={1,3,6,1,4,1,28107,68,1,2,2,1,17};

oidobj18[]={1,3,6,1,4,1,28107,68,1,2,2,1,18};

oidobj19[]={1,3,6,1,4,1,28107,68,1,2,2,1,19};

oidobj20[]={1,3,6,1,4,1,28107,68,1,2,2,1,20};

charNone[]="0";

SencTim=time(NULL);

STim=localtime((consttime_t*)&SencTim);

strftime(C16_AlarmTime,STR_LEN,"%Y%m%d.%H%M%S",STim);

netsnmp_sessionsession,*ss;

netsnmp_pdu*pdu;

longsysuptime;

charcsysuptime[20];

char*trap;

charcommu[20];

intstatus;

//printf("ServerIp=%s\n",g_itemstr);

snmp_sess_init(&session);

session.version=SNMP_VERSION_2c;

session.peername=g_itemstr;

session.remote_port=SNMP_TRAP_PORT;

strcpy(commu,"public");

munity=(unsignedchar*)commu;

munity_len=strlen((char*)munity);

session.retries=3;

session.timeout=2000;

session.sessid=0;

netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,

NETSNMP_DS_LIB_DEFAULT_PORT,SNMP_TRAP_PORT);

ss=snmp_open(&session);

if(ss==NULL)

{

snmp_sess_perror("snmptrap",&session);

}

pdu=snmp_pdu_create(SNMP_MSG_TRAP2);

sysuptime=get_uptime();

sprintf(csysuptime,"%ld",sysuptime);

trap=csysuptime;

//printf("C2_AlarmGroup=%s\n",Info->C2_AlarmGroup);

//printf("C3_AlarmType=%s\n",Info->C3_AlarmType);

//printf("C7_HostIp=%s\n",Info->C7_HostIp);

unsignedintHostIp=htonl(inet_addr(Info->C7_HostIp));

memset(Info->C7_HostIp,0,STR_LEN);

sprintf(Info->C7_HostIp,"%d",HostIp);

//printf("C7_HostIp=%s\n",Info->C7_HostIp);

//printf("C8_AlarmPortId=%s\n",Info->C8_AlarmPortId);

//printf("C13_AlarmLevel=%s\n",Info->C13_AlarmLevel);

//printf("C18_AlarmSwitch=%s\n",Info->C18_AlarmSwitch);

//printf("C20_AlarmContent=%s\n",Info->C20_AlarmContent);

snmp_add_var(pdu,obj1,OID_LENGTH(obj1),'i',None);

snmp_add_var(pdu,obj2,OID_LENGTH(obj2),'i',Info->C2_AlarmGroup);

snmp_add_var(pdu,obj3,OID_LENGTH(obj3),'i',Info->C3_AlarmType);

snmp_add_var(pdu,obj4,OID_LENGTH(obj4),'i',None);

snmp_add_var(pdu,obj5,OID_LENGTH(obj5),'i',None);

snmp_add_var(pdu,obj6,OID_LENGTH(obj6),'i',None);

snmp_add_var(pdu,obj7,OID_LENGTH(obj7),'i',Info->C7_HostIp);

snmp_add_var(pdu,obj8,OID_LENGTH(obj8),'i',Info-

>C8_AlarmPortId);

snmp_add_var(pdu,obj9,OID_LENGTH(obj9),'i',None);

snmp_add_var(pdu,obj10,OID_LENGTH(obj10),'i',None);

snmp_add_var(pdu,obj11,OID_LENGTH(obj11),'i',None);

snmp_add_var(pdu,obj12,OID_LENGTH(obj12),'i',None);

snmp_add_var(pdu,obj13,OID_LENGTH(obj13),'i',Info-

>C13_AlarmLevel);

snmp_add_var(pdu,obj14,OID_LENGTH(obj14),'i',None);

snmp_add_var(pdu,obj15,OID_LENGTH(obj15),'i',None);

snmp_add_var(pdu,obj16,OID_LENGTH(obj16),'s',C16_AlarmTime);

snmp_add_var(pdu,obj17,OID_LENGTH(obj17),'i',None);

snmp_add_var(pdu,obj18,OID_LENGTH(obj18),'i',Info-

>C18_AlarmSwitch);

snmp_add_var(pdu,obj19,OID_LENGTH(obj19),'i',None);

snmp_add_var(pdu,obj20,OID_LENGTH(obj20),'s',Info-

>C20_AlarmContent);

status=snmp_send(ss,pdu);

snmp_close(ss);

}

intmain()

{

Alarm*ptr=Alarm::instance();

AlarmInfoInfo;

strcpy(Info.C2_AlarmGroup,"133");

strcpy(Info.C3_AlarmType,"133701");

strcpy(Info.C7_HostIp,"

53

");

strcpy(Info.C8_AlarmPortId,"0");

strcpy(Info.C13_AlarmLevel,"1");

strcpy(Info.C18_AlarmSwitch,"1");

strcpy(Info.C20_AlarmContent,"DnarDead");

ptr->SendAlarm(&Info);

return0;

}

/*Alarm.h*/

/*=================================================================

============*

*DESCRIPTION:receiveinformationandwritefile

*

*

*HISTORY:NAMEDATEREASON

*--------------

*WangXinXin11/14/2012Original

*

*SEEALSO:

*

*NOTES:g++Alarm.cpp-osnmp_test-lsnmp

*==================================================================

===========*/

#ifndefALARM_H

#defineALARM_H

#include<net-snmp/net-snmp-config.h>

#include<net-snmp/net-snmp-includes.h>

#include<net-snmp/agent/agent_trap.h>

#include<netdb.h>

#include<net/if.h>

#include<sys/ioctl.h>

#include<unistd.h>

#include<arpa/inet.h>

#include<stdlib.h>

#include<stdio.h>

#include"ctype.h"

#defineSTR_LEN256

#defineMAX_LINE_ALARM_LEN512

#defineMAX_ITEM_ALARM_LEN32

#defineMAX_ONEL_ALARM_ITEM5

#defineMAX_ALARM_LINE5

#defineNMS_CFG_FILE_PATH"/opt/CTIR/etc/NMS.cfg"

typedefs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论