阅读更多

  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)相类似。

  1. 支持MD5和SHA验证,DES,3DES,AES128、AES192和AES256加密的SNMPv3。
  2. 支持MPv1,MPv2C和MPv3,带执行的可阻塞的信息处理模块。
  3. 全部PDU格式。
  4. 可阻塞的传输拓扑。支持UPD、TCP、TLS 。
  5. 可阻塞的超时模块。
  6. 同步和异步请求。
  7. 命令发生器以及命令应答器的支持。
  8. 基于Apache license的开源免费。
  9. JAVA 1.4.1或更高版本(2.0或更高版本需要jdk1.6及以上的支持)。
  10. 基于LOG4J记录日志。
  11. 使用GETBULK实现Row-based的有效的异步表格获取。
  12. 支持多线程。

 

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响应。

// 设置 target
   CommunityTarget target = new CommunityTarget();
   target.setCommunity(new OctetString("public"));
   Address targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
   target.setAddress(targetAddress);//设置目标设备地址、端口
   target.setRetries(2); // 通信不成功时的重试次数
   target.setTimeout(1500);// 超时时间
   target.setVersion(SnmpConstants.version1);//设置版本

   // 创建 PDU
   PDU pdu = new PDU();
   pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 })));
   pdu.setType(PDU.GET);// MIB的访问方式
   
   TransportMapping transport = new DefaultUdpTransportMapping();
   Snmp snmp = new Snmp(transport);
   ResponseEvent respEvnt = snmp.send(pdu, target);// MIB的访问方式

   // 解析Response
   if (respEvnt != null && respEvnt.getResponse() != null) {
		Vector<VariableBinding> recVBs = respEvnt.getResponse().getVariableBindings();
          for (int i = 0; i < recVBs.size(); i++) {
                 VariableBinding recVB = recVBs.elementAt(i);
                 System.out.println(recVB.getOid() + " : " + recVB.getVariable());
          }
   }

2.使用ObjectSNMP获取数据:

1)创建SNMPTarget,包括设备地址,SNMP端口,snmp团体字,SNMP版本,超时时间,重试次数等信息。

2)获取SNMPAPI,根据OID获取SNMP数据。

  //封装Target
   SNMPTarget target = new SNMPTarget();
   target.nodeIP="127.0.0.1";
   target.port=161;
   target.readCommunity="public";
   target.snmpVersion = target.VERSION2C;
   
   //获取信息
   String result = SNMPFactory.getSNMPAPI().getOIDValue("1, 3, 6, 1, 2, 1, 1, 5, 0",target);

 结论:对于SNMP简单数据的获取,即根据单个OID获取相应信息,ObjectSNMP更为简单方便。

(二)操作snmp表、组数据

 

  所有的SNMP MIB可以分为两大类,一类称之为组如下图的system组,有查询、修改操作,

 

 

 

与之相映射的JAVA对象分别是:

public class MibSystem implements com.zhtelecom.common.snmp.OMMappingInfo
{
    private String sysDescr;
    private String sysObjectID;
    private long sysUpTime;
    private String sysContact;
    private String sysName;
    private String sysLocation;
    private int sysServices;
		get/set ……..
    public String getMappingOID()  //告诉要映射system组的OID
    {
        return "1.3.6.1.2.1.1";  //system组的OID
    }
}

Public class MibOspfStubAreaEntry implements com.zhtelecom.common.snmp.OMMappingInfo
{
    private String ospfStubAreaId;
    private int ospfStubTOS;
    private int ospfStubMetric;
    private int ospfStubStatus;
    private int ospfStubMetricType;

    public String getMappingOID()
    {
        return "1.3.6.1.2.1.14.3.1"; // ospfStubAreaEntry的OID
    }
}

 

//获取MibOspfStubAreaEntry表中所有数据
List list= snmpapi. getAllTableData(MibOspfStubAreaEntry.class, target);
//在MibOspfStubAreaEntry 表中添加一行数据
MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry();
ospf.setOspfStubTOS(3);
ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryAdd); //设置snmp rowstatus的值为添加。
ospf.setOspfStubMetricType(2);
snmpapi.addTableRow(ospf, target);
//表中删除一行数据
MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry();//设置snmp rowstatus的值为删除语义
ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryDel);
snmpapi.delTableRow(ospf, target);

//修改MibOspfStubAreaEntry mib表中一行数据
MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry();
ospf.setOspfStubAreaId("192.168.9.0");
ospf.setOspfStubTOS(3);
ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryActive); //设置snmp rowstatus的值为激活语义。
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、磁盘、内存等

0
0
评论 共 1 条 请登录后发表评论
1 楼 di1984HIT 2018-03-04 22:12
。。。。。。。。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • MSDN中文库

    涉及到的内容有cppreference.chm、c与c++标准类库及函数.chm、MFC类库详解.chm、TeeChart+for+.Net中文版.chm、MFC类库详解.chm、Win32API大全+(中文版)、WinAPI_VB.CHM,平常开发过程中可进行查阅。

  • 微软开发者网络(MSDN)

    (英語:)是早期在推廣以及開發工具時,專門為開發人員所提供的一個服務,是使用微軟技術開發軟體或應用程式時必定會參訪的地方,同時它也有提供的服務,由微軟不定時供應最新的及技術文件,是免費開放讓所有人在線上閱讀,但的版本必須要利用MSDN Library Subscription才可以拿到,不過自從2005開始,MSDN Library即提供免費的網路下載。也許是受到MSDN成功與廣為開發人員所知的影響,也將它們的文件庫定名為,存于)。

  • MSDN 技术资源库参考文档:

    MSDN 技术资源库参考文档: Visual Studio 2005 Visual Basic  Visual C#  Visual C++ .NET Framework 类库参考 SQL Server Visual Web Developer Visual Studio Tools fo

  • msdn资源库

    参见 http://msdn.microsoft.com/zh-cn/library 转载于:https://blog.51cto.com/zorro/855249

  • 让您的网站拥有MSDN资源库搜索功能

    无意中在CSDN的主页上发现一个链接:http://www.microsoft.com/china/msdn/news/SearchIntro.mspx,MSDN是一个巨大的技术资料库,如果把查找入口放到自己的BLOG上,方便自己也方便他人。所以写了下面一段代码,共享出来: &amp;lt;div align=&quot;left&quot;&amp;gt; &amp;lt;form method=&quot;get&quot;&amp;gt; &amp;lt;t...

  • MSDN Library

    MSDNLibrary资源库 涵盖了微软全套可开发产品线的技术开发文档和科技文献(部分包括源代码)

  • MSDNSearch

    用WPF制作的MSDNSearch

  • Msdn Enhanced Search

    Msdn Enhanced Search ,带有智能的搜索。。 http://search.msdn.microsoft.com/search/Default.aspx 操作 语法 示例 全部...

  • MSDN查询技巧

    http://msdn.microsoft.com(谷歌搜索,后加site:msdn.microsoft.com) http://www.gfsoso.com/ 创建各种类型的控件类MSDN查找WC_BUTTON或者WC_ #include 控件类的头文件 InitCommonControls();#pragma comment(lib,"ComCtl32.lib") 各种控件的类型 B

  • MSDN 我告诉你(资源库)

    https://msdn.itellyou.cn/ 转载于:https://www.cnblogs.com/zyg316/p/9957145.html

  • 微软MSDN原版所有系统合集我告诉你,Windows历史操作系统索引

    微软原版MSDN镜像,全系列微软操作系统ROM下载,Windows历史系统包合集索引。本站搜集的操作系统皆为原版镜像,最初为方便自己使用,现在分享给大家,下载链接主要为磁力,使用迅雷下载即可。有部分资源为解决下载没速度的问题,提供了网盘下载链接,当然,大家下载热门的资源也提供了MSDN微软原版网盘链接。如果,你在下载过程中遇到无法下载的资源,可联系我帮你下载好然后网盘分享给你。参考:https://www.glgxt.cn/post/msdn_original_collectio.htmlMSDN原版镜像资

  • 微软技术资料相关的链接。

    MSDN每日追踪跟踪MSDN中文门户,随时奉献最新文档ttp://blog.csdn.net/msdnportal/MSDN开发精选杂志http://www.microsoft.com/china/msdn/magazine/ MSDN 技术资源库http://www.microsoft.com/china/MSDN/library/MSDN 中文网站http://www.microsoft.co

  • MSDN在线查询

    http://msdn.microsoft.com/en-us/library/aa139781.aspx   http://www.vcclass.net/msdn/index.htm

  • MSDN 查找 步骤

    本说明是基于网页版的 1.首先进入 MSDN,如下界面 链接:https://docs.microsoft.com/zh-cn/ 2. 在上图红线标出的地方输入需要寻找的东西 即可搜索 MSDN是一个比较方便的库

  • 电脑技巧:Windows系统原版纯净软件必备的两个网站

    该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。

Global site tag (gtag.js) - Google Analytics