《网络管理 第8章课件.ppt》由会员分享,可在线阅读,更多相关《网络管理 第8章课件.ppt(75页珍藏版)》请在三一办公上搜索。
1、Page 1,第8章 网络管理开发,Page 2,本章将在前文详细分析典型网络管理系统功能和使用的基础上,具体介绍Windows系统下网络管理软件开发的流程和方法。,Page 3,8.1 网络管理开发概述,通用的网络管理应用程序通常称做网络管理平台,它提供一组通用的网络管理功能,也提供实现专用管理程序的工具,支持基本的管理功能。,Page 4,无论使用什么管理平台,设计网络管理应用程序都要首先确定以下内容: 确定被管理节点的网络地址(IP地址,IPX地址,DNS主机名); 确定远程目标的端口号(UDP161,专用端口号大于1024); 确定接收陷入的端口号(UDP162,专用端口号大于1024
2、);,Page 5,确定团体名(通常为public,如果使用两个团体名,则read-only团体名为public,read-write团体名为private); 确定响应定时器等待时间间隔; 确定重复请求次数; 确定轮询时间间隔。,Page 6,8.1.1 网络管理应用程序的基本功能,网络管理应用程序的基本功能是辅助管理员监视网络,发现活动的网络设备,排除网络故障,具体包括以下内容:网络发现 管理站轮询MIB编译器和数据库MIB浏览器MIB搜索器陷入信息记录,Page 7,网络发现 网络发现通常包含两部分内容。首先是探测活动站点,这可以通过向子网中的所有站点发送ICMP报文,把收到应答的站点标
3、记为活动站点;或者读取ARP缓冲区以及本地路由器和管理主机的接口表,发现可连接的设备,然后有选择的发送ICMP报文。其次是标识SNMP管理站点,这可以通过向活动站点发送GetRequest报文,获取有关信息。,根据收集的信息可以建立网络发现数据库,视其复杂性可用Text文件、Windows注册表或实际的数据库引擎(如Microsoft ACCESS等)实现。最后还要建立网络拓扑映像,把发现的各个子网拓扑结构用图形表示出来,也可用多个窗口分别显示。,Page 8,管理站轮询。 定期轮询活动站点,可以用ICMP报文检查站点活动状态,或者利用SNMP收集管理信息。,Page 9,MIB编译器和数据库
4、 MIB模块以ASN.1编写,以ASC文件存储,经编译后转换成代理可利用的格式。MIB数据库是MIB模块的集合。简单的应用可以不使用MIB数据库,这种情况下管理员发送请求时要手工输入变量的OID、数据类型和数据值,同时要记住常用的OID,解释需要的MIB模块。复杂的应用通过MIB数据库把对象描述符变换成OID(数字形式的子标识符),确定存储的数据类型和访问方式。,Page 10,MIB浏览器 该程序的功能是用搜索目录树的方法,定位和显示MIB中的被管理对象的值,可以通过向某个MIB对象发送GetNextRequest请求,接收和显示变量绑定表中的内容。,Page 11,MIB搜索器 该程序是比
5、较简单的浏览器,用于发现被管理对象的MIB。在SNMP中没有标准的方法使得被管理节点公布其名字、版本号、MIB模块的内容及其支持的对象。MIB搜索器可以动态的发现各个站点中可以访问的对象,但只能检索存储在变量中的MIB信息,其他MIB模块数据,如对象标识符、访问模式等不能检索。因而MIB搜索器不能替代经过编译的MIB模块。,Page 12,陷入信息记录 管理应用接收到一个陷入报文后,可以在拓扑结构图上显示一个图标,或弹出一个消息窗口,甚至发出声音告警。同时把陷入数据及其时间和地址写入陷入记录文件。,Page 13,8.1.2 SNMP编程任务,SNMP是网络管理程序和SNMP代理之间的通信协议
6、,主要用来管理网络设备,到目前为止几乎所有的网络产品都要为其提供支持,以方便管理员的管理和软件开发人员的开发。 SNMP编程主要包括两大部分:网络管理程序的开发和SNMP代理软件的开发。网络管理程序主要运行在管理端,代理软件则运行在特定的网络被管设备上。,Page 14,1SNMP编程内容从客户机/服务器的角度分析,网络管理程序和SNMP代理既是客户机,同时又充当服务器的角色。作为服务器,网络管理程序监听UDP端口162,接收SNMP代理发送的陷阱消息;SNMP代理监听UDP端口161,接收网络管理程序发送的各种查询请求。作为客户机,网络管理程序可以随时向SNMP代理发送查询请求,而SNMP代
7、理则可以随时向网络管理程序发送陷阱信息。,Page 15,开发基于SNMP的网络管理程序,和开发其他基于客户机/服务器模式的网络应用程序没有本质的区别。如果程序不准备处理陷阱信息,那么网络管理程序实际上就是一个普通的客户端程序。开发主要包括以下内容:构造正确的PDU,组成SNMP报文;对发送(接收)的SNMP报文进行BER编码(解码);接收并处理陷阱信息。,BER编码处理后的SNMP报文,使用UDP进行封装,并设置服务器端(SNMP代理)IP地址和端口号161。接收到返回的应答包后,再对SNMP报文进行解码处理。,Page 16,SNMPv1的报文由SNMP版本号、共同体字符串和一个附加的PD
8、U结构组成。BER编码的对象是整个报文,而不仅仅是PDU部分。UDP报文的数据部分,就是一个经过BER编码处理的完整SNMP报文。图8-1所示是网络管理程序发送的SNMP请求报文使用的UDP报文格式。,Page 17,2SNMP变量 SNMP变量是运行期间SNMP代理维护的被管理对象实例。网络管理程序通过查询SNMP变量的值,获知被管理设备的网络运行状态;通过设置SNMP变量值,达到远程配置网络参数的目的。无论是查询还是设置操作,都离不开SNMP变量。,Page 18,表产生的SNMP变量可以看作一个多维动态数组,如表中有n个列对象,就产生一个n维动态数组。 变量标识符就是列对象实例标识符。
9、SNMP变量对网络管理程序的开发十分重要,管理过程的实质是程序对于SNMP变量的操作。,SNMP代理中有些SNMP变量是由代理所实现的MIB所决定的。MIB中的标量对象只有一个实例,因此一个标量对象在代理中只产生一个SNMP变量。 列对象的情况相对复杂。虽然列对象可以有多个对象实例,但运行期间,同一个表中列对象的实例数是相等的。由MIB中表产生的SNMP变量数要根据实际情况而定。,Page 19,3MIB表的操作 MIB表结构中的列对象往往包含着一组相关的网络信息,程序中经常需要对表进行操作,有时是获取一个列对象的所有实例,有时是获取几个列对象的所有实例。根据表的结构以及SNMP GetNex
10、t操作特点,使用GetNext完成表的检索。,只要产生的应答PDU不超过大小限制,一次操作中可以绑定多个SNMP变量,即一次取回多个列对象实例。因此,在对表进行检索操作时,有两种选择,可以在一次SNMP GetNext操作中取回所有相关列对象的实例,即一次取回一行中的所有实例;或者每次取回列对象的一个实例,循环操作直至取回所有相关的SNMP变量。,Page 20,8.1.3 基于SNMP的网络管理应用开发方法,在Windows下实现SNMP的编程,可以采用Winsock接口,在161和162端口通过UDP传送信息。 WinSNMP API函数实现了基本的SNMP功能,使用SNMP消息完成SNM
11、P实体间的通信。 使用如UCD SNMP、PowerT、SNMP+等的支持SNMP功能的第三方软件包能够大大简化Windows环境下的SNMP编程。,Page 21,8.2Windows SNMP服务,基于Windows的SNMP服务采用由管理系统、代理和其他相关组件组成的分布式体系结构,Windows计算机既可以是SNMP管理者,也可以是安装SNMP代理的被管对象。当Windows计算机发生重大事件,SNMP服务就会把状态信息发送给一个或多个管理主机。,Page 22,8.2.1 Windows SNMP服务基本概念,Windows 32系统支持并发的系统服务,一个Windows 32系统服
12、务可以在后台运行,它的开始和停止无须系统重启动。服务是一种特殊的Windows32应用软件,它通过Windows32API与Windows NT的服务控制管理器(SCM)连接,一般运行在后台,作用是监视硬件设备和其他系统进程,提供访问外围设备和操作系统辅助功能的能力。,系统服务在系统启动时或用户登录时自动开始运行,当用户退出或系统关机时停止运行。SNMP就是运行于Windows32系统之上的一个服务软件,支持SNMP管理站和代理功能,包括发送和接收陷入的能力。,Page 23,Windows 2000系统的SNMP服务包括两个应用程序。一个是SNMP代理服务程序Snmp.exe,另一个是SNM
13、P陷入服务程序Snmptrap.exe。 Snmp.exe接收SNMP请求报文,根据要求发送响应报文,能对SNMP报文进行语法分析,ASN.1表示和BER编码/译码,也能发送陷入报文,并处理与WinSock API的接口。 Snmptrap.exe监听发送给NT主机的陷入报文,然后把其中的数据传送给SNMP管理API。,Windows 95/98中没有陷入处理程序。Windows Server 2003中SNMP的内部体系结构由管理端函数库和代理端函数库两大部分实现,其中部分函数功能出现交迭,既用于管理端,也用于代理端。图8-3所示为Windows Server 2003 SNMP服务体系结构
14、。,Page 24,Page 25,Windows的SNMP代理服务是可扩展的,即允许动态地加入或减少MIB信息。这意味着程序员不必修改和重新编译代理程序,只需增加或删除一个能处理指定信息的子代理就可以了。Microsoft把这种子代理叫做扩展代理,它处理私有的MIB对象和特定的陷入条件。当SNMP代理服务接收到一个请求报文时,它就把变量绑定表的有关内容送给对应的扩展代理,扩展代理根据SNMP的规划对其私有的变量进行处理,形成响应信息。,编写扩展代理程序是开发网络管理系统的程序员的责任,程序员可根据需要随时增加或删除系统的扩展代理程序。SNMP代理服务和扩展代理以及陷入服务与Windows 3
15、2操作系统的关系如图8-4所示。,Page 26,Page 27,WinSNMP API是Microsoft为SNMP开发的应用程序接口,是一组用于构造SNMP服务和扩展代理和SNMP管理系统的库函数。图8-5所示为SNMP代理与SNMP API交互作用的详细过程。,Page 28,SNMP报文通过UDP/IP服务经WinSock API传送到SNMP代理。SNMP代理调用SNMP API对报文译码和认证检查,然后把变量信息传送给有关的扩展代理,经扩展代理处理形成响应信息后又返回给SNMP代理,再由SNMP代理装配成GetResponse报文,交给WinSock API回送给发出请求的管理站。
16、如果请求的MIB对象没有得到任何扩展代理的支持,则返回noSuchName错误。,陷入服务监视从WinSock API传来的陷入报文,然后把陷入数据通过命名管道传送给SNMP的管理API。管理API是Microsoft为开发SNMP管理应用提供的动态链接库,是SNMP API的一部分。图8-6所示为SNMP陷入、管理应用、管理API及WinSock API间的关系。,Page 29,Page 30,管理应用程序从管理API接收数据,向管理API发送管理信息,并通过管理API与WinSock通信,实现网络管理功能。,管理者向代理请求的信息包含在MIB中。MIB是一组可管理的对象,这些对象代表了与
17、网络设备有关的各种类型的信息。 Windows SNMP服务支持Internet MIB-2、LAN Manager MIB-2、DHCP MIB、HTTP MIB等。,Page 31,8.2.2Windows SNMP服务的安装 配置 测试,Windows SNMP服务的安装方法同其他服务的安装方法类似,但安装之前必须首先安装TCP/IP。在Windows 2000/XP/2003中安装和配置SNMP服务的方法一致。,Page 32,1安装SNMP服务StartControl PanelAdd Or Remove ProgramsAdd/Remove Windows ComponentsWi
18、ndows组件向导Management And Monitoring Tools,但不要选中该复选框,仅仅选择该入口即可。,单击“Details(详细)”按钮打开窗口,然后选中在“Simple Network Management Protocol(简单网络管理协议)”旁边的复选框。最后单击“OK(确定)”按钮返回“Windows组件向导”窗口。单击“Next(下一步)”按钮,如果出现了相关提示,则插入Windows的安装光盘。,Page 33,2配置SNMP服务 完成了上述步骤之后,打开服务控制面板,并找到SNMP服务,然后使用正确的通讯字符串来配置SNMP。双击该服务,就可以打开服务的属性
19、页面,如图8-9所示,用户可以在“SNMP Service的属性”对话框中完成服务设置,具体配置情况不再赘述。注意在“安全”选项卡中可设置访问团体号及主机地址,通常情况下使用系统默认的配置即可(默认情况下团体名为public)。,Page 34,Page 35,Page 36,3测试SNMP服务 SNMPUTIL(Snmptuil.exe)是微软Windows 2000资源工具中的一个实用程序,也是网络管理系统中的管理进程,可用于测试SNMP服务,也可以测试用户开发的扩展代理。SNMPUTIL是MS-DOS程序,是基于微软公司的管理API编写的,但在Windows 98系统中没有管理API,所
20、以该程序只能运行在Windows NT/2000/XP/2003及更高版本的操作系统中,具体使用语法如下。,Page 37,usage: snmputil get|getnext|walk agent community oid oid . snmputil trap 其中agent表示代理进程的IP地址,community表示团体名,oid表示MIB对象ID。使用SNMPUTIL发送GetRequest或GetNextRequest报文,可以遍历整个MIB子树,可以完成查看本地计算机系统信息、连续开机时间、联系人、用户列表、运行的进程等功能,实现对SNMP服务的测试。,Page 38,SNM
21、PUTIL还有一个trap的参数,主要用来陷阱捕捉,它可以接受代理进程上主动发来的信息。如果在命令行下面输入snmputil trap后按“Enter”键,然后用错误的团体名来访问代理进程,这时候就能收到代理进程主动发回的报告。,使用SNMPUTIL可以实现对SNMP基本服务的测试,但由于Snmptuil.exe只是一个简单的工具,没有包含Set命令,因此不能实现设置操作。此外,在Win2000/XP安装光盘中附带了一个图形界面的测试程序Snmputilg.exe,用户可以启动光盘中/support/tools/setup.exe安装此测试程序。该程序使用方法与Snmputil.exe类似,具
22、体不再赘述。,Page 39,8.3 Windows网络管理应用程序开发,在Windows系统中开发网络管理应用程序需要使用系统提供的API函数,主要包括4部分,即扩展代理API、管理API、使用程序API和WinSNMP API。编写扩展代理和SNMP管理应用程序都要使用这些库函数。,Page 40,8.3.1 Windows SNMP应用程序接口,1SNMP扩展代理API函数SNMP扩展代理API函数定义SNMP服务和第三方SNMP扩展代理DLL间的接口。应用程序使用这些函数来解析由引入的SNMP PDU指定的变量绑定。扩展代理AP共包括6个API函数:,SnmpExtensionClos
23、e SnmpExtensionInit SnmpExtensionInitEx SnmpExtensionQuery SnmpExtensionQueryEx SnmpExtensionTrap,Page 41,2SNMP管理API函数 SNMP管理API函数定义第三方SNMP管理端应用程序与管理函数动态链接库MGMTAPI.dll间的接口。此DLL与SNMP陷入服务(Snmptrap.exe)一起工作,并能与一个或多个第三方管理端应用程序相结合。第三方管理端应用程序可以调用这些管理API函数实现发送SNMP请求报文,接收响应等管理操作。SNNP管理API由7个函数组成。,SnmpMgrClo
24、se SnmpMgrGetTrap SnmpMgrOidToStr SnmpMgrOpen SnmpMgrRequest SnmpMgrStrToOid SnmpMgrTrapListen,Page 42,3SNMP实用API函数 SNMP实用API函数简化SNMP数据结构的操作并提供在SNMP应用程序开发过程非常有用的函数集。,4WinSNMP API函数WinSNMP API为在Windows下开发基于SNMP的网络管程序提供解决方案,为SNMP网管开发者提供了必须遵循的开放式单一接口规范,定义了过程调用、数据类型、数据结构和相关的语法。,Page 43,WinSNMP API具有以下特点
25、: 为基于SNMP开发网络管理应用程序提供接口; 支持SNMPv1和SNMPv2C; 除支持SNMP管理端功能外,WinSNMP API2.0还支持SNMP代理功能; 支持32位应用程序和多线程; 适应于Windows2000及后续操作系统; 比SNMP管理API提供更多功能的函数。,WinSNMP API以函数的形式封装了SNMP的各部分,且针对SNMP是使用UDP的特点而设置了消息重传和超时机制等。基于WinSNMP的应用程序必须通过WSNMP32.DLL访问WinSNMP API函数。WinSNMP API提供了7大类,约50多个API函数。,Page 44,8.3.2WinSNMP编程
26、概念,1SNMP消息与异步模式 Win32编程模式的一个很大特点就是消息驱动。WinSNMP采用了异步消息驱动模式,主要基于两个原因: 异步消息驱动模式适合于面向对象理论、SNMP分布式管理模型以及Windows编程、运行环境。 SNMP在管理站和代理间基于数据报传送数据,没有在远程实体之间建立实际通道(虚电路)。,Page 45,消息驱动程序必须响应各种重要事件,有些则完全依赖于异步关系。、WinSNMP API中几乎所有函数都含有异步因素,有些则是完全异步的。有3个非常重要的异步函数: SnmpSendMsg SnmpRecvMsg SnmpRegiste WinSNMP的整个编程模式就是
27、基于异步的。,简单网络管理协议使用消息来通信,并在远程SNMP实体间交换信息。SNMP消息包含协议数据单元及相关RFC定义的附加消息头元素。PDU是包含SNMP数据成分(或域)的数据包。SNMP消息的格式对SNMPv1和SNMPv2都相同。但是,SNMPv2支持更多的PDU类型。,Page 46,2WinSNMP支持级别 WinSNMP实现提供SNMP通信支持的多个级别: Level 0:只支持消息编码与解码,不支持SnmpSendMsg SnmpRecvMsg SnmpRegister。 Level 1:支持0级通信和在SNMPv1框架下与SNMP代理实体相互操作。 Level 2:支持1级
28、通信和在SNMPv2C框架下与SNMP代理实体相互操作。 Level 3:支持2级通信和与其他SNMPv2管理站通信。,Page 47,SNMP支持SNMPv1与SNMPv2的共存,所以WinSNMP提供对两个版本协议的支持。 SnmpStartup函数能够返回当前WinSNMP实现支持的SNMP通信的最大级别。如果WinSNMP管理应用程序使用此实现只是SNMP消息编码和解码,则应用程序必须进行由实现执行的需要转换。,Page 48,3协议数据单元(PDU) 一个PDU包括一个变量绑定列表,PDU的结构受限于WinSNMP服务。WinSNMP管理器应用程序用HSNMP_PDU类型句柄可以存取
29、PDU。 WinSNMP管理器应用程序在它调用SnmpSendMsg函数或SnmpEncodeMsg函数以前必须产生一个PDU。,应用程序可以提取或修改PDU的数据元素,释放为PDU分配的资源。为了执行这些操作,管理器应用程序使用WinSNMP PDU函数。,Page 49,4陷入从SNMPv1转换到SNMPv2C 当WinSNMP实现从SNMPv1框架下的实体操作中收到陷入时,它把此陷入转换到SNMPv2C格式。因此,当SnmpRecvMsg传送陷入时它总是用SNMPv2C格式。RFC1908详细说明从SNMPv1到SNMPv2C转换陷入格式的规则。,WinSNMP管理器应用程序可以检查变量
30、绑定列表中的最后一个变量绑定入口来决定入口是否是从SNMPv1转换到SNMPv2C格式的陷入。,Page 50,5本地数据库 WinSNMP服务本地数据库存储以下信息。50 (1)网络协议信息和版本号:依据该信息决定传输中使用的传输协议和SNMP版本。 (2)实体和上下文转换模式:依据该信息向用户提供界面友好的SNMP实体和上下文。 (3)重发策略:依据该信息决定是否进行重发,并存储每一个目的连接实体的超时期限和重发次数。,6重发策略WinSNMP管理器应用程序可以用各种方式进行SNMP操作请求。应用程序可以给SNMP代理发送几个请求但不等待应答,或发送单个的请求并等待应答。由于SNMP可以在
31、多个传输协议上执行,故传送机制和可靠性会改变。,Page 51,当编写WinSNMP管理器应用程序时,必须决定基于应用程序发布操作请求的方式和通信操作需要的可靠等级,然后,必须选择重发策略并实现此重发政策。,Page 52,7实体和上下文转换模式 WinSNMP管理应用程序通过设定实体和上下文转换模式可以指定实体和上下文参数的解释和翻译。WinSNMP实现保存此模式于数据库中。,8WinSNMP数据管理概念 使用WinSNMP管理器API进行编程时,采用的主要数据管理概念包括: 对象标识符 WinSNMP描述符 资源句柄对象 C类型串 分配WinSNMP内存对象。,Page 53,9陷入和通知
32、 WinSNMP管理器应用程序必须用SNMPAPI_ON调用SnmpRegister函数注册接收陷入和通知。应用程序可以通过用SNMPAPI_OFF调用此函数卸载和使其不能进行陷入和通知。,Page 54,8.3.3WinSNMP编程模式,WinSNMP程序主要由WinSNMP应用程序、 WinSNMP会话、WinSNMP服务3部分组成。WinSNMP服务为应用程序提供以下服务。,实现管理实体间的管理通信。管理实体可以处于本地计算机,也可以是通过局域网、广域网或者Internet连接。 隐藏SNMP、ASN.1语法及BER编码在传输过程中的具体细节。 验证接收到的SNMP PDU的正确性,并拒
33、绝接收无效的PDU。 依据相关RFC规定转换SNMPv2 PDU类型。 为使SNMPv2能够向下兼容SNMPv1,在发送SNMPv1陷入时,将该陷入转换为SNMPv2陷入。 应用程序重发策略服务。 设定实体和上下文转换模式。,Page 55,打开WinSNMP应用程序; 打开一个或多个WinSNMP会话; 注册接收陷入或通知; 产生一个或多个变量绑定列表结合到一个PDU中; 提交一个或多个SNMP操作请求; 检取SNMP操作请求的应答; 处理请求应答; 关闭每一个WinSNMP会话; 关闭WinSNMP应用程序。,WinSNMP一般编程任务包括管理对象标识符、释放WinSNMP描述符、设定实体
34、和上下文转换模式、管理重发政策。使用WinSNMP开发网络管理应用的基本编程步骤如下:,Page 56,由于WinSNMP API按照SNMP封装了各种操作,包括PDU、VarBindList以及协议操作的各项函数。在具体开发WinSNMP应用时,可以按照SNMP的描述调用WinSNMP相关函数,完成一次完整的SNMP。下面将具体介绍WinSNMP的一般编程模式,分为发送请求消息与接受响应消息两部分来实现。,Page 57,1WinSNMP发送请求消息WinSNMP发送请求消息的过程可以分为4个部分,主要有: WinSNMP的初始化 协议数据单元的创建 发送信息 资源的释放。,Page 58,
35、(1)WinSNMP的初始化 初始化的具体过程如下: 调用SnmpStartup函数启动WinSNMP。 调用SnmpOpen或SnmpCreateSession函数创建一个会话。 调用SnmpSetTranslateMode设置传输模式。 调用SnmpStrToEntity创建实体。 调用SnmpSetRetransmitMode函数设置重传模式。 调用SnmpSetRetry函数设置重传次数。 调用SnmpSetTimeout函数设置超时时间。 调用SnmpStrToContext创建上下文句柄。,Page 59,(2)创建协议数据单元 在创建PDU之前,必须先创建变量绑定表。 调用Snm
36、pStrToOid函数创建读取对象的对象标识符。 调用SnmpCreateVbl函数创建变量绑定表。 调用SnmpSetVb函数往变量绑定表中添加变量绑定。,Page 60,(3)发送信息 首先调用SnmpStrToContext和SnmpStrToEntity函数创建共同体字符串和代理实体,然后,调用SnmpSendMsg 函数发送信息。SnmpSendMsg(session,NULL,hAgent,hView,m_hpdu);,Page 61,(4)释放资源 最后调用SnmpFreeVbl、SnmpFreePdu、SnmpFreeEntity、SnmpClose等函数释放所有分配的资源。,
37、Page 62,2WinSNMP接收响应消息 SnmpCreateSession函数请求WinSNMP为WinSNMP管理应用程序打开一个会话,应用程序可以指定如何通告WinSNMP会话发来的消息和异步时间,实现WinSNMP异步消息驱动模式,函数原型为,Page 63,HSNMP_SESSION SnmpCreateSession(HWND hWnd, /通知窗口的句柄UINT wMsg, /窗口通知消息SNMPAPI_CALLBACK pfnCallback, /通知回调函数LPVOID lpClientData); /指向回调函数数据的指针,Page 64,下面为WinSNMP接受响应消
38、息的步骤。 (1)调用SnmpRecvMsg函数接收数据。 (2)调用SnmpGetPduData函数从PDU中析取出数据。 (3)调用SnmpCountVbl获得变量绑定列表中变量绑定的个数。 (4)调用SnmpGetVb函数取得PDU变量绑定表中每个变量绑定的对象标识符及其对应的值。 (5)调用SnmpOidToStr函数将Oid转换为字符串,并将接收到的Oid与发送数据包的各OID做比较,以决定各自值的归属。,Page 65,8.4SNMP+软件包,SNMP+是HP公司用C+语言开发的一个开源类库,可以在http:/下载到最新的版本。本书中介绍的版本为V3.2.18。,SNMP+软件包充
39、分利用了面向对象的编程技术,所涉及的数据结构全部封装在相应的类中。底层操作细节完全透明,使用者只需设置好相应参数,采用调用对象成员的方法,就可完成SNMP操作。,Page 66,8.4.1SNMP+简介,1SNMP+组成文件(1)*.cpp文件。(2)*.h文件。,2SNMP+特点(1)内存管理。(2)可移植性强。 (3)提供超时和重传机制。(4)阻塞模式与非阻塞模式的网络请求。 (5)支持Trap的发送和接收。,Page 67,3编译SNMP+软件包 由于下载得到是源文件,开发使用时可将文件加入到程序中,也可将SNMP+类编译成链接库,直接在程序中调用。下面将介绍在VC+6.0环境中如何将S
40、NMP+软件包编译成静态连接库。,Page 68,8.4.2SNMP+软件包中的类介绍,如同MFC是对Win32 API进行的再封装一样,Windows下的SNMP+是在WinSNMP的基础上进行的二次封装。图8-11所示为SNMP+在程序开发环境中的层次结构。,Page 69,SNMP+包含了70多个类,主要可分为: 数据类型类,封装了SMI中定义的ASN.1数据类型和SNMP中定义的数据类型; 变量绑定类,封装了SNMP消息中的变量绑定数据结构; PDU类,封装了SNMP消息中的PDU部分; Target类,封装了构成一个SNMP消息所需要的全部信息; SNMP类,用来完成网络连接、发送消
41、息、接收Trap等网络操作; 此外,还包括用于支持上述类功能的支持类和SNMPv3消息加密、用户认证类等。,Page 70,1数据类型类 所有数据类型都继承自一个抽象类:SnmpSyntax, 类中定义了几个常用的方法以及一个数据类型为SmiVALUE结构类型的属性smival,用来存放ASN.1的值。SmiVALUE被定义为一个union类型,用以保存各种不同的数据类型。,Page 71,2Vb类SNMP中的变量绑定是一个对象标识符和一个ASN.1值组成的序列,SNMP+中使用类Vb封装了这种数据结构。Vb类中使用一个Oid对象存储一个对象标识符,一个指向SnmpSyntax类型的指针绑定一
42、个ASN.1值,以及对这两个数据进行操作的一组方法。,3Pdu类SNMP+使用Pdu类封装SNMP报文中的PDU结构。Trap PDU的结构不同于其他PDU结构,Pdu类中有存储这些信息的成员变量,包括一个request id、错误状态和错误索引、变量绑定部分和Trap PDU包含的信息。,Page 72,4SnmpTarget类SnmpTarget类封装了SNMP管理工作站一次SNMP通信活动的目标代理信息,可以将SnmpTarget看做一个网络设备中运行的SNMP代理。SnmpTarget不仅封装了网络地址和端口信息,还封装了诸如共同体字符串、重传次数、接收时限等通信策略。SnmpTarg
43、et类也是一个抽象类,目前版本有两个子类:Ctarge类和UTarget类,前者基于SNMPv1和SNMPv2,后者基于SNMPv3。,Page 73,5Snmp类Snmp类封装了一次SNMP通信活动建立的UDP连接。在所有的类中,只有该类使用网络资源和代理进行了通信连接。Snmp类作做了通信活动中大部分的工作,程序员所做的工作只需要声明一个该类的对象,并设置对应的参数即可。 Snmp类主要完成以下功能:处理通过UDP或IPX层的数据传输;从PDU中获取Vb对象绑定到PDU;接收或发送PDU;管理所有可用的SNMP资源。,Page 74,SNMP类的操作步骤:,Page 75,8.5小结,本章分析了网络管理应用程序的基本功能,介绍了在Windows平台下开发基于SNMP的网络应用程序的基本方法。 使用WinSNMP API开发网络应用时,需要首先了解Windows系统中SNMP服务的运行原理和Windows编程特点,在此基础上通过调用相关的API函数实现发送请求、接收处理陷入等编程任务。,SNMP+是用来在Windows平台下开发SNMP程序的软件包,使用该软件包可以加快程序开发速度,本章第4节给出了软件包中包含的基本类结构,并通过示例的方式介绍了如何使用SNMP+开发网络管理应用程序。,