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代理软件开发的更多相关文章

  1. SNMP的工作原理&软件开发

    SNMP(Simple Network Management Protocol,简单网络管理协议)首先是由IETF的研究小组为了解决Internet上的路由器管理问题而提出的.SNMP的设计原则是简单 ...

  2. 基于W5500的嵌入式SNMP代理端实现

     一 实验背景 近期一个做焊接设备的朋友想在焊机上加入监控的新功能,实时获取焊机的温度.功耗等參数,还可简单控制,实现对集群焊接设备的网络化管理.而这个朋友不想在开发管理系统上花太多精力,想找一个 ...

  3. 7 家 IT 厂商 6394.5 万元中标天津公安云项目(虚拟化、数据库、软件开发)

    http://mp.weixin.qq.com/s/kjum54HJorGTPtZiM-HE1g 天津市公安局云计算平台项目分为:大数据部分.虚拟化部分.数据库部分,软件开发部分,预算分别为:2350 ...

  4. 软件开发学习笔记 <一> UML

    UML http://www.uml-diagrams.org http://www.umlchina.com/index.htm 统一建模语言(UML)始于1997年的一个OMG(对象管理组织)标准 ...

  5. 敏捷软件开发:原则、模式与实践——第8章 SRP:单一职责原则

    第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...

  6. SaaS系列介绍之十四: SaaS软件开发分析

    1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力                     ________B.F.Skinner<计算机科学> SaaS模式不同于传 ...

  7. 敏捷软件开发——第8章 SRP:单一职责原则

    第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...

  8. java 软件开发面试宝典

    一. Java 基础部分........................................................................................ ...

  9. 《软件开发与创新:ThoughtWorks文集:续集》

    <软件开发与创新:ThoughtWorks文集:续集> 基本信息 原书名:The thoughtWorks anthology, volume 2:More essays on softw ...

随机推荐

  1. 正则tips

    在啃Sizzle源码,被几个正则表达式给难住了,写了一下正则demo,记录一下 1,按照定义[]和(?:)里的内容不计入捕获组的数目 2,捕获组的计数顺序是,从大到小,同级从左到右 例如 var re ...

  2. 在Emacs中启用Fcitx输入法

    安装fcitx输入法,在 ~/.xinitrc文件中添加如下内容 (我用startx启动图形环境,所以在~/.xinitrc中配置X会话) export LC_CTYPE="zh_CN.UT ...

  3. alert换行警示

    alert("再次向您问好!在这里,我们向您演示" + '\n' + "如何向警告框添加折行.")

  4. [CEOI2015 Day2]世界冰球锦标赛 (双向搜索)

    题目描述 [CEOI2015 Day2]世界冰球锦标赛译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行.Bobek ...

  5. Spark笔记之数据本地性(data locality)

    一.什么是数据本地性(data locality) 大数据中有一个很有名的概念就是"移动数据不如移动计算",之所以有数据本地性就是因为数据在网络中传输会有不小的I/O消耗,如果能够 ...

  6. __class__属性与元类

    class M(type): def __str__(self): return "gege" aa = "ccf" cc = "ccc" ...

  7. js input输入框的总结

    一.输入框只能输入数字 原文:https://www.cnblogs.com/sese/p/5872144.html 分享下js限制输入框中只能输入数字的方法,包括整数与小数,分享几个例子,有需要的朋 ...

  8. 001_docker-compose构建elk环境

    由于打算给同事分享elk相关的东西,搭建配置elk环境太麻烦了,于是想到了docker.docker官方提供了docker-compose编排工具,elk集群一键就可以搞定,真是兴奋.好了下面咱们开始 ...

  9. Java基础92 MySQL插入当前系统时间

    1.时间格式 用yyyy表示年份(year). -- y  表示年的最后一位,yy 表示年的最后2位,yyy 表示年的最后3位,yyyy 用4位数表示年用MM表示月份(month).-- mm 用2位 ...

  10. SNMP中MIB2所有主要节点

    系统组:system组包含以下对象集(.1.3.6.1.2.1.1): 对象名:sysDescr(1) OID:system.1 对象类型:DisplayString[255] 访问模式:只读 描述: ...