snmp的trap_web scraping

snmp的trap_web scrapingSNMP(SimpleNetworkManagementProtocol)trap是一种很有用,但是也容易让人难以理解的协议。虽然名字叫做简单网络管理协议,但实际上并不是字面上的意思,尤其是看到.1.3.6.1.2.1.1.1.0这样一串串诡异的数字时候,就会有点让人崩溃。不管怎么说,现在所有的网络设备的都需要支持SNMP。而且现在还有很多的开源的网络管理系统,所以就有利于我们来学习和

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

更多信息在http://www.ibm.com/developerworks/cn/linux/l-cn-snmp/

SNMP(Simple Network Management Protocol) trap是一种很有用,但是也容易让人难以理解的协议。虽然名字叫做简单网络管理协议,但实际上并不是字面上的意思,尤其是看到.1.3.6.1.2.1.1.1.0这样一串串诡异的数字时候,就会有点让人崩溃。

不管怎么说,现在所有的网络设备的都需要支持SNMP。而且现在还有很多的开源的网络管理系统,所以就有利于我们来学习和理解SNMP。SNMP trap是由被管理的设备主动的向管理服务器发送设备的异常情况,可以看成是管理服务器被动的去接收的过程。所以会有很多的工具会把snmptrap集成到自己的工具中,对网络设备进行监控。

Francois Meehan在Sysadmin magazine发表过一篇文章是关于把SNMP trap集成的到Nagios当中的,大体的工作流程是:
1. 由snmptrapd来接收网络设备发出的trap
2. snmptrapd调用snmptt(snmp trap translator 翻译器)
3. snmptt中定义了每一种trap的级别,以及什么样的trap才有必要写入到syslog中
4. SEC(simple event correlator是一个事件收集器)从syslog中读取每一个事件,并把调用用户的脚本snmptraphandling.py 来处理。
5. snmptraphandling.py 会调用根据主机名和trap的级别来调用相当的Nagios命令行。

这个过程包含了很多层,所以感觉很复杂,还是深入进去看看snmptrapd是怎么工作的。从而尽可能简化snmptrap的使用方法。

snmptrapd来自开源软件Net-SNMP. Net-SNMP会有很多的用途,当然使用trap也是一个很有用的用途。当snmptrapd接收到trap以后,可以调用用户自定义的脚本或者命令行来处理trap。如果想使用这个功能就需要在snmptrapd的配置文件中设置traphandle。 snmptrapd接收到的trap信息格式是:
1. 数据包来源的主机名字。
2. 数据包来源的ip地址。
3. 数据包中的内容。

traphandle的工作就是读取这些内容并进行处理就可以了。

 

trap信息例子:

cisco2611.lon.altinity
192.168.10.20
RFC1213-MIB::sysUpTime.0 0:18:14:45.66
SNMPv2-MIB::snmpTrapOID.0 IF-MIB::linkDown
RFC1213-MIB::ifIndex.2 2
RFC1213-MIB::ifDescr.2 “Serial0/0”
RFC1213-MIB::ifType.2 ppp
OLD-CISCO-INTERFACES-MIB::locIfReason.2 “administratively down”
SNMP-COMMUNITY-MIB::snmpTrapAddress.0 192.168.10.20
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 “public”
SNMPv2-MIB::snmpTrapEnterprise.0 CISCO-SMI::ciscoProducts.186

因为snmptt对trap信息中的OID进行了翻译,如果不进行翻译的话,那么trap信息的样子应该是

cisco2611.lon.altinity
192.168.10.20
.1.3.6.1.2.1.1.3.0 0:18:13:59.95
.1.3.6.1.6.3.1.1.4.1.0 .1.3.6.1.6.3.1.1.5.3
.1.3.6.1.2.1.2.2.1.1.2 2
.1.3.6.1.2.1.2.2.1.2.2 “Serial0/0”
.1.3.6.1.2.1.2.2.1.3.2 ppp
.1.3.6.1.4.1.9.2.2.1.1.20.2 “administratively down”
.1.3.6.1.6.3.18.1.3.0 192.168.10.20
.1.3.6.1.6.3.18.1.4.0 “public”
.1.3.6.1.6.3.1.1.4.3.0 .1.3.6.1.4.1.9.1.186

 

这就说明了,snmptt拥有自己的配置文件,文件中包含了OID和对应的属性名,并且是使用OID来进行索引的。如果snmptt在配置文件中无法找到对应的OID的话,那么snmptt也就无法对信息进行翻译,我们看到的信息内容也就是原始的格式了。

snmptt使用的配置文件叫做MIBs(Management Information Base管理信息基础),在MIBs以OID为索引的key,可以快速查找到对应的文字形式和警告的级别。每一个MIB都有自己固定的定义格式,其中会包含一个宏(用来说明要显示信息的内容)。

 

 

可是为什么要有MIBs的存在呢?直接由snmptrapd来完成OID到信息的翻译不可以么?

1. MIBs是可以由用户自己来定义,使用的。因为各厂商对trap信息定义的内容肯定是不同的,所以想要snmp有一定的扩展性,那么就必须要支持用户自定义MIBs文件。这也就是MIBs存在的原因。

2. 如果由snmptrapd自己来完成翻译也是可以的,因为如果每次都去通过检索OID对应的消息的话,那对性能的影响是非常的大的,因此snmptrapd就需要读入MIBs。问题也就出现了,如果更新MIBs话,就要把snmptrapd重新启动,必定会影响到trap消息的接收。所以把snmptt作为一个独立的deamon存在是很正确的选择。

最后要做的事情就是添加traphandle了,handle会影响到snmptrap的接收性能,所以处理的速度要快,因为handle有可能1秒中会有数百次的调用。

 这样以来上面的处理流程就可以进行简化的:

1. snmptrapd接收到trap的信息

2. snmptrapd调用handle(如果不是调用现有的命令的话,在handle中就可以完成所有的处理了,就没有下面的处理了。又节省了一步,哈哈)

3. handle中再调用Nagios的命令行就可以了

这样一看流程就简单许多了,以后再使用snmptrap的时候也可以参考这个处理的流程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171475.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月20日 下午9:36
下一篇 2022年8月20日 下午9:36


相关推荐

  • Linux配置Java环境变量 详解「建议收藏」

    Linux配置Java环境变量 详解「建议收藏」一、官网下载JDKJDK官方下载地址:https://www.oracle.com/cn/java/technologies/javase-downloads.html​ 打开此网址可以看到目前所有维护中的JDK的发行版本,在此找到你需要的版本即可,我们这里选择JDK1.8版本进行演示。​ 下拉找到JavaSE8标题,然后点击JDKDownload,将跳转至JDK8版本选择页面。​ 选择合适安装包进行点击下载。所有JDK版本的历史版本:https://www.oracle.com/j

    2025年5月26日
    3
  • webpack配置文件_reconfig

    webpack配置文件_reconfig前言上一篇文章我们使用webpack打包成功了,但是每次都要自己手动输入打包的文件地址和打包到哪里去的地址,非常麻烦,所以这里介绍使用配置文件进行打包webpack.config.js首先我们创

    2022年7月31日
    8
  • tortoiseSVN汉化(简单飞机有汉化版吗)

    前言我们在进行项目的合作开发的时候一定无法离开一个公共平台,提供大家做项目的一个平台,目前使用较多的是SVN,它是一个开放源代码的版本控制系统。但是大家一定有遇到这样的问题,就是全英文界面(英语好的可以忽略),这个或多或少的让我们的工作效率降低了很多,特别是针对刚接触的小伙伴更是如此,本来就不熟悉,还全英文。下面我就来给大家一起来解决如何将全英文的SVN转化成中文版的SVN。处理前使用…

    2022年4月13日
    66
  • 如何编写优秀的单元测试用例「建议收藏」

    如何编写优秀的单元测试用例「建议收藏」优秀单元测试的定义​单元测试:一段自动化的代码,这段代码调用被测试的工作单元,之后对这个工作单元的单个最终结果的某些假设进行检验。单元测试几乎都是用单元测试框架进行编写。单元测试容易编写,快速运行,可自动化,可靠,可读,可维护,结果稳定。  集成测试:对一个工作单元进行的测试,这个测试对被测试的工作单元没有完全的控制,并使用该单元的一个或多个真实依赖物,例如数据库、系统时间、系统文件等  工作单元:从调用系统一个公共方法到产生一个测试可见的最终结果,其间这个系统发生的行为。一个

    2022年6月15日
    41
  • 重构第30天 尽快返回 (Return ASAP)

    重构第30天 尽快返回 (Return ASAP)

    2021年9月13日
    57
  • tcpip协议族有哪些

    tcpip协议族有哪些tcpip协议族有哪些有五层应用层运输层网络层数据链路层物理层

    2022年6月22日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号