《SNMP协议及编程实现.ppt》由会员分享,可在线阅读,更多相关《SNMP协议及编程实现.ppt(10页珍藏版)》请在三一办公上搜索。
1、SNMP协议及编程实现 讲座,SNMP:Simple Network Management Protocol,简单网络管理协议,1990年V1,1993年的V2是目前TCP/IP网络中应用最为广泛的网络管理协议。特点:SNMP易于实现 开放的免费产品 严格标准化,详细的文档资料 SNMP协议可用于控制各种设备,可接入网络且需 要控制的设备,基于TCP/IP的网络管理的四个组成部分(1)管理信息库(MIB),包含代理进程可能被查询或修改的所有参数,即被管理对象的参数。(2)管理信息结构(SMI),管理信息是一个被管理对象的集合,SMI定义了一个设备维护的规则集,用于对被管理对象进行命名和编码。(
2、3)SNMP协议,管理进程和代理进程之间的通信协议。SNMP是应用层协议,其下层协议一般为UDP,管理进程端口号为162,代理进程端口号为161。(4)安全机制,在SNMPv1中安全机制很简单,v2和v3在安全机制上作了一些改善。,管理代理(agent)是一种特殊的软件(或固件),它包含了关于一个特殊设备和/或该设备所处环境的信息。当一个代理被安装到一个设备上时,上述的设备就被列为“被管理的”。换句话说,代理就是一个数据库。,代理被管理设备,网络管理工作站可以从代理中获得关于设备的信息。网络管理工作站可以修改、增加或者删除代理中的表项,例如在由代理所维护的数据库中的路由选择表表项。网络管理工作
3、站可以为一个特定的自陷设置阈值。代理可以向网络管理工作站发送自陷。,MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的树型数据结构。MIB节点定义形式:1.3.6.1.4.1.19554.x1.x2其中19554是JiaSin的企业标记,x1.x2.是设备的某状态或属性。PDU类型:get-request,get-next-request,get-response,set-request,trap。其中get-response与trap的方向是代理向网管主机发送。,SNMP管理信息库MIB,Snmp在Windows下的实现W
4、inSNMP,在Windows中采用Winsock接口,在161,162端口通过UDP传送信息。Windows2000及以上版本支持WinSNMP API,提供在Windows下开发基于SNMP的网络管程序提供解决方案。网络管理站(NMS)和网络管理代理(Agent)之间端到端的SNMP连接。WinSNMP以函数的形式封装了SNMP协议的各部分,且针对SNMP是使用UDP的特点而设置了消息重传、超时机制等。,WinSNMP实现步骤(一):,.启动WinSNMP,调用SnmpStartup()函数;.创建会话,调用SnmpOpen()函数;.设置重传模式,调用SnmpSetRetransmitM
5、ode()函数;.创建共同体名,调用SnmpStrToContext()函数;.分别创建管理者实体和代理实体,调用SnmpStrToEntity()函数;.分别设置管理者实体和代理实体的重传次数,调用SnmpSetRetry()函数;.分别设置管理者实体和代理实体的超时时间,调用SnmpSetTimeout()函数;.创建读取对象的OID,调用SnmpStrToOid()函数;.创建变量绑定表,调用SnmpCreateVbl()函数;.指定协议数据单元的内容,并生成协议数据单元,调用SnmpCreatePdu()函数;.发送请求报文,调用SnmpSendMsg()函数;.释放暂时不用资源,调用
6、SnmpFree()函数。,WinSNMP实现步骤(二):,.接收数据报文,调用SnmpRecvMsg()函数;.提取协议数据单元内的数据,调用SnmpGetPduData()函数;.取得变量绑定表中变量绑定的数量,调用SnmpCountVbl()函数;.记录变量绑定表中每个变量绑定的标识OID及其值Value,调用 SnmpGetVbl()函数;.对各绑定表中的值Value,按Value值的语法类型,用Case语句转换成字符 串形式的Value值;.将各变量绑定中的标识OID转换成字符串,调用SnmpOidToStr()函数;.存储字符串形式的OID标识及Value值到相应的数据表格中。,重
7、点,1.动态链接库winsnmp32.dll2.库文件wsnmp32.lib3.头文件winsnmp.h4.自定义消息WM_SNMPMESSAGE_GET5.接收代理回送数据的消息处理函数OnSnmpReceive(),以上所有功能已经集成在JSSnmp.h和JSSnmp.cpp中,1.bool Start(HWND hWnd,UINT wMsg);启动Snmp,指定消息回送的目标窗口句柄2.bool Send(LPCSTR strDstIP,smiINT nActionType,const char*pCommunity,_ CStringArray*pOidArray,smiLPVALUE pValueArray);发送SNMP命令,读取指 定的OID变量值3.bool Receive(CStringArray*pOidArray,CStringArray*pValueArray);接收代理回送 的变量值4.bool Register(HWND hWnd);注册SNMPTrap服务,指定SNMP控制台的窗口句柄,结束,谢谢各位,