SNMP4J与ObjectSNMP对比分析之我见
SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应。Object SNMP是一个面向对象的SNMP开发组件,与关系数据库流行的O-R Mapping技术类似,实现了Object到SNMP MIB的操作映射(简称O-M Mapping)。使用SNMP4J与ObjectSNMP开发类似于使用原生JDBC开发与Hibernate框架。
SNMP4J介绍SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应。SNMP4J是纯面向对象设计与SNMP++(用C++实现SNMPv1/v2c/v3)相类似。
支持MD5和SHA验证,DES,3DES,AES128、AES192和AES256加密的SNMPv3。
支持MPv1,MPv2C和MPv3,带执行的可阻塞的信息处理模块。
全部PDU格式。
可阻塞的传输拓扑。支持UPD、TCP、TLS 。
可阻塞的超时模块。
同步和异步请求。
命令发生器以及命令应答器的支持。
基于Apache license的开源免费。
JAVA 1.4.1或更高版本(2.0或更高版本需要jdk1.6及以上的支持)。
基于LOG4J记录日志。
使用GETBULK实现Row-based的有效的异步表格获取。
支持多线程。
ObjectSNMP介绍Object SNMP(Object Simple Network Management Protocol)是一个面向对象的SNMP开发组件,与关系数据库流行的O-R Mapping技术类似,实现了Object到SNMP MIB的操作映射(简称O-M Mapping),系统提供了Java/SNMP网关、RMI/SNMP网关 、Web Service/SNMP网关服务。开发者无需理解SNMP协议和MIB细节,只需要定义普通数据对象,然后将数据对象按添加、删除、修改、查询等模式提交给网关即可。Object SNMP网关会自动将数据对象按开发者的期望发送到SNMP设备,并返回用户需要的数据对象。Object SNMP提供诸如分布式代理SNMP网关、 网络拓扑发现、物理拓扑发现、网络自动搜索发现 、设备连接关系发现、设备类型发现、网络漫游搜索、以及定义好的可管理各种设备的MIB数据等高级功能。
ObjectSNMP提供四种网关API模型,满足绝大多数开发者的需求。所有网关的API保持一致,都提供了基于数据对象添加、删除、修改、查询等服务;并可以随意切换各种网关模式,保持API对用户不变。
1.O-M Mapping映射框架
参考数据库领域流行的O-RMapping技术,实现SNMP领域的Object-MIB映射框架,自动翻译MIB和OID语法、SNMP命令和网络操作,彻底告别Socket、PDU、UDP、SNMPGet等方式的编程模式,开发人员仅需定义一个与MIB数据相对应的普通数据对象。然后通过各种网关提交数据对象,即可完成对SNMP的复杂访问。
2.Java/SNMP网关
使用者的程序和ObjectSNMP在同一个Java进程内,使用者定义普通Java数据对象,然后通过Java API访问ObjectSNMP网关。
3.Java RMI/SNMP网关
使用者的程序和ObjectSNMP在不同的Java进程内,或在不同的机器上。使用者定义普通Java数据对象,然后通过RMI Java API访问ObjectSNMP网关。
4.Web Service/SNMP网关
使用者可以为PHP、C++、.NET、Java、Flex、JavaScrip等支持Web Service技术的其他程序,通过在Web环境中,访问ObjectSNMP网关。Web Servcie/SNMP网关支持任意兼容servlet的Web容器。
5.Proxy/SNMP透明网关
为私网穿透、分布式部署SNMP网关、SNMP网关负载均衡、主/从两级SNMP管理 等场景提供了透明的SNMP网关服务。Proxy网关可以采用Java、RMI、Web Service任意模式,并且完全对用户透明,就如同只有一个网关一样。
6.一致的API服务
所有的网关的API保持一致,都提供了基于数据对象添加、删除、修改、查询等服务;并可以随意切换各种网关模式,保持API对用户不变。
7.SNMP Trap接收服务
内置SNMP Trap接收服务器,可以接收公共和私有SNMP Trap消息。并自动将原始Trap PDU包解析成Java Trap消息对象。为了简化Trap通知模式的编程开发,ObjectSNMP将被动接收的Trap消息机制映射成为主动获取Java Trap消息对象的普通编程模式。
8.网管集成
ObjectSNMP依托底层O-M框架和网关技术,针对诸如故障管理、性能监控管理、故障监控、配置管理、业务管理、网络安全管理等SNMP网管功能,提供了最为便捷的支持。
9.支持私有MIB文件
产品可以加载各种厂商的私有MIB文件,加载私有MIB文件后,自动解析MIB文件的语法。
10.网络自动发现功能
采用全新的技术:即支持单一Cisco、华为网络,也支持各种厂商设备混合网络。支持模糊连接定位,在数据不全或设备缺失的情况下,尽可能发现连接关系。可在任意的网络环境中工作,不需要用户对网络做任何假设。
11.SNMP数据采集服务
ObjectSNMP提供如下常用数据采集服务,使用者可直接使用:系统类MIB描述、IP网络类MIB描述、交换机MIB描述、硬件设施类MIB描述、软件类MIB描述、Java类MIB描述。
12.自动Java代码生成技术
提供了Java数据对象代码的自动生成技术,进一步简化SNMP开发工作。
13.SNMP MIB数据浏览器
可单独使用,也可集成在程序中使用SNMP数据浏览器,便于开发和调试。
14.优秀的性能表现
单线程1万个SNMP对象(7万个SNMP OID数据)获取总时间<=5秒
多线程并发1万个SNMP对象获取总时间<=2秒
连续30天多线程并发获取SNMP数据,内存波动正负0.3M
1千万次SNMP对象获取操作,在多线程并发环境下,正确率100%
SNMP4J与ObjectSNMP实例对比(一)获取snmp简单基本数据1.Snmp4j步骤:1)创建Target(Target代表远程设备或者远程实体),包括设备地址,SNMP端口,snmp团体字,SNMP版本,超时时间,重试次数等信息。
2)创建PDU(代表管理端同Target通信的数据),在PDU中增加要获取的OID值,设置访问的方式。
3)创建SNMP(代表着管理者,作用是通信的具体实行者)
4)向Agent发送PDU,并接收Response响应
5)解析Resoponse响应。
//设置targetCommunityTargettarget=newCommunityTarget();target.setCommunity(newOctetString("public"));AddresstargetAddress=GenericAddress.parse("udp:127.0.0.1/161");target.setAddress(targetAddress);//设置目标设备地址、端口target.setRetries(2);//通信不成功时的重试次数target.setTimeout(1500);//超时时间target.setVersion(SnmpConstants.version1);//设置版本//创建PDUPDUpdu=newPDU();pdu.add(newVariableBinding(newOID(newint[]{1,3,6,1,2,1,1,5,0})));pdu.setType(PDU.GET);//MIB的访问方式TransportMappingtransport=newDefaultUdpTransportMapping();Snmpsnmp=newSnmp(transport);ResponseEventrespEvnt=snmp.send(pdu,target);//MIB的访问方式//解析Responseif(respEvnt!=null&&respEvnt.getResponse()!=null){Vector<VariableBinding>recVBs=respEvnt.getResponse().getVariableBindings();for(inti=0;i<recVBs.size();i++){VariableBindingrecVB=recVBs.elementAt(i);System.out.println(recVB.getOid()+":"+recVB.getVariable());}}
2.使用ObjectSNMP获取数据:
1)创建SNMPTarget,包括设备地址,SNMP端口,snmp团体字,SNMP版本,超时时间,重试次数等信息。
2)获取SNMPAPI,根据OID获取SNMP数据。
//封装TargetSNMPTargettarget=newSNMPTarget();target.nodeIP="127.0.0.1";target.port=161;target.readCommunity="public";target.snmpVersion=target.VERSION2C;//获取信息Stringresult=SNMPFactory.getSNMPAPI().getOIDValue("1,3,6,1,2,1,1,5,0",target);
结论:对于SNMP简单数据的获取,即根据单个OID获取相应信息,ObjectSNMP更为简单方便。
(二)操作snmp表、组数据所有的SNMP MIB可以分为两大类,一类称之为组如下图的system组,有查询、修改操作,
与之相映射的JAVA对象分别是:
publicclassMibSystemimplementscom.zhtelecom.common.snmp.OMMappingInfo{privateStringsysDescr;privateStringsysObjectID;privatelongsysUpTime;privateStringsysContact;privateStringsysName;privateStringsysLocation;privateintsysServices;get/set……..publicStringgetMappingOID()//告诉要映射system组的OID{return"1.3.6.1.2.1.1";//system组的OID}}PublicclassMibOspfStubAreaEntryimplementscom.zhtelecom.common.snmp.OMMappingInfo{privateStringospfStubAreaId;privateintospfStubTOS;privateintospfStubMetric;privateintospfStubStatus;privateintospfStubMetricType;publicStringgetMappingOID(){return"1.3.6.1.2.1.14.3.1";//ospfStubAreaEntry的OID}}
//获取MibOspfStubAreaEntry表中所有数据Listlist=snmpapi.getAllTableData(MibOspfStubAreaEntry.class,target);//在MibOspfStubAreaEntry表中添加一行数据MibOspfStubAreaEntryospf=newMibOspfStubAreaEntry();ospf.setOspfStubTOS(3);ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryAdd);//设置snmprowstatus的值为添加。ospf.setOspfStubMetricType(2);snmpapi.addTableRow(ospf,target);//表中删除一行数据MibOspfStubAreaEntryospf=newMibOspfStubAreaEntry();//设置snmprowstatus的值为删除语义ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryDel);snmpapi.delTableRow(ospf,target);//修改MibOspfStubAreaEntrymib表中一行数据MibOspfStubAreaEntryospf=newMibOspfStubAreaEntry();ospf.setOspfStubAreaId("192.168.9.0");ospf.setOspfStubTOS(3);ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryActive);//设置snmprowstatus的值为激活语义。ospf.setOspfStubMetric(3);ospf.setOspfStubMetricType(3);snmpapi.update(ospf,target);
可以看出通过ObjectSNMP操作数据极其方便简单,相比于SNMP4J从易用性和功能性来说得到了很大的提高,而且通过对象的方式对SNMP进行操作,更符合用户的使用习惯,且屏蔽掉了SNMP4J中的PDU、ScopedPDU类、TransportMapping等,学习成本降低了很多。
(三)基于ObjectSNMP与SNMP开发对比项目
使用ObjectSNMP开发
SNMP4J
软件架构
底层实现对SNMP协议的封装,上层提供基于对象的网关服务和各种高级服务。
实现对SNMP协议的原始封装
开发技能要求
仅需了解SNMP概念即可开发,并提供对象代码自动生成工具
需要对Socket、SNMP数据类型等有开发级的掌握。
开发效率
对象级的上层抽象操作。代码量仅有传统模式的10%
大量的SNMP协议层操作代码
开发时间
在SNMP模块开发和设备联调上花费的时间仅有传统模式的20%
需要专人负责SNMP模块的开发和后期维护
软件性能
已通过基准性能验证,新定义的数据对象直接在网关通道上传递
需要大量的调优、测试、验证来保证
软件模式
有统一的对象模式和网关模式,与整体软件的对象风格保持一致
无,需要开发人员重新建立
网关功能
同时支持Java、RMI、Web Service、Proxy等多种网关
无
高级服务
全新技术的网络拓扑自动发现和网络资源发现
无
预定义MIB对象
提供多种内置MIB采集服务,如网络接口、流量、数据包、IP、CPU、磁盘、内存等
无
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。