windows下使用net-snmp实现agent扩展(四)
来源:互联网 发布:淘宝耐克正品店铺 贴吧 编辑:程序博客网 时间:2024/06/05 09:07
在前三篇的内容里,介绍了使用net-snmp实现agent的Get/Set命令,下面介绍一下发送trap消息。发送trap消息时,系统默认的端口是162。使用下面的代码,可以实现trap消息的发送。
- //该函数发送实时报警信息。与发送一般信息端口不同
- void init_alarm_info(void)
- {
- DEBUGMSGTL((“dcsserver”,
- “initializing (setting callback alarm)\n”));
- //CDcsRunConfigManager *serverInfo = CDcsRunConfigManager::GetInstance();
- snmp_alarm_register(5,/*serverInfo->GetTrapTimeSpan();*/ /* seconds, 秒 */
- SA_REPEAT, /* repeat (every 30 seconds). 每隔30秒发送一个trap */
- send_trap, /* our callback 我们的回调函数 */
- NULL /* no callback data needed */
- );
- }
- void send_trap2(unsigned int clientreg, void *clientarg)
- {
- //MIB Tree中需要trap的报警节点节点主动trap的用./././././././2./
- static oid oid_cpu_Alarm[] = {1, 3, 6, 1, 4, 1, 9000, 2, 1 };
- static oid oid_memory_Alarm[] = {1, 3, 6, 1, 4, 1, 9000, 2, 2 };
- static oid oid_disk_Alarm[] = {1, 3, 6, 1, 4, 1, 9000, 2, 3 };
- netsnmp_pdu *pdu;
- int status = 0;
- // create pdu
- pdu = snmp_pdu_create(SNMP_MSG_TRAP2); //SNMP_MSG_TRAP
- if ( !pdu )
- {
- CDcslog::GetInstance()->dlog_error(“send_trap Failed to create trap PDU”);
- return;
- }
- if(status != 0)
- {
- CDcslog::GetInstance()->dlog_error(“send_trap snmp_add_var() error”);
- snmp_free_pdu(pdu);
- return;
- }
- //SNMPV2 版本2
- // status = create_trap_session(“127.0.0.1″, SNMP_TRAP_PORT, “public”, SNMP_VERSION_2c, SNMP_MSG_TRAP2);
- //SNMPV1 第二个参数为SNMP_TRAP_PORT时有警告,应该为0
- status = create_trap_session(DEFAULT_ADDR, 0, “public”, SNMP_VERSION_1, SNMP_MSG_TRAP);
- //第二个参数为SNMP_TRAP_PORT时有警告,应该为0
- if (status == 0)
- {
- CDcslog::GetInstance()->dlog_error(“send_trap create_trap_session() error”);
- snmp_free_pdu(pdu);
- return;
- }
- //在这里添加要发送的变量,可以添加发送的逻辑
- bool flag =false;
- //cpu利用率大于85%时,添加到trap列表中
- if ( GetUsedCPU()>85)
- {
- flag = true;
- status = snmp_add_var(pdu, oid_cpu_Alarm, OID_LENGTH(oid_cpu_Alarm), ‘s’, “cpu Alarming”);
- }
- //memory
- if ( GetUsedMemory()>85)
- {
- flag = true;
- status = snmp_add_var(pdu, oid_memory_Alarm, OID_LENGTH(oid_memory_Alarm), ‘s’, “memory Alarming”);
- }
- //disk:c:
- if ( GetUsedDisk()>85)
- {
- flag = true;
- status = snmp_add_var(pdu, oid_disk_Alarm, OID_LENGTH(oid_disk_Alarm), ‘s’, “disk Alarming”);
- }
- //列表中有内容,则发送
- if (flag)
- {
- send_trap_vars(1, 0, pdu->variables);
- }
- //释放资源
- snmpd_free_trapsinks();
- snmp_free_pdu(pdu);
- }
这样发送的trap消息,是比较灵活的。http://vcsky.net havenzhao
在net-snmp的源码中,notification.c文件也是发送trap消息的,它使用的api是: send_v2trap(),但是要开启snmp的trap服务,才能发送成功。
到目前为止,已经完整的介绍了windows下使用net-snmp实现agent扩展的相关技术。由于接触的时间并不长,难免有不正确或者疏忽的地方,请多见谅。
阅读全文
0 0
- windows下使用net-snmp实现agent扩展(四)
- windows下使用net-snmp实现agent扩展(四)
- windows下使用net-snmp实现agent扩展(一)
- windows下使用net-snmp实现agent扩展(二)
- windows下使用net-snmp实现agent扩展(三)
- windows下使用net-snmp实现agent扩展(一)
- windows下使用net-snmp实现agent扩展(二)
- windows下使用net-snmp实现agent扩展(三)
- Net-snmp agent扩展
- Net-snmp 使用c 扩展 sub-agent
- Linux下基于net-snmp的Agent扩展开发
- linux net-snmp agent manager windows snmp
- net-snmp agent开发(用net-snmp扩展MIB库)
- Windows下使用net-snmp-5.4.1扩展代理所遇问题及解决
- 自定义SNMP Agent扩展
- Snmp Agent扩展
- windows 平台如何实现snmp agent?
- 使用net-snmp做自己的agent
- CXF发布restful WebService的入门例子(服务器端)
- windows下使用net-snmp实现agent扩展(二)
- Spark基础-Scala集合操作
- JNI开发基础系列--开启JNI线程
- windows下使用net-snmp实现agent扩展(三)
- windows下使用net-snmp实现agent扩展(四)
- union struct的内存分配方式及其sizeof大小
- Angular2.0视频教程
- TCP协议如何保证传输可靠性
- 认清大数据四大误区:大数据终将消除经济自由是最大谬误
- mongodb的安装与部署
- RecyclerView 配合 DiffUtil,好用到飞起
- Pymol(1.8.6)作图技巧之创建质心
- 阿里云工业大脑已成功落地