大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
目录
一、Trap与Inform
SNMP Inform Requests功能允许路由器向SNMP管理器发送通知请求。
路由器可以在发生特定事件时向SNMP管理器发送通知。例如,代理路由器可能在自身遇到错误情况时向管理器发送消息。通知有两种格式:Trap和Inform。
Trap是不可靠的,因为接收器在收到Trap时不发送任何确认。发件人无法确定是否收到了Trap。但是,接收Inform请求的SNMP代理使用SNMP response PDU确认该消息。如果代理未收到Inform请求,则不会发送回复。如果发送方从未收到响应,则可以再次发送Inform请求。因此,Inform更有可能到达其预期目的地。
因为它们更可靠,所以Inform在路由器和网络中消耗更多资源。与Trap一起发送时丢弃的Trap不同,必须在内存中保留Inform请求,直到收到响应或请求超时。此外,Trap仅发送一次,而Inform可能会重试几次。重试会增加流量并导致网络上的开销增加。因此,Trap和Inform请求提供了可靠性和资源之间的权衡。如果SNMP管理器收到每个通知很重要,请使用Inform请求。另一方面,如果您担心网络上的流量或路由器中的内存,并且您不需要接收每个通知,请使用Trap。
二、Trap
SNMP Trap是SNMP的一部分,当被监控段出现特定事件,可能是性能问题,甚至是网络设备接口宕掉等,代理端会给管理站发告警事件。通过告警事件,管理站可以通过定义好的方法来处理告警。
1、Agent端工作流程
①编写MIB文件,确定好TRAP名称等信息(一般MIB设备厂商会提供)
②命令方式:发送各种TRAP命令(Manager地址后面一定要加端口号162),在Manager端看反应结果,在Agent端无反应
③自动触发:配置snmpd.conf设置触发TRAP,系统发生某类错误时会自动触发相应类型的TRAP,发送给Manager
④程序方式:一部份TRAP需要写C语言程序,用相应的api(send_easy_trap或send_v2trap)发送
2、Manager端工作流程
①配置snmptrapd.conf文件,设置访问权限
②将MIB文件导入到mibs文件夹中
③用perl等脚本语言编写处理trap的程序
④配置snmptrapd.conf文件,添加traphandler项,将不同的TRAP对应到不同的处理程序上
3、流程图
图中在测试机 M1 上启动 snmptrapd 进程,并且在 UDP 162 端口上监听 SNMP Trap 信息,一旦收到 Trap,snmptrapd 将所接收到的 Trap 信息内容打印到一个本地的文本文件中。 机器 M2 模拟发送 SNMP Trap 的设备,将调用 net-snmp 的命令行程序 snmptrap 发送一个 Trap。
三、调试
snmptrapd安装路径:/usr/local/sbin/snmptrapd
其配置文件路径:/usr/local/sbin/snmptrapd.conf
添加如下配置文件内容:
authCommunity log,execute,net public
上面语句指明以“public”为“community”请求的snmp “notification”允许的操作。上面添加的是比较简单的配置,但可使snmptrapd程序运行起来并正确接收trap包。
服务器运行:
sudo snmptrapd -d -f -Lo
上面命令中的选项表示:
-C:表示不使用net-snmp默认路径下的配置文件snmptrapd.conf;
-c:指定snmptrapd.conf文件;
-d:显示收到和发送的数据报,通过这个选项可以看到数据报文;
-f:默认情况下,snmptrapd是在后台中运行的,加上这个选项,表示在前台运行;
-L:指定日志记录在哪里,后面的o表示直接输出到屏幕上,如果是跟着f表示日志记录到指定的文件中;
可通过snmptrapd -h查看命令帮助了解该命令的使用。
客户端运行:
sudo snmptrap -v1 -c public [管理端IP] 1.3.6.1.4.1.1 [代理端IP] 2 3 1000 1.3.6.1.9.9.44.1.2.1 i 12 1.3.4.1.2.3.1 s test_snmptrap
各参数含义:
snmptrapd和snmptrap都在虚拟Ubuntu中执行的,所以snmp管理端IP和snmp代理IP一样。执行后,在执行snmptrapd的窗口中可接收到数据,如下:
Received 82 byte packet from UDP: [192.168.11.129]:38271->[192.168.11.129]:162
0000: 30 50 02 01 00 04 06 70 75 62 6C 69 63 A4 43 06 0P.....public.C.
0016: 06 2B 06 01 04 01 01 40 04 C0 A8 0B 81 02 01 02 .+.....@........
0032: 02 01 03 43 02 03 E8 30 29 30 0E 06 09 2B 06 01 ...C...0)0...+..
0048: 09 09 2C 01 02 01 02 01 0C 30 17 06 06 2B 04 01 ..,......0...+..
0064: 02 03 01 04 0D 74 65 73 74 5F 73 6E 6D 70 74 72 .....test_snmptr
0080: 61 70 ap
2019-05-22 10:49:36 61 [192.168.11.129] (via UDP: [192.168.11.129]:38271->[192.168.11.129]:162) TRAP, SNMP v1, community public
SNMPv2-SMI::enterprises.1 Link Down Trap (3) Uptime: 0:00:10.00
SNMPv2-SMI::internet.9.9.44.1.2.1 = INTEGER: 12 SNMPv2-SMI::org.4.1.2.3.1 = STRING: "test_snmptrap"
上线:
下线(服务器端):
上线(代理端):
上线(服务器端):
测试(服务器端):
四、SNMP中预定义的trap
snmp协议中定义了6种基本的trap,这6种trap可以涵盖大部分设备的主要状态改变,与企业自定义trap配合使用,就可以处理几乎所有的重要状态改变情况。
(1).coldStart:snmp发送实体正在重新初始化,以修改代理的配置或协议实例的实现,特别是由于崩溃或重大故障而引起的意外重启。
(2).warmStart:发送实体正在重新初始化,但不修改代理的配置或协议实例的实现。
(3).linkDown:表示代理的一个通信连接失败。
(4).linkUP:表示代理的一个通信连接成功。
(5).authenticationFailure:表示发送方的snmp消息检验失败
(6).egpNeighborLoss:表示发送协议实体的EGP邻居已被标记为Down,相邻关系已经不存在。
企业专用trap:snmp定义的6个trap可以涵盖大部分的情况,但是很多情况下设备有自己特殊的状态,企业也希望发送或接收自己定义的trap以得到特殊的消息。使用trap定义宏就可以定义企业自己的trap。企业设备发送自定义trap时,必须同时定义trap的MIB一起分发出去,否则,其他管理站不能识别自定义trap的格式。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171354.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...