SNMP网络管理协议

转载 2007年09月13日 15:34:00
SNMP网络管理协议在通信设备中使用得很广,大部分的通信设备的网管接口都支持SNMP标准协议。最近在实际工作做有所接触,下面就说说自己开发过程中的问题和心得。
    一般来讲SNMP由网管终端(如PC上的NMC)和设备中的Agent组成,也就是通常所讲的上位机与下位机。我的工作住要是PC部分的网管的开发。目前我所知道的开源的SNMP开发包有SNMP++和NET-SNMP两个,SNMP++是由HP公司人员开发的,后来公开了源代码,我就是用的SNMP++。NET-SNMP最初是由美国卡内基梅龙大学开发的,后来也成为了一个开源项目。
    要开发SNMP方面的程序就必须要对SNMP协议有基本的认识,SNMP主要由MIB,SMI等部分,MIB就是对每一个被管理对的标识,而SMI则定义了管理的数据编码实现,这些内容都可以在ISO的RFC文档中找到,这就不多说了,看书来得更快。SNMP利用UDP协议来传输数据包,主要有GetRequest报文、GetNextRequest报文、GetResponse报文、SetRequest报文和TRAP报文五种。
    SNMP++是用C++编写,整个库的框架很全,支持SNMPV1、SNMPV2、SNMPV3等版本,全部采用面向对象化设计类结构,使用起来很方便。SNMP++可以网上很多地方下载到,下载后要先编译,有动态DLL和静态LIB两种。编译的时候要注意路径的设置,否则编译是通不过的,多设置一下。下面就是一个GetRequest的简单例子
 GenAddress address("192.168.10.169"); //Agent的IP地址
 if ( !address.valid()) {    
  MessageBox("Invalid Address or DNS Name ");//IP地址有效性检查
  return;
 }
     Oid oid("1.3.6.1.4.1.10811.1.5.1.1.10.1.4");//MIB对象  
 if ( !oid.valid()) {   
  MessageBox("Invalid Oid, " );
  return;
 }
 snmp_version version=version1;//SNMP版本号,这里是V1   
 int retries=1;//UDP包重发次数,默认值为1        
 int timeout=400; //超时时间
 OctetStr community("public");//读访问串
 OctetStr wrCommunity("public");//写访问串
 int status;
 Snmp snmp( status);        
 if ( status != SNMP_CLASS_SUCCESS) {//创建SNMP会话
  MessageBox("SNMP++ Session Create Fail, " );
  return ;
 }
 Pdu pdu;//够造一个PDU报文                    
 Vb vb;                     
 vb.set_oid( oid);                 
 pdu += vb;                         
 CTarget target( address);//设置网管目标           
 target.set_version( version);         
 target.set_retry( retries);          
 target.set_timeout( timeout);        
 target.set_readcommunity( community);  
 target.set_writecommunity( wrCommunity);
   if (( status = snmp.get( pdu,target))== SNMP_CLASS_SUCCESS) {//GetRequest操作
  pdu.get_vb( vb,0);
  MessageBox( vb.get_printable_oid());//返回的MIB对象
  MessageBox(vb.get_printable_value());//返回的MIB对象的值(以字符串形式出现)
 }
 else {
  MessageBox( "SNMP++ Get Error");
  if ( status == SNMP_CLASS_ERR_STATUS_SET)//出错
   status = pdu.get_error_status();//打印出错原因
  MessageBox(snmp.error_msg( status));
 }
   SNMP++对各种操作都提供了阻塞和非阻塞操作,阻塞操作要等AGENT返回值或则超时后才返回,而非阻塞则可以立即返回。在实际中要根据情况选择采用哪一种, 非阻塞操作中要加snmp.eventListHolder->SNMPProcessPendingEvents()函数来获取事件。
    有了基本的操作后,网管的主要工作就是对AGENT数据定时的采集,然后分析数据,产生设备告警。一直以来对管理很多设备时,数据采集速度就很慢,找不到很好的解决办法,有待讨论。
 

简单网络管理协议SNMP通讯基础篇

-
  • 1970年01月01日 08:00

SNMP-简单网络管理协议简介

基于 TCP/IP 的网络管理包括两部分:网络管理站 (manager) 和被管理的网络单元(被管设备)。这些被管设备的共同点就是都运行 TCP/IP 协议。管理进程和代理进程之间的通信有两种方式,一...
  • vevenlcf
  • vevenlcf
  • 2015-03-25 23:23:44
  • 1148

简单网络管理协议SNMP的基础知识

前言 一个管理系统包括:几个(潜在多个)节点,每个节点具有一个称为代理(agent)的处理实体,它负责访问管理的基础结构;至少一个管理站;一种管理协议,用于在代理和管理站之间传送管理信息。协议操...
  • wzxbill
  • wzxbill
  • 2012-05-10 23:49:32
  • 939

SNMP工作原理与网络管理协议新技术

  • 2014年06月18日 09:50
  • 81KB
  • 下载

简单网络管理协议(SNMP)

作为一名网络顾问或网络管理员,在你安装完网络并且设置了用户帐号和应用程式之后,你的工作并没有完成。你的下一个职责就是网络管理,他就好比是一场永远也不会结束的战斗相同。    目前存在着两种类型的网络管...
  • yaomoon
  • yaomoon
  • 2014-04-16 18:23:56
  • 1088

snmp示例程序,很好的snmp入门程序

  • 2010年01月20日 10:13
  • 51KB
  • 下载

浅谈SNMP简单网络管理协议报文格式详解--理论篇

随着网络技术的飞速发展,网络的数量也越来越多。而网络中的设备来自各个不同的厂家,如何管理这些设备就显得十分的重要,snmp就是为了有效的管理这些设备而诞生的协议。...
  • cgqzly123
  • cgqzly123
  • 2015-12-25 15:57:09
  • 1049

snmp4j.jar

  • 2008年08月25日 10:37
  • 1.11MB
  • 下载

SNMP&CMIP两种网络管理协议

网络管理系统中最重要的部分就是网络管理协议,它定义了网络管理者与网管代理间的通信方法。 SNMP 特点 最大的特点是简单性,容易实现且成本低。 可伸缩性 SNMP可管理绝...
  • guo13313
  • guo13313
  • 2016-03-27 17:43:21
  • 776

SNMP协议以及在OLT产品中的应用详解.pdf

  • 2013年05月07日 11:33
  • 27.72MB
  • 下载
收藏助手
不良信息举报
您举报文章:SNMP网络管理协议
举报原因:
原因补充:

(最多只允许输入30个字)