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 ...
随机推荐
- [ASP.NET]初试Web API
Web API 1: 需要环境(VS2010/.Net4.0/MVC4 ) http://www.asp.net/web-api/overview/creating-web-apis/creating ...
- Flex 数组问题!
设计一个图形类,来对应一个图形! 这个类大概的代码是: public class ShapeModel extends ... { [bindable] private var _x:Number = ...
- 【PE结构】恶意代码数字签名验证
说明 恶意代码数字签名验证功能,WinverityTrust.CryptQueryObject 代码实现 WinVerifyTrust //------------------------------ ...
- win10 安装IIS说明操作
1.点左下角的Windows,所有应用,找到Windows系统,打开控制面板. 2.进入控制面板之后点击程序,可能你的控制面板和图片里的不太一样,不过没关系,找到程序两个字点进去就行. 3.接下来,在 ...
- 二十三、springboot之session共享
通过redis实现session共享 SpringBoot集成springsession 1.引入依赖(gradle方式) dependencies { compile('org.springfram ...
- 使用管道和cronolog切割日志
安装cronolog git clone https://github.com/fordmason/cronolog ./configure make && make install ...
- nginx开启gzip压缩前端css,js
利用nginx实现前后端分离, nginx配置文件,nginx.conf配置采用gzip压缩: 在server中添加: gzip on; #开启gzip gzip_min_length 1k; #低于 ...
- python小记
最近有匹骚猪用微信骚扰我,我很是气愤, 自学一波脚本: 学习目的:用脚本回击回去,通过py写一个脚本,一次性给别人发n条消息: mac上自学python: brew install python3(自 ...
- wpf 自定义控件展开popup,点击popup之外的部分,popup不能自动关闭
比如textbox点击展开popup,这样popup也是不能自动关闭的.可能是textbox获得了焦点. 可是使用textblock,或者ToggleButton来代替textbox点击展开popup ...
- laravel中短信发送验证码的实现方法
在阿里云上开通短信服务后需要做的: 1,申请签名 2,申请模板 3,创建Accesskey ,值得说的是,可以通过阿里云提供的子用户进行Accesskey的创建,这样可以更安全 4,充值 larave ...