SNMP TRAP实战

SNMP Trap抓包分析 SNMP TRAP 阅读详情
AI摘要

本文深入解析SNMPTrap机制,探讨其作为事件驱动的告警通知系统如何实现实时故障检测,提升网络管理效率。介绍了SNMPTrap的工作原理,功能特点,包括事件驱动的故障告警、Trap信息翻译与展现、事件导出以及对各类设备厂家MIB库的支持。并通过实例展示了TrapMIB的编写、编译及示例代码,详细解释了如何在子代理中注册Trap,以及如何测试和验证Trap功能。

一、什么是SNMPTRAP

  • SNMP trap(SNMP 陷阱):某种入口,到达该入口会使SNMP被管设备主动通知SNMP管理器,而不是等待SNMP管理器的再次轮询。在网管系统中,被管理设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界程度等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。正如人们用中断通知 CPU 数据的到达,而不是让 CPU 进行轮询一样。Trap 通知是更加合理的选择。用一句话来说的话,SNMP Trap 就是被管理设备主动发送消息给 NMS 的一种机制。

二、SNMPTRAP功能特点

  • 1、事件驱动,第一时间收到设备故障告警
    以事件为驱动,由被监控的主机、网络设备、应用在发生故障时向NMS发送SNMP Trap,通过对接收到的SNMP Trap进行翻译和展现,以最快速度向管理人员发送告警。SNMP Trap不同于SNMP的主动采集,SNMP采集服务器按照固定的时间间隔,由网管系统以询问的方式,采集被监控端性能指标,因此发现被监控端性能问题的快慢取决于采集的频率间隔。而SNMP Trap是以事件为驱动,在被监控端设置陷阱,一旦被监控端设备出现相关问题,立刻发送SNMP Trap,因此能够在最短的时间内发现故障,避免因为设备故障带来的经济损失。
  • 2、提供SNMPTrap的接收,并通过对Trap信息翻译,展现事件
    支持设备,主机和应用的SNMP Trap信息,从被动变为主动,全面监控IT系统。通过对SNMP Trap的翻译和展现,一旦某个IT组件出现问题,可以在短时间之内,即可收到故障信息,满足企业的快速发现问题的需要。
    通过SNMPTrap的接收规则定义,管理员可以过滤非重要设备的Trap信息,也可以过滤被监控设备的非重要故障信息,帮助管理员在第一时间收到真正需要的管理信息。
  • 3、支持事件导出
    汇总特定时间内特定SNMPTrap事件,同时可以以Excel格式导出事件数据,便于管理人员对故障信息进行统计和分析。
  • 4、支持各类设备厂家MIB库的导入
    虽然国内各种网络设备都支持SNMP Trap,但是各个厂家的MIB库并不能很好的支持公共标准,因此,很多监控系统都支持私有MIB库的导入,确保能够全面兼容各个厂家设备的SNMP Trap信息.

三、SNMPTRAP工作流程

  • 1、Agent端
    A、编写MIB文件,确定好TRAP名称等信息
    B、命令方式:发送各种TRAP命令(Manager地址后面一定要加端口号162),在Manager端看反应结果,在Agent端无反应
    C、自动触发:配置snmpd.conf设置触发TRAP,系统发生某类错误时会自动触发相应类型的TRAP,发送给Manager
    D、程序方式:一部份TRAP需要写C语言程序,用相应的api(send_easy_trap或send_v2trap)发送
  • 2、Manager端
    A、配置snmptrapd.conf文件,设置访问权限
    B、将MIB文件导入到mibs文件夹中
    C、用perl等脚本语言编写处理trap的程序
    D、配置snmptrapd.conf文件,添加traphandler项,将不同的TRAP对应到不同的处理程序上

四、TRAP MIB编写及编译
NET-SNMP中TRAP的实现是基于一个由NOTIFICATION-TYPE 定义的MIB对象实现的。该对象在TrapPDU中头部位置,后续紧跟着该Trap携带的其他节点的信息,这些节点信息是Trap中有意义的信息,体现本次“告警”的真正内容,这些节点一般为普通的MIB对象。其中OBJECTS 子句中可以包含多个对象。

  • 实现私有Trap的方法与之前的普通MIB开发方法类型:

    • 先定义Trap的MIB对象,然后借由mib2c和相应的框架代码配置文件,“mib2c.notify.conf”,生成Trap框架代码。
      命令如下:
      mib2c -c mib2c.notify.conf TEST-TRAP-MIB::TestTraps

其生成的框架代码:

  1. 注册Trap对象
  2. 绑定对象发送列表
  3. 最后调用API发送:send_easy_trap() send_v2trap() send_v3trap().

Trap的发送逻辑一般具有重复发送的特性,这一特性可有snmp_alarm_register()实现。该API能够准确地实现计时器功能。示例代码中也是由该API实现重复,周期调用的功能。
五、TRAP MIB示例文件

TEST-TRAP-MIB DEFINITIONS ::= BEGIN
IMPORTS
	MODULE-IDENTITY, OBJECT-TYPE, TimeTicks FROM SNMPv2-SMI
	DisplayString, FROM SNMPv2-TC
	jsHostInfo FROM JS-MAIN-MIB ;
	TestTraps OBJECT IDENTIFIER ::= { jsHostInfo 99 }
     
	cpuRatioHigh NOTIFICATION-TYPE
		OBJECTS  {TestTrapDescription}  --可以包含多个对象
		STATUS  current
		DESCRIPTION "."
         ::= { TestTraps 1 }    
         
  
	TestDescription OBJECT IDENTIFIER ::= { TestTraps 2 }
      
	TestTrapDescription  OBJECT-TYPE
		SYNTAX  DisplayString (SIZE (0..256))
		MAX-ACCESS read-only
		STATUS current
		DESCRIPTION "  "
		::= { TestDescription 1 }
           
  END

六、TRAP 示例代码

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "TestTraps.h"

//extern const oid snmptrap_oid[];
//extern const size_t snmptrap_oid_len;
int  cpu = 0; 
const oid snmptrap_oid[] = {1,3,6,1,6,3,1,1,4,1,0};
const size_t snmptrap_oid_len = OID_LENGTH(snmptrap_oid);
//如果CPU大于80 则发送告警 否则不发送
void judge_send_cputrap(int cpu)
{
    static unsigned int cputrap_clientreg = 0;
    if(cpu > 80)
    {
        if(cputrap_clientreg == 0){
            send_cpuRatioHigh_trap();
			//注册每5秒发送一次
            cputrap_clientreg = snmp_alarm_register(5,SA_REPEAT,send_cpuRatioHigh_trap,NULL);
 
        }
    }
    else
    {
        if(cputrap_clientreg != 0)
        {
            snmp_alarm_unregister(cputrap_clientreg);
            cputrap_clientreg = 0;
        }
    }
}
void read_cpudata_repeat(unsigned int clientreg, void *clientarg)
{
    cpu = 90;
    judge_send_cputrap(cpu); //判断发送告警
}


void init_TestTraps(void)
{
    printf(("TestTraps","Initializing\n"));
    snmp_alarm_register(1,SA_REPEAT,read_cpudata_repeat, NULL);
}

int
send_cpuRatioHigh_trap(void)
{
    netsnmp_variable_list *var_list = NULL;
    const oid       cpuRatioHigh_oid[] =
        { 1, 3, 6, 1, 4, 1, 88888, 1, 1, 99, 1 };
    const oid       TestTrapDescription_oid[] =
        { 1, 3, 6, 1, 4, 1, 88888, 1, 1, 99, 2, 1, 0 }	
    /*
     * 设置 snmpTrapOid.0 的值为私有MIB中定义的TestTrapDescription_oid
     */
    snmp_varlist_add_variable(&var_list,
                              snmptrap_oid, snmptrap_oid_len,
                              ASN_OBJECT_ID,
                              cpuRatioHigh_oid, sizeof(cpuRatioHigh_oid));

    /*
     * Add any objects from the trap definition
     */
    snmp_varlist_add_variable(&var_list,
                              TestTrapDescription_oid,
                              OID_LENGTH(TestTrapDescription_oid),
                              ASN_OCTET_STR,
                              /*
                               * Set an appropriate value for TestTrapDescription 
                               */
                              (int*)&cpu, sizeof(cpu));

    /*
     * Add any extra (optional) objects here
     */

    /*
     * Send the trap to the list of configured destinations
     *  and clean up
     */
     //发送TRAP之后并释放
    send_v2trap(var_list);
    snmp_free_varbind(var_list);

    return SNMP_ERR_NOERROR;
}

七、TRAP 注册到子代理中
方法跟普通MIB对象一样

八、测试和验证
需启动主代理进程和子代理进程 以及snmptrapd进程
直接到/usr/local/sbin/目录下 启动代理进程
./snmpd -f -Le -c /usr/local/share/snmp/snmpd.conf
然后启动子代理进程
./ example-demon

最后启动snmptrapd进程。
 ./snmptrapd -f -Le -c /usr/local/share/snmp/snmptrapd.conf

启动snmptrapd进程需要snmptrapd.conf配置文件
启动后即可看到
则每过5秒可以看到trap返回来的告警信息。

九、snmptrapd.conf编写
说明:配置文件所有指令都要顶格写,左侧不要留空格。
允许使用空格,但不能使用Tab键。
路径分隔符不能使用反斜杠,必须使用“/”。
此文件用来指定管理进程如何处理接收到的snmp notification。

  1. 在net-snmp安装目录下新建snmptrapd.conf文件,使用以下路径:/usr/local/share/snmp/snmptrapd.conf。

  2. 在snmptrapd.conf中加入以下指令:
    authCommunity log,execute,net public
    这条指令指明以“public”为“community”请求的snmp “notification”允许的操作。
    各变量意义如下:
    log: log the details of the notification - either in a specified file, to standard output (or stderr), or via syslog(or similar).
    execute: pass the details of the trap to a specified handler program, including embedded perl.
    net: forward the trap to another notification receiver.

  3. 若想对接收到的信息进行处理,可以使用traphandle,示例如下:
    traphandle SNMPv2-MIB::coldStart /usr/nba/bin/traps cold
    traphandle SNMPv2-MIB::warmStart /usr/nba/bin/traps warm
    traphandle IF-MIB::linkDown /usr/nba/bin/traps down
    traphandle IF-MIB::linkUp /usr/nba/bin/traps up
    第一个参数为从snmptrapd接收的OID,第二个参数为调用的程序。此次未做traphandle处理。

注意:上述是使用服务器本机获取TRAP ,如果想使用远程的管理设备获取TRAP
需要修改snmpd.conf文件

Trap的发送还需要指定到管理端地址和端口。在配置文件中,添加下面关键字:
不是关键点:Authtrapenable 1 //打开trap自动告警的开关,1代表开启,2代表关闭
Trap2sink localhost [community] [port] //指定trap发送的地址,共同体和端口
共同体和端口可以不指定,默认为public 和 162。

【SNMP】snmp trap 介绍、安装、命令|Trap的发送与接收代码实现 目录 零、简略 一、SNMP简单概述 1.1、什么是Snmp 1.2、为什么需要SNMP? 1.3、SNMP的基本组件 1.4、SNMP 和 UDP 1.5、Snmp版本 二、Snmp有关的基本概念 2.1、代理和管理站的模型 2.2、SNMP的操作命令 2.3、SNMP 报文 三、SNMP的运行过程 1.7 SNMP trap... 阅读详情

相关推荐

Zabbix SNMP Trap监控实战:从配置到告警全解析

本文详细解析了Zabbix SNMP Trap监控的完整配置流程与告警实战。通过对比轮询模式,阐述了Trap事件驱动机制的实时性优势,并提供了从snmptrapd部署、SNMPTT信息翻译到Zabbix Web界面配置监控项与触发器的全链路教程,帮助运维人员构建高效的主动式监控体系。

weixin_28339967的博客 550

SNMP陷阱(SNMP Trap) and 什么是snmp trap?

SNMP陷阱(SNMP Trap)是由一个SNMP代理发送的信息给管理员,其使一个代理通知管理站的重要事件,通过一个未被请求的SNMP信息。在SNMP自陷的通知后面的观点是这样的:如果一个管理员是负责大量的设备,每个设备有大量的目标,这对他是不切实际的或请求信息来自每个设备中的每个目标。每个在管理设备上的代理的解决方案在没有请求的情况下通知管理员。它通过发送信息叫做这个事件的陷阱。在接收...

again5401的博客 5332

实战指南:利用MIB Browser捕获与分析SNMP Trap报文

本文详细介绍了如何利用MIB Browser捕获与分析SNMP Trap报文,涵盖从基础概念到实战配置的全过程。通过搭建实验环境、配置SNMP服务、捕获Trap报文及企业级应用扩展,帮助网络管理员高效实现设备监控与故障排查。文章特别强调了SNMP Trap在网络管理中的实时告警优势及安全加固方案。

weixin_29296241的博客 1108

SNMPTRAP

SNMP协议是用来管理设备的协议,目前SNMP已成为网络管理领域中事实上的工业标准,并被广泛支持和应用,大多数网络管理系统和平台都是基于SNMP的。如果NMS(网管系统)需要查询被管理设备的状态,则需要通过SNMP的get操作获得设备的状态信息。但由于告警信息一般是由受管服务器进行主动告警,这时候就不能通过管理方主动使用snmpget来进行,而是由受管服务器通过SNMPTRAP进行。...

艾欧尼亚归我了 7840

SNMP Trap实战:从原理到Python实现精准告警

在网络监控领域,SNMP(简单网络管理协议)是实现设备管理的基础协议。其核心机制包括主动查询(Polling)和被动接收(Trap),其中Trap是一种由被监控设备主动发起的异步事件通知机制,能实现秒级甚至毫秒级的故障发现。这项技术的核心价值在于将运维模式从“轮询检查”转变为“事件驱动”,极大提升了告警的实时性和资源利用效率,是构建自动化运维体系的关键组件。其典型应用场景包括网络设备故障上报、服务器性能阈值告警等。本文聚焦于SNMP Trap的深度解析与工程实践,详细阐述了其与InformRequest的差

weixin_29231221的博客 327

SNMP实战手册:从Trap配置到Zabbix 7适配与故障排查

SNMP(简单网络管理协议)是一种基于UDP的轻量级网络监控通信机制,核心采用Manager-Agent模型,通过OID标识设备指标、MIB定义语义,支持轮询与Trap两种数据获取方式。其技术价值在于低开销、高兼容性与厂商中立性,广泛应用于Zabbix、PRTG等网管平台对交换机、服务器及网络设备的实时状态采集。在AI运维场景中,当torch.cuda.OutOfMemoryError等脚本异常发生时,SNMP可通过自定义OID和Trap机制将其纳入统一告警体系,弥补传统设备监控盲区。本文聚焦SNMPv3安

dianxiangong2403的博客 443

SNMP协议详解:从MIB树到Get/Set/Trap实战避坑指南

网络管理的第一步,是如何让路由器、交换机等异构设备暴露统一的可观测接口。SNMP(简单网络管理协议)正是为此而生——它用一个全局唯一的数字路径(OID)将设备资源映射成树形结构(MIB),管理站通过Get读状态、Set改配置、Trap收告警。看似简单的机制背后,隐藏着UDP传输的可靠性取舍、v1到v3的安全演进,以及Counter回绕、MIB加载失败等真实坑点。从基础原理到工程排错,理解这些细节,才能真正驾驭SNMP驱动的网络监控体系。

weixin_29219189的博客 264

Zabbix SNMP Trap配置实战:从snmptrapd到Bash接收器的完整指南

本文详细介绍了Zabbix SNMP Trap的配置实战,从snmptrapd安装到Bash接收器脚本部署,提供完整的监控解决方案。通过主动上报机制,有效解决传统SNMP轮询的盲区问题,适用于网络设备断电、接口状态变化等关键场景。包含环境准备、服务配置、测试验证及高级优化技巧,帮助运维人员快速构建可靠的Trap监控体系。

weixin_29208077的博客 415

SNMP Trap实战指南:从协议原理到Python代码实现

SNMP(简单网络管理协议)是网络设备管理的核心协议,它通过定义标准化的管理信息库(MIB)和对象标识符(OID)来实现对网络设备的监控与管理。其工作原理基于管理者与代理之间的信息交互,其中轮询(Polling)是管理者主动查询的“拉取”模式。而SNMP Trap则实现了关键的“推送”机制,允许被管理设备在发生特定事件(如接口故障、性能阈值突破)时,主动、异步地向网络管理系统(NMS)发送告警通知。这项技术的核心价值在于变被动为主动,极大缩短了故障发现时间,是构建实时、智能化运维体系的基石。其典型应用场景包

weixin_30086969的博客 325

Zabbix SNMP Trap监控实战:从华为设备告警到微信通知的完整链路

本文详细介绍了Zabbix SNMP Trap监控在华为设备告警管理中的实战应用,包括从基础环境搭建、华为MIB处理到微信告警集成的完整链路。通过优化配置和脚本开发,实现告警实时推送,显著提升运维效率。特别针对华为设备的SNMP Trap特性提供了专业解决方案。

git9versioner的博客 942

SNMP TRAP实战:解决设备监控告警延迟的主动上报方案

网络运维中,设备状态采集通常依赖SNMP轮询,但当设备规模增长后,轮询周期过长导致告警延迟,成为监控体系的瓶颈。SNMP TRAP作为一种主动上报机制,由设备在接口状态变化、重启等事件发生时,直接向网管端发送UDP 162通知,从根本上改变了数据流向。通过配置snmpd与snmptrapd,并利用traphandle脚本解析Trap报文,运维人员可实现秒级告警响应,同时保留轮询做指标采集与心跳检测,兼顾及时性与完整性。本文结合实战,讲解Trap报文结构、Agent上报配置、Manager接收解析以及抓包排错

weixin_29758911的博客 238

SNMP协议详解:从MIB到Trap的运维实战指南

SNMP是网络设备远程监控的核心协议,通过Manager、Agent、MIB和SMI实现设备状态采集与告警。其原理基于Get轮询、Set配置和Trap事件上报,技术价值在于无需登录设备即可统一纳管多厂商设备。典型应用场景包括端口状态监控、性能指标采集和故障告警。本文围绕SNMP协议,深入解析MIB对象定义、版本选型及OID解析,并给出Python轮询脚本与Trap接收的工程实践,帮助运维工程师避开超时、认证失败等常见坑。

weixin_32050773的博客 319

Windows SNMP Server测试实战:从OID到Trap的完整排查指南

网络监控系统中,SNMP协议是设备状态采集的核心手段。OID作为唯一标识符,MIB作为解析字典,Community与Trap共同构成SNMP通信的认证与主动告警机制。理解这些基础原理,能帮助运维人员高效定位“设备不可达”或“数据采集失败”问题。在Windows Server环境部署SNMP服务时,工具选择、配置验证与故障排查尤为关键。从snmputil到Net-SNMP、MIB Browser,再到真实场景中的超时、Trap丢失、Walk中断等问题,系统性的测试流程能够大幅提升监控平台纳管成功率。围绕SNM

weixin_28358083的博客 275

SNMP协议详解:从MIB对象树到Trap排错实战

网络监控中,统一管理异构设备是根本需求。SNMP协议作为事实标准,通过MIB定义设备信息树,用OID唯一标识每个监控对象,将CPU、内存、接口流量转化为可枚举的数值。理解对象树与SMI数据类型,是掌握监控原理的基础。该协议支持Get、Set、Trap三种交互模式,既可主动查询,也能被动接收告警,为故障定位提供实时信号。面对Timeout、No Such Instance等常见错误,需结合net-snmp工具链进行排错。生产环境推荐采用SNMPv3加密认证,或使用GETBULK优化大批量采集。本文结合实际排错

weixin_33488239的博客 278

snmp trap 详解

是 SNMP 协议的一部分,用于让 SNMP 代理主动向 SNMP 管理器发送通知。这种通知通常用于报告设备发生了异常或状态变化,而不需要等待管理器发起请求。Traps 是一种推送式消息机制,与常规的 SNMP 请求-响应模型(如 GET 和 SET)不同,Traps 是由代理主动发出的。

dlz0836的博客 3300

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications

本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。

qq_21843433的博客 615
上一篇: NET-SNMP学习 Table对象 (表格代码框架iterate)
下一篇: SNMP在Linux服务器上的安装和卸载
linuxGc
博客等级 码龄7年 506粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值