SNMP代理软件开发
SNMP代理模块包括6个子模块:

SNMP协议主要有五种报文get、get-next、set、get-response,trap。
l.get-request操作:从代理进程处提取一个或多个参数值
2.get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值
3.set-request操作:设置代理进程的一个或多个参数值
4.get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。
5.trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。其中前三种报文是管理进程发出的;后两种是代理进程发出的。在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用熟知端口162来接收trap报文。 下面具体讲解5种SNMP操作。
(1) get-request操作 管理站需要主动向agent读取管理对象的值,以获得设备或网络的运行数据和管理信息,进而规划网络管理。SNMP不支持一次读取一张表或表中一行数据。但是当需要读取多个数据,如果分多次读取则会提高网络负担,所以,Get-Request支持一次提交多个对象标识(OID),以便一次获取他们的值,提高网络利用率。
(2) get-next-request操作SNMP不支持一次读取一张表或表中一行数据的读取,Get-Next-Request提供了一种简单的方法。对一个OID进行Get-Next-Request操作,将会收到一个下一个可读取的对象的实例标识,接着对他Get-Next-Request将会得到再下一个实例标识,不断执行下去,将可以读取完整张表。一方面Get-Next-Request实现很简单,但是在读取表中数据的时候却不可避免地有一个大麻烦。表中的数据是以行为单位,每一行又由若干列组成,如果读取一行数据,应该读取这一行的每一列,但是SNMP的Get-Next-Request表时是先列后行,就是说先把第一列中所有行数据读取完,再读取下一列所有行。这样,客户端就需要做很多工作。另一方面,这样显然传递了很多不必要的数据,浪费了带宽。跟Get-Request一样,Get-Next-Request可以在PDU里绑定多个OID或实例标识,以提高效率。同样的,绑定多个OID情况下,相应的Get-Response的PDU同样会返回每一个OID的下一个可用实例标识标识符或相应错误。利用绑定多个OID可以比单个执行Get-Next-Request有效率。
(3) set-request操作网络管理中,有时需要对设备的一些参数、配置、状态进行重新配置。需要一种远程的管理机制,Set-Request就是这样的操作。set操作可以对MIB中权限为:write-only、read-write的对象进行set操作。尽管set操作为改变配置提供了一种比较方便的方法,但是SNMP并没有直接提供操作远程设备的操作。但这不代表SNMP没有这种能力,我们可以借助于Set-Request操作间接地实现这一性能。设备通过MIB定义一个操作的对象,类型为write-only或read-write,约定操作取值,NMS可以对这个对象进行设置,设备以自己的方式得知此对象的值改变后,可以按照对象取值的含义执行操作,从而实现远程控制。set操作也允许一次提供几个set的对象和值,以便在一个PDU里操作多个对象。set操作的成功应答包里包含设置的对象的最新取值(也就是设置的值)。
(4) get-response操作GetResponse对get、set、getNext进行应答,由agent被动地产生并发出。当操作成功地被执行时,GetResponsePDU里包含操作中请求操作的对象oid和他们的值。前面提到,前三种操作都支持在一个PDU里绑定多个对象,相应的GetResponse应答也包含相应变量的值。对于失败的操作,GetResponse需要在PDU里标注相应的错误代码。GetResponse对请求数据包里的request-id域不操作,原数返回,以使请求端能将应答包和请求包准确匹配,同时也可以作为请求和接收方校验重复数据包的依据。当操作成功时,error-status值为noError,error-index为0。variablebindings中的变量的value域填上相应值。当操作失败时,error-status为相应的错误代码,如果错误由variablebindings组中某个对象引起,则error-index为该对象在variablebindings中的索引。
(5) trap操作SNMP的前三种操作是NMS主动发起的操作,网络中存在大量的设备,NMS轮循一次需要一段时间,如果设备发生了重要的状态改变,等到下一次轮循到来,可能已经失去实时性,NMS不能及时掌握设备数据或状态的变化。另一方面,考虑到对网络的占用,又不可能以很小的间隔去轮循设备。所以,需要一种机制让设备能够自主地发出警报,通知状态或配置的改变和其它一些重要事件。Trap就是由agent主动发出的警报PDU,通知NMS重要的改变。RFC 1157中定义了5种常见类型的Trap,用于这些常见网络状态的报警。另外提供了一个自定义的类型,并提供一个PDU单元提供自定义Trap的子代码,用于SNMP的实现者定义和发送自己的Trap。另一方面,但Trap也有一些问题,因为SNMP使用的是UDP,无连接的数据报,Trap有可能不能传递到NMS,另一方面agent不知道NMS是否收到Trap。另外,发送Trap一般都是由重要的状态引起的,某些情况下,系统发生了灾难性的故障,导致Trap也无法发出,比如系统崩溃、网络故障等。所以,一个网络管理系统要综合使用这些操作,互为补充,才能建立一个可靠的管理系统。单独依靠每一种操作都有片面性。 开发流程:
使用MG-SOFT生产相应MIB文件,使用SMI设置数据类型、读写等,将该文件插入相应的节点;
使用MIB2C命令将MIB文件转换为C文件;
生产的C文件,会将SIM的数据类型转换为C语言中的数据类型;同时根据数据类型功能的不同生产,Set/Get Request 等该函数
开发完这些函数后,烧写入交换机中
在对应节点下使用MG-Soft发送PDU(UDP),使用UDP是因为:UDP协议效率较高,用它实现网络管理不会太多地增加大网络负载
在交换机中的代理软件受到PDU后,将SMI数据类型转换为C数据类型;并根据PDU中的信息执行相应的操作;
操作完成后,一般发送getResponse,告知管理软件,修改完以后的状态 测试流程:
开发完成后,交换机就如普通的路由器,计算机连接交换机后会出现一个设置页面;
通过使用Python+Selenium可实现自动化设置WEB上的元素;
设置完成后重启交换机,检验设置的元素的属性是否发生改变。
SNMP代理软件开发的更多相关文章
- SNMP的工作原理&软件开发
SNMP(Simple Network Management Protocol,简单网络管理协议)首先是由IETF的研究小组为了解决Internet上的路由器管理问题而提出的.SNMP的设计原则是简单 ...
- 基于W5500的嵌入式SNMP代理端实现
一 实验背景 近期一个做焊接设备的朋友想在焊机上加入监控的新功能,实时获取焊机的温度.功耗等參数,还可简单控制,实现对集群焊接设备的网络化管理.而这个朋友不想在开发管理系统上花太多精力,想找一个 ...
- 7 家 IT 厂商 6394.5 万元中标天津公安云项目(虚拟化、数据库、软件开发)
http://mp.weixin.qq.com/s/kjum54HJorGTPtZiM-HE1g 天津市公安局云计算平台项目分为:大数据部分.虚拟化部分.数据库部分,软件开发部分,预算分别为:2350 ...
- 软件开发学习笔记 <一> UML
UML http://www.uml-diagrams.org http://www.umlchina.com/index.htm 统一建模语言(UML)始于1997年的一个OMG(对象管理组织)标准 ...
- 敏捷软件开发:原则、模式与实践——第8章 SRP:单一职责原则
第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...
- SaaS系列介绍之十四: SaaS软件开发分析
1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力 ________B.F.Skinner<计算机科学> SaaS模式不同于传 ...
- 敏捷软件开发——第8章 SRP:单一职责原则
第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...
- java 软件开发面试宝典
一. Java 基础部分........................................................................................ ...
- 《软件开发与创新:ThoughtWorks文集:续集》
<软件开发与创新:ThoughtWorks文集:续集> 基本信息 原书名:The thoughtWorks anthology, volume 2:More essays on softw ...
随机推荐
- kombu源码Producer收获一
celery内置了kombu库,看了一下kombu的源码,从官网最简单的一个例子来分析---消息发布,源码如下: from __future__ import absolute_import, uni ...
- .NET面试题系列(四)计算机硬件知识
计算机的硬件组成 总线:贯穿整个系统的是一组电子管道(其实就是传输数据的线路),也就是总线.总线传送的是字,字的大小与系统相关,比如在32位操作系统当中, 一个字是4个字节. I/O设备:I/O设备是 ...
- ASP.NET MVC学习(五)之MVC原理解析
ASP.NET MVC 请求生命周期 生命周期步骤概览 当我们对ASP.NET MVC网站发出一个请求的时候,会发生5个主要步骤: 步骤1:创建RouteTable 当ASP.NET应用程序第一次启动 ...
- Flex 编写 loading 组件
Flex 界面初始化有时那个标准的进度条无法显示,界面长时间会处理空白的状态!我们来自定义一个进度条, 这个进度条加载在 Application 应用程序界面的 <s:Application 标 ...
- 图的最短路径-----------Dijkstra算法详解(TjuOj2870_The Kth City)
做OJ需要用到搜索最短路径的题,于是整理了一下关于图的搜索算法: 图的搜索大致有三种比较常用的算法: 迪杰斯特拉算法(Dijkstra算法) 弗洛伊德算法(Floyd算法) SPFA算法 Dijkst ...
- E1. Array and Segments (Easy version)(暴力) && E2. Array and Segments (Hard version)(线段树维护)
题目链接: E1:http://codeforces.com/contest/1108/problem/E1 E2:http://codeforces.com/contest/1108/problem ...
- Spring4总结
1. 明确Spring的主要作用就是为代码“解耦”,降低代码间的耦合度.使用IoC使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了,而是由Spring容器统一管理,自动 ...
- 『Matplotlib』数据可视化专项
一.相关知识 官网介绍 matplotlib API 相关博客 matplotlib绘图基础 漂亮插图demo 使用seaborn绘制漂亮的热度图 fig, ax = plt.subplots(2,2 ...
- CefSharp.OffScreen.Example
namespace CefSharp.OffScreen.Example { public class Program { private static ChromiumWebBrowser brow ...
- 『记录』Android参考资料
欢迎留言推荐好的教程.资料.博客及作者等. 『记录』Android参考资料 1.前期环境 Android Studio使用Git Android Studio快捷键总结 Android Studio及 ...