windows下使用net-snmp实现agent扩展(四)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了windows下使用net-snmp实现agent扩展(四),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2689字,纯文字阅读大概需要4分钟。
内容图文
![windows下使用net-snmp实现agent扩展(四)](/upload/InfoBanner/zyjiaocheng/981/2010967a75bd4753b57b6edfbea01382.jpg)
在前三篇的内容里,介绍了使用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扩展的相关技术。由于接触的时间并不长,难免有不正确或者疏忽的地方,请多见谅。
内容总结
以上是互联网集市为您收集整理的windows下使用net-snmp实现agent扩展(四)全部内容,希望文章能够帮你解决windows下使用net-snmp实现agent扩展(四)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。