已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WinSnmp简介,主要内容,WinSnmp 概念和结构 WinSnmp 的几个重要概念 WinSnmp 常用函数介绍 WinSnmp GetNext实现方法 举例说明,什么是WinSnmp,WinSNMP的目的是为在Windows下开发基于SNMP的网络管程序提供解决方案。它为SNMP网管开发者提供了必须遵循的开放式单一接口规范,它定义了过程调用、数据类型、数据结构和相关的语法。总的来说,WinSNMP以函数的形式封装了SNMP协议的各部分(在VC+6.0开发环境中体现为wsnmp32.dll、wsnmp32.lib和winsnmp.h),且针对SNMP是使用UDP的特点而设置了消息重传、超时机制等。,WinSnmp 体系结构,WinSnmp 几个重要的概念,在此我们主要介绍在VC6.0下Snmp的管理站程序设计,WinSnmp 几个重要的概念,Community(共同体名):我们可以将此名称理解为带有权限的登陆名称。一般权限分为只读权限(默认为public)和读写权限(默认为private)。 Oid(对象标识符):是以SMI(Structure of Management Information)管理信息结构为基础的一系列点分符号,如1.3.6.1.2.1.1.1,这些点分符号在任何网络设备中都唯一标识某一个数据参数。他们的集合就是MIB(Management Information Base)管理信息库。,WinSnmp 几个重要的概念,SNMP支持层次: WinSNMP支持四个层次的SNMP操作: Level 0 = 只有消息编码/解码 Level 1 = Level 0 +与SNMPv1代理的通信 Level 2 = Level 1 +与SNMPv2代理的通信 Level 3 = Level 2 +与其它SNMPv2管理站的通信 因为SNMP协议支持SNMPv1与SNMPv2的共存,所以WinSNMP实现能提供对两个版本协议的支持。 SnmpStartup函数能返回当前WinSNMP实现所能提供的最大支持层次。,WinSnmp 几个重要的概念,三种Entity/Context转换模式如下: SNMPAPI_TRANSLATED = 通过本地数据库查询转换 SNMPAPI_UNTRANSLATED_V1 = 转换为IP地址和共同体(community)字符串 SNMPAPI_UNTRANSLATED_V2 = SNMPv2的party和context IDs. 我们可以通过SnmpStartup函数获得当前默认的entity/context转换模式,SnmpSetTranslatedMode函数可以用来设置entity/context转换模式。,WinSnmp 几个重要的概念,本地数据库(Local Database) 本地数据库主要存储重传模式(RetransmitMode)、重试次数(Retry)、超时(timeout)、转换模式(TranslateMode)等值。我们可以对其中的数据进行读(get)、写(set)操作。,WinSnmp 几个重要的概念,会话(session) 会话是用来管理WinSNMP应用程序和WinSNMP实现之间的连接,由SnmpCreateSession(推荐)或SnmpOpen函数创建。会话是资源管理的最小单位,也是WinSNMP应用程序和WinSNMP实现之间通信管理的最小单位。一个好的WinSNMP应用程序应该使用会话结构逻辑地管理它的操作,并将实现中的资源需求控制在最小。 调用SnmpCreateSession或SnmpOpen函数创建一个会话时,会返回一个“session id”,这是一个句柄(handle)变量,WinSNMP用它来管理自己的资源。应用程序最终应调用SnmpClose函数将会话释放。,WinSnmp 几个重要的概念,异步模式: WinSNMP API中几乎所有函数都有异步成分,有些则是完全异步的。有三个非常重要的异步函数: SnmpSendMsg (发送数据) SnmpRecvMsg (接收数据) SnmpRegister (注册接受trap消息) WinSNMP的整个编程模式就是基于异步和消息驱动的。,WinSnmp 几个重要的概念,内存管理(Memory Management) WinSNMP包括三种不同的内存“对象”: 句柄式资源 C风格(以NULL结尾)的字符串 WinSNMP API结构类型 五种句柄式资源: HSNMP_SESSION, HSNMP_ENTITY HSNMP_CONTEXT, HSNMP_PDU HSNMP_VBL,WinSnmp 几个重要的概念,C风格字符串 (C-Stytle Strings) C风格的字符串主要用来为通用的字符串表示与Entity和对象标识符(OID)对象之间的转换提供便利。WinSNMP中使用C风格字符串的函数有:SnmpStrToEntity、SnmpEntityToStr、SnmpStrToOid、SnmpOidToStr。 C风格字符串的内存分配、管理和释放完全由应用程序负责。因此我们还需要传递“size”参数给使用它的函数。,WinSnmp 几个重要的概念,二种数据结构 typedef struct smiUINT32 len; / number of array /elements smiLPUINT32 ptr; / pointer to an array /of subidentifiers smiOID, *smiLPOID; 有两个类型,第一个用来指定他有多少个数字,第二个则指向一个一维数组,举个例子,如果一个对象标志符是1.3.6.1.2.1.1.1,那么 len应该为8,ptr应该指向一个数组,该数组的元素由1,3,6,1,2,1,1,1组成.,WinSnmp 几个重要的概念,typedef struct / smiVALUE portion of VarBind smiUINT32 syntax; / Insert SNMP_SYNTAX_ union smiINT sNumber; / SNMP_SYNTAX_INT / SNMP_SYNTAX_INT32 smiUINT32 uNumber; / SNMP_SYNTAX_UINT32 / SNMP_SYNTAX_CNTR32 / SNMP_SYNTAX_GAUGE32 / SNMP_SYNTAX_TIMETICKS smiCNTR64 hNumber; / SNMP_SYNTAX_CNTR64 smiOCTETS string; / SNMP_SYNTAX_OCTETS / SNMP_SYNTAX_BITS / SNMP_SYNTAX_OPAQUE / SNMP_SYNTAX_IPADDR / SNMP_SYNTAX_NSAPADDR smiOID oid; / SNMP_SYNTAX_OID smiBYTE empty; / SNMP_SYNTAX_NULL / SNMP_SYNTAX_NOSUCHOBJECT / SNMP_SYNTAX_NOSUCHINSTANCE / SNMP_SYNTAX_ENDOFMIBVIEW value; / union smiVALUE, *smiLPVALUE;,WinSnmp 几个重要的概念,该结构有两个类型构成,一个是smiUINT32 syntax; 另一个看上去挺复杂,是一个共同体类型 . 当get的数据返回时syntax表明了返回数据的类型,而在共同体中的相应类型的变量中存储了我们所要求的值。,WinSnmp 几个重要的概念,内存的释放 WinSNMP应用程序必须负责释放所有通过调用WinSNMP API函数所分配的资源,主要有以下三类函数: SnmpFree: 释放Entity、Context、Pdu、Vbl、Descriptor SnmpClose : 关闭会话 SnmpCleanup : 必须在程序结束之前调用,释放所有资源 应用程序推荐使用上述的顺序来释放所有的WinSNMP资源。,WinSnmp 编程概要,和其他编程过程一样,整个SNMP编程也是经过一个创建,执行,销毁的过程,初始化SNMP环境即加载SNMP的功能,接着就要执行所进行的操作,SNMP是基于消息机制的,所以消息传递与管理是我们在编程中所必须注意的问题,最后要进行销毁和回收资源,这一点我们必须注意,因为如果不销毁这些资源系统将不会自动回收这些资源,将会导致资源无法释放而挂起。,WinSnmp编程基本步骤,初始化SNMP环境(设置传输模式,重传方案和延时) 创建会话 创建变量绑定表和PDU 传输数据 接收数据 释放资源,WinSnmp常用函数介绍,初始化SNMP,用到的函数是SnmpStartup(smiLPUINT32 nMajorVersion, smiLPUINT32 nMinorVersion, smiLPUINT32 nLevel, smiLPUINT32 nTranslateMode, smiLPUINT32 nRetransmitMode ); 五个参数作为接收参数返回SNMP的主版本号,副版本号,支持最高的操作标准,默认的实体/上下文传输模式,默认的重发机制。,WinSnmp常用函数介绍,设置传输模式,用到的函数是SNMPAPI_STATUS SnmpSetTranslateMode( smiUINT32 nTranslateMode / new entity/context translation mode ); 该函数只有一个参数,有以下几种选择: SNMPAPI_TRANSLATED 不常用 SNMPAPI_UNTRANSLATED_V1 版本V1 SNMPAPI_UNTRANSLATED_V2 版本V2 你可以选择任一个参数,第二和第三个参数其区别是在版本一中get_bulk的操作不被允许,因为版本一不支持这种操作.,WinSnmp常用函数介绍,设置重传模式,用到的函数是SNMPAPI_STATUS SnmpSetRetransmitMode( smiUINT32 nRetransmitMode / new retransmission mode ); 该函数只有一个参数,有以下两种选择 SNMPAPI_ON 启动重传模式 SNMPAPI_OFF 关闭重传模式,WinSnmp常用函数介绍,设置重传次数,用到的函数是 SNMPAPI_STATUS SnmpSetRetry( SNMP_ENTITY hEntity, / destination management entity smiUINT32 nPolicyRetry / new retry count value for database ); 该函数的第一个参数是代理或者管理站实体句炳,通常我们设置目标实体的重传次数,也就是接收消息的网络设备的实体。第二个参数是重传次数。,WinSnmp常用函数介绍,设置超时时间,用到的函数是 SNMPAPI_STATUS SnmpSetTimeout( HSNMP_ENTITY hEntity, / destination management entity smiTIMETICKS nPolicyTimeout / new time-out value for database ); 该函数的第一个参数是代理或者管理站的实体句炳,通常我们设置目标实体的超时时间,也就是接收消息的网络设备的实体。第二个参数是 超时的时间,计量单位是百分之一秒。,WinSnmp常用函数介绍,建立会话,用到的函数有两个 第一个函数是仅针对于有窗体的应用 HSNMP_SESSION SnmpOpen( HWND hWnd, UINT wMsg ); 第一个参数是你所要接收Snmp代理消息的窗体句柄,第二个参数是当有消息到来时所要触发的Windows消息。这个函数成功返回后就返回一个会话句柄。 一般我们创建一个自定义消息然后为此自定义消息创建一个响应函数,在此函数中我们接收到来的消息。,WinSnmp常用函数介绍,第二个创建会话句柄的函数 HSNMP_SESSION SnmpCreateSession( HWND hWnd, UINT wMsg, SNMPAPI_CALLBACK pfnCallBack, LPVOID lpClientData ) 此函数是为在非窗体应用时提供的,也可以作为窗体应用时的创建会话函数。第一个和第二个参数和SnmpOpen的参数一样(可以为NULL)。第三个参数是我们要接收消息的回调函数,第四个参数是用户自定义的要传给此回调函数的数据。,WinSnmp常用函数介绍,回调函数原型 SNMPAPI_STATUS CALLBACK SNMPAPI_CALLBACK( HSNMP_SESSION hSession, HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam, LPVOID lpClientData ); 第一个参数hSession是我们要接收的会话句柄,第二个,第三个和最后一个参数和创建函数的含义一样。参数wParam为0时表示有数据到来,此时我们就可以接收数据了。当非0时说明是一个代理的一个异步消息触发,具体的含义lParam会给出。,WinSnmp常用函数介绍,创建实体,用到的函数是 HSNMP_ENTITY SnmpStrToEntity( HSNMP_SESSION session, LPCSTR string / pointer to a string that identifies / the entity ); 该函数的第一个参数是创建会话函数返回的会话句炳,第二个参数与设置的传输模式有关,如果选则后两个参数,那么这里的string就是要发送消息的网络设备ip地址或接收消息的管理设备ip地址。根据自己的需要,通常我们将这两个实体都创建一下。该函数返回一个实体句炳。,WinSnmp常用函数介绍,创建上下文句炳,用到的函数是 HSNMP_CONTEXT SnmpStrToContext( HSNMP_SESSION session, smiLPCOCTETS string / pointer to a string structure ); 该函数的第一个参数是会话句炳,第二个参数与设置的传输模式有关,如果选则后两个参数,那么这里的string就是共同体名。该函数返回一个上下文句炳。,WinSnmp常用函数介绍,创建变量捆绑列表,用到的函数是 HSNMP_VBL SnmpCreateVbl( HSNMP_SESSION session, smiLPCOID name, / pointer to the variable name smiLPCVALUE value / pointer to the value to associate / with the variable ); 第二个参数代表一个需要访问的代理Mib中的一个节点标识,第三个参数是需要返回值的类型。在此函数中这两个参数可以为空。如果不为空则将这两个参数设置为变量绑定表的头部。 返回值是一个变量绑定表句柄。,WinSnmp常用函数介绍,WinSnmp常用函数介绍,当我们要给刚才创建的变量绑定表里面追加内容时用如下函数: SNMPAPI_STATUS SnmpSetVb( HSNMP_VBL vbl, smiUINT32 index, smiLPCOID name, smiLPCVALUE value ); index是要追加地址的索引,如果为0就直接在后面追加,当大于0时就用后两个参数设置此位置。后两个参数我们前面已经提过了。,WinSnmp常用函数介绍,创建完成变量绑定表后我们就可以用这个变量绑定句柄来创建PDU了。 HSNMP_PDU SnmpCreatePdu( HSNMP_SESSION session, smiINT PDU_type, smiINT32 request_id, smiINT error_status, smiINT error_index, HSNMP_VBL varbindlist ); 第一个参数是会话句柄。,WinSnmp常用函数介绍,第二个参数表示我们要执行的操作方式,有以下几种类型: SNMP_PDU_GET SNMP_PDU_GETNEXT SNMP_PDU_RESPONSE SNMP_PDU_SET SNMP_PDU_GETBULK SNMP_PDU_V1TRAP SNMP_PDU_TRAP,WinSnmp常用函数介绍,SNMP_PDU_GET通常用来获得某一个特定的对象标志符所对应的值,SNMP_PDU_GETNEXT是在编程人员不了解该表列情况下使用的用来获取一组值的操作。SNMP_PDU_RESPONSE一般是SNMP代理填写的,表示应答发出操作请求的数据报。SNMP_PDU_SET是用来改变某一对象标志符的值的操作。SNMP_PDU_GETBULK只能在V2版本以上使用,是用来解决SNMP_PDU_GETNEXT一次消息只能取得一个数据的缺点,可通过发一次消息取得一组数据。SNMP_PDU_V1TRAP和SNMP_PDU_TRAP使用来发自陷消息的操作。,WinSnmp常用函数介绍,第三个参数request_id,对于同步实现消息机制的编程来说,几乎没有作用,但是对于异步操作,该参数有很重要的作用,你可以用它来标志某一个请求的消息,如果有几个消息都在消息队列中,你可以通过它来确定自己想要处理的消息,该值完全可以自己来设定。 error_status和error_index在SNMP_PDU_GETBULK操作中分别为PDU中non_repeaters域定一个值和PDU的max_repetitions域指定一个值。 在其他操作中都为0。 该函数返回一个PDU句炳。,WinSnmp常用函数介绍,现在我们创建完成了PDU,接下来就是发送此PDU了。发送用如下函数: SNMPAPI_STATUS SnmpSendMsg( HSNMP_SESSION session, HSNMP_ENTITY srcEntity, HSNMP_ENTITY dstEntity, HSNMP_CONTEXT context, HSNMP_PDU PDU ); 可以看出上面的参数都是我们前面创建过的。,WinSnmp常用函数介绍,以上都是我们发送PDU常用的一些函数,在此整理一下此过程如下: 1.加载SNMP, 2.建立会话, 3.设置传输模式,4.创建实体, 5.设置重传模式,6.设置超时时间, 7.设置重传次数,8.创建上下文句炳, 9.创建变量捆绑列表,10.追加绑定列表, 11.创建PDU, 12.发送消息。,WinSnmp常用函数介绍,接收消息函数 SNMPAPI_STATUS SnmpRecvMsg( HSNMP_SESSION session, LPHSNMP_ENTITY srcEntity, LPHSNMP_ENTITY dstEntity, LPHSNMP_CONTEXT context, LPHSNMP_PDU PDU ); 这个函数的参数和发送函数的参数是一样的,但是除了第一个参数是输入参数以外其它参数都是输出参数,我们只用接收就行了。,WinSnmp常用函数介绍,接收到PUD以后我们就可以从PDU中得到变量绑定表了,使用函数: SNMPAPI_STATUS SnmpGetPduData( HSNMP_PDU PDU, smiLPINT PDU_type, smiLPINT32 request_id, smiLPINT error_status, smiLPINT error_index, LPHSNMP_VBL varbindlist );,WinSnmp常用函数介绍,只有第一个参数是需要你输入的,而这已经通过SnmpRecvMsg得到了,其他的参数都是需要接收的,如果你用异步接收的话, request_id可以标识发送的消息。还有error_status和error_index,用在SNMP_PDU_GETBULK操作中,他们的意义是不同的,除此之外,他们用来接收SNMP端返回的错误消息,如果返回全都是0,那就是正确返回了。,WinSnmp常用函数介绍,计算返回列表数目,用函数SNMPAPI_STATUS SnmpCountVbl( HSNMP_VBL vbl ); 将上一步得到的varbindlist代到里面去就行了,他的返回只是一个整型,是你所得到的变量绑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年短视频运营公司内容督导岗位职责管理制度
- 2026年短视频运营公司创作人员沟通技巧培训管理制度
- 2026年博尔塔拉职业技术学院单招职业适应性测试题库附答案详解(精练)
- 2026年博尔塔拉职业技术学院单招职业适应性考试题库附答案详解(b卷)
- 2026年厦门东海职业技术学院单招职业倾向性考试题库及完整答案详解
- 危重患者的静脉输液管理
- 2026年厦门东海职业技术学院单招职业技能考试题库及完整答案详解
- 2026年厦门东海职业技术学院单招职业技能考试题库附答案详解ab卷
- 2026年厦门东海职业技术学院单招职业适应性测试题库附答案详解(满分必刷)
- 2026年厦门兴才职业技术学院单招职业倾向性考试题库及答案详解参考
- 夫妻析产协议书
- 《防御性驾驶》课件
- 口腔医学课件:口腔科学全套教学课件
- 2025年度医疗设备采购担保函合同范本
- CJ/T 123-2016 给水用钢骨架聚乙烯塑料复合管
- 重庆市2024届高三一诊数学试卷(康德卷)(含答案)
- 《休闲活动策划与管理》课件-第七讲 休闲活动策划的理念
- 2024年苏州卫生职业技术学院单招职业适应性测试题库及答案解析
- 平山乡社区卫生服务中心建设工程EPC总承包招标文件
- 大切诺基用户手册书(可编辑)
- 【科目一考试】河南省延津县驾校模拟考试练习300题
评论
0/150
提交评论