实验目的:

实时监控指定路由器上OSPF邻居状态情况。

实验环境:

2台CSR1000v,提前配置好OSPFv2,建立邻居关系。

实验步骤:

一、在需要监控的设备上配置SNMPv2 Trap ospf的状态信息:
snmp-server enable traps ospf state-change
snmp-server enable traps ospf errors

二、使用python,作为snmptrap_v2的服务器,分析接受到的SNMPv2 Trap ospf的状态信息:

其中get_ip_address函数的目的是获取指定接口的IP地址,请参考:https://blog.csdn.net/tushanpeipei/article/details/116572723?spm=1001.2014.3001.5501

from get_ip_netifaces import get_ip_address
from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher
from pysnmp.carrier.asynsock.dgram import udp
from pyasn1.codec.ber import decoder
from pysnmp.proto import api
from pprint import pprintdef analysis(info): # 分析处理过后的Trap字典信息,当OSPF邻居关系改变时,使用python打印出信息# 分析Trap信息字典函数# 下面是这个大字典的键值与嵌套的小字典# 1.3.6.1.2.1.1.3.0 {'value': 'ObjectSyntax', 'application-wide': 'ApplicationSyntax', 'timeticks-value': '103170310'}# 1.3.6.1.6.3.1.1.4.1.0 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'objectID-value': '1.3.6.1.6.3.1.1.5.4'}# 1.3.6.1.2.1.2.2.1.1.2 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'integer-value': '2'}# 1.3.6.1.2.1.2.2.1.2.2 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'string-value': 'GigabitEthernet2'}# 1.3.6.1.2.1.2.2.1.3.2 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'integer-value': '6'}# 提取OSPF状态和邻居信息if '1.3.6.1.2.1.14.10.1.6' in info.keys():if info["1.3.6.1.2.1.14.10.1.6"]['integer-value'] == '8':print('OSPF Neighbor', info["1.3.6.1.2.1.14.10.1.3"]['ipAddress-value'], "FULL")elif info["1.3.6.1.2.1.14.10.1.6"]['integer-value'] == '1':print('OSPF Neighbor', info["1.3.6.1.2.1.14.10.1.3"]['ipAddress-value'], "Down")# pprint(info, indent=4)  # 打印字典信息def cb_fun(transport_dispatcher, transport_domain, transport_address, whole_msg):  # 处理Trap信息的函数,返回处理后的字典信息while whole_msg:msg_ver = int(api.decodeMessageVersion(whole_msg))  # 提取版本信息if msg_ver in api.protoModules:  # 如果版本兼容p_mod = api.protoModules[msg_ver]else:  # 如果版本不兼容,就打印错误print('Unsupported SNMP version %s' % msg_ver)returnreq_msg, whole_msg = decoder.decode(whole_msg, asn1Spec=p_mod.Message(),  # 对信息进行解码)print('Notification message from %s:%s: ' % (transport_domain, transport_address  # 打印发送TRAP的源信息))req_pdu = p_mod.apiMessage.getPDU(req_msg)if req_pdu.isSameTypeWith(p_mod.TrapPDU()):if msg_ver == api.protoVersion1:  # SNMPv1的特殊处理方法,可以提取更加详细的信息print('Enterprise: %s' % (p_mod.apiTrapPDU.getEnterprise(req_pdu).prettyPrint()))print('Agent Address: %s' % (p_mod.apiTrapPDU.getAgentAddr(req_pdu).prettyPrint()))print('Generic Trap: %s' % (p_mod.apiTrapPDU.getGenericTrap(req_pdu).prettyPrint()))print('Specific Trap: %s' % (p_mod.apiTrapPDU.getSpecificTrap(req_pdu).prettyPrint()))print('Uptime: %s' % (p_mod.apiTrapPDU.getTimeStamp(req_pdu).prettyPrint()))var_binds = p_mod.apiTrapPDU.getVarBindList(req_pdu)else:  # SNMPv2c的处理方法var_binds = p_mod.apiPDU.getVarBindList(req_pdu)result_dict = {}  # 每一个Trap信息,都会整理返回一个字典# 下面是这个大字典的键值与嵌套的小字典# 1.3.6.1.2.1.1.3.0 {'value': 'ObjectSyntax', 'application-wide': 'ApplicationSyntax', 'timeticks-value': '103170310'}# 1.3.6.1.6.3.1.1.4.1.0 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'objectID-value': '1.3.6.1.6.3.1.1.5.4'}# 1.3.6.1.2.1.2.2.1.1.2 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'integer-value': '2'}# 1.3.6.1.2.1.2.2.1.2.2 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'string-value': 'GigabitEthernet2'}# 1.3.6.1.2.1.2.2.1.3.2 {'value': 'ObjectSyntax', 'simple': 'SimpleSyntax', 'integer-value': '6'}for x in var_binds:  # 打印详细Trap信息result = {}for x, y in x.items():# print(x, y.prettyPrint())  # 最原始信息打印# 处理信息到字典if x == "name":id = y.prettyPrint()  # 把name写入字典的键else:bind_v = [x.strip() for x in y.prettyPrint().split(":")]for v in bind_v:if v == '_BindValue':continueelse:result[v.split('=')[0]] = v.split('=')[1]result_dict[id] = result# 把字典传到分析模块进行分析analysis(result_dict)return whole_msgdef snmp_trap_receiver(ifname, port=162):  # 创建snmp_trap_receiver服务器,监听CSR1000v发送来的SNMP Trap信息if_ip = get_ip_address(ifname)transport_dispatcher = AsynsockDispatcher()  # 创建实例transport_dispatcher.registerRecvCbFun(cb_fun)  # 调用处理Trap信息的函数# UDP/IPv4transport_dispatcher.registerTransport(udp.domainName, udp.UdpSocketTransport().openServerMode((if_ip, port))  # 绑定到本地地址与UDP/162号端口)transport_dispatcher.jobStarted(1)  # 开始工作print("SNMP Trap Receiver Started!!!")try:transport_dispatcher.runDispatcher()  # 运行except Exception:transport_dispatcher.closeDispatcher()raiseif __name__ == "__main__":# 使用Linux解释器 & WIN解释器snmp_trap_receiver("ens33")

测试结果:

参考资料来源:现任明教教主

使用Python监控SNMP Trap并获取OSPF邻居状态相关推荐

  1. donotage标记、MTU及MTU不匹配问题、OSPF邻居状态记录

    目录 一. donotage标记 二.MTU详解 (1)-- MTU简介 (2)--图解 (3)--!!!邻居关系起不来原因: (4)-- 解决: 三.两种特殊的邻居关系: 四.OSPF邻居状态的记录 ...

  2. zabbix监控SNMP Trap 类型

    环境 两台虚拟机,一台server(公网IP),一台proxy(内网IP). Docker环境, 使用 docker compose启动. 内网里有一台华为网络设备 目的 通过内网下的proxy接收内 ...

  3. SNMP和LLDP获取网络邻居节点

    LLDP协议可以获取网络邻居节点的信息,本次使用eNSP模拟仿真. 1.网络设备的配置 建立如下网络拓扑结构,建立过程可参考使用eNSP搭建一个局域网. 首先需要在网络设备上开启SNMP.LLDP服务 ...

  4. OSPF邻居状态详解

    OSPF 邻居路由器之间之所以要建立邻接关系,是为了相互交换路由信息.在广播网络环境中,并非每台邻居路由器之间都要建立"齐备的" OSPF 邻接关系.OSPF邻居路由器之间会通过 ...

  5. 技术要点|Python监控学生端电脑屏幕自动识别学习状态

    技术要点: 1)使用pillow扩展库进行屏幕截图: 2)使用多线程监听学生端连接: 3)使用TCP协议传输屏幕图像: 4)使用标准库zlib进行数据压缩: 5)使用OCR提取屏幕截图中的文字. 具体 ...

  6. OSPF 协议中各种邻居状态的含义是什么?

    原文链接:https://zhidao.baidu.com/question/174294544.html ospf邻居状态有7种,分别是: down init 2way Exstart Exchan ...

  7. IEEP部署企业级网络工程-OSPF邻居关系故障排除

    OSPF邻居关系故障-现象与排除 一.OSPF邻居关系故障-现象与排除 1.OSPF建立邻居关系时,将检验hello报文中的Area ID .Autype.Authentication.network ...

  8. 使用Zabbix的SNMP trap监控类型监控设备的一个例子

    转载来源 :使用Zabbix的SNMP trap监控类型监控设备的一个例子 :https://www.jianshu.com/p/aa795afdf655 介绍 本文以监控绿盟设备为例. 1.登录被监 ...

  9. 【Zabbix-SNMP trap】使用Zabbix的SNMP trap监控类型监控设备的一个例子

    本文以监控绿盟设备为例. 1.登录被监控的设备的管理系统,配置snmptrap地址指向zabbix服务器或代理服务器. snmptrap地址也叫陷阱. 2.配置或关闭防火墙,并验证是否能在zabbix ...

  10. Python:通过远程监控用户输入来获取淘宝账号和密码的实验(二)

    从今天早上产生了写个获取淘宝账号及密码的想法后,到现在,全天都在看书.调试程序,12小时内写了三篇相关博客,如下: <Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性> ...

最新文章

  1. 赠书 | 热潮下的冷思考,人工智能即将改变的三大领域
  2. restful接口定义的几种方式
  3. c语言的编译过程,程序编译过程
  4. 面试题目集锦 -- 排序算法
  5. Serializable java序列化
  6. 根据服务器ip地址查看虚拟目录,IIS虚拟目录实现与文件服务器网络驱动器映射共享...
  7. 【小程序】【Tips】跨页面全局变量的正确方法 - globalData
  8. Linux开机启动过程(11):start_kernel 初始化(至setup_arch解析cmdline前)
  9. 12年后,索尼重启机器人业务
  10. SQL Server高级查询之常见数据库对象(视图)第五章节
  11. mvc2 在 .net 4.0 下的ValidateInput(false) 无效
  12. 巴巴运动网学习笔记(51-55)
  13. ACM常用算法及练习(2)
  14. ApolloStudio高手之路(12):机器视觉图像匹配定位与激光打标领域深度结合(基于海康威视VisionMaster九点标定、模板快速匹配定位、标定转换以及金橙子EzCad2二次开发)
  15. 林子雨大数据java练习
  16. 简单说说我是怎么找回U盘删除的文件
  17. iphone应用隐私政策_如何在iPhone上“隐藏”联系人以获得更大的隐私
  18. poi导出excel无法打开文件
  19. 工业现场云解决方案的设计与实践
  20. 在Word中将所有指定的标题统一进行升降级操作

热门文章

  1. 谷歌高频面试题-较小的三数之和
  2. 每日算法系列【LeetCode 684】冗余连接
  3. python—PIL使用
  4. Leetcode-链表
  5. 排序算法之——堆排序分析
  6. HITS 算法(Hypertext Induced TopicSelection)
  7. 网上购物与开店赢家随身查
  8. MySQL中的“<=>”操作符
  9. 矩阵论第二章总结:范数理论及应用(脑图)
  10. 西门子200恒压供水梯形图_抚州市谁家的二次叠压供水设备有望统引领消费主流...