`
sjsky
  • 浏览: 918042 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SNMP4j之基础介绍

    博客分类:
  • SNMP
阅读更多
    blog迁移至:http://www.micmiu.com

官网:http://www.snmp4j.org/
SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应。SNMP4J是纯面向对象设计与SNMP++(用C++实现SNMPv1/v2c/v3)相类似。
snmp4j包,比较重要是三个类:Target、PDU、Snmp
[一]Target,表示被管理的设备
对于一个被管理的设备,它有以下一些属性:Address、协议版本version、community、访问它的用户名和密码、超时时间、重传次数等等。有如下方法:
   (1)获取或者设置ip地址
    void setAddress(Address address)  
    Address getAddress()
   (2)设置或者获取版本号(支持V1,V2c,V3)
    void setVersion(int ver)
    int   getVersion()
   (3)超时时间 ( 单位:milliseconds )
    void   setTimeout(long out)
    long getTimeout()
   (4)重传次数
    void   setRetries(int retries)
    int   getRetries()
   (5)最大PDU大小值
    void setMaxSizeRequestPDU(int max)
    int   getMaxSizeRequestPDU()

    [1.] 上面这些对于Snmp三个版本都是相同的,不同的只是在于安全方面,具体来说,Snmpv1,v2c采用共同体(community)方式,安全性很差;SnmpV3采用基于用户的安全(USM)方式,安全性能得到很大提高。

    [2.] 对于Snmpv1,v2c,使用Target派生出一个子类CommunityTarget,增加了对Community的方法:
        void setCommunity(OctetString community)
        OctetString getCommunity()

    [3.] 对于SnmpV3,使用其子类UserTarget,增加了一些有关USM安全方面的设置,比如采用的安全模型、安全级别、访问该设备的用户名以及权威引擎ID(authoritative engine ID):
       1)安全级别(支持三种安全级别)
       void setSecurityLevel(int level)
       int   getSecurityLevel()
       2)访问用户名(该访问用户名称必须在设置USM的时候添加其相应的UsmUser)
       void setSecurityName(OctetString name)
       OctetString   getSecurityName()
       3)安全模型(支持三种安全模型)
       void setSecurityModel(int model)
       int   getSecurityModel()
       4)权威引擎ID(authoritative engine ID)
       void   setAuthoritativeEngineID(byte[] id)
       byte[] getAuthoritativeEngineID()
   
     [4.]对于Target的代码示例:
Community Target
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setVersion(SnmpConstants.version1);

User Target
UserTarget target = new UserTarget();
target.setAddress(targetAddress);
target.setRetries(1);
// set timeout to 500 milliseconds -> 2*500ms = 1s total timeout
target.setTimeout(500);
target.setVersion(SnmpConstants.version3);
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
target.setSecurityName(new OctetString("MD5DES"));


[二]PDU 协议数据单元
  • PDU(协议数据单元),用来表示管理站跟代理站点进行通信的数据。包括PDU的类型、传输的数据集合、错误说明等。
  • 除Snmpv1 Trap外,其他操作类型的PDU大致相同。
  • Snmp4j针对Snmp的各个版本,开发了三个有关PDU的类。PDU(针对Snmpv2c)、PDUv1(针对Snmpv1)、ScopedPDU(针对Snmpv3),但三个类除各自特别的一些参数外,都基本相同。所以Snmp4j在设计的时候,将PDU设计成另外两个的超类,使他们能够共享大部分功能。
[1] PDU基本介绍
    1)pdu类型(Snmpv1支持5种,get、set、getnext、trap、getresponse,Snmpv2c增加了getbulk、inform)
    int   getType()
    void   setType(int type)
   
    2)错误(主要有6种错误,请参见RFC)
    void   setErrorStatus(int   status)
    int   getErrorStatus()
    String    getErrorStatusText()
    void   setErrorIndex(int index)
    int   getErrorindex()

    3)变量
    void add(VariableBinding vb) // 对于除get、getnext、getbulk外
    void addAll(VariableBinding[] vbs) // 对于除get、getnext、getbulk外的
    void addOID(VariableBinding vb) // 对于get、getnext、getbulk
    void addAllOID(VariableBinding[] vbs) // 对于get、getnext、getbulk
    VariableBinding get(int i)
    VariableBinding[] toArray()
    Vector getVariableBindings()
    void set(int i,VariableBinding vb)
    void remove(int i)
    void clear()
    int   size()
   
[2.] PDUv1
    PDUv1继承了PDU,除Snmp v1 trap操作外 ,其它都跟PDU相同。因为Snmp v1的Trap设计PDU不同于其他操作的PDU,它包括:对象标识符(OID)、代理ip地址(agent-addr)、时间戳(time-stamp)、通用代理类型(generic-trap)、特定代理类型(specific-trap)。所以相应的增加了对这些字段的get/set操作。具体参见API文档。

[3.] ScopedPDU
    SnmpV3采用了不同安全策略,它的PDU也增加了有关安全方面的几个字段:上下文名称(ContextName)、上下文引擎ID(contextEngineID)等,其它PDU字段属于USM来管理。
    所以ScopedPDU在PDU的基础上增加了相应的get/set操作。参见API。

[4.]代码示例:
SNMPv1/v2c GETNEXT PDU
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1"))); // sysDescr
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.1"))); // ifNumber
pdu.setType(PDU.GETNEXT);

SNMPv3 GETBULK PDU
ScopedPDU pdu = new ScopedPDU();
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.1"))); // ifNumber
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.10"))); // ifInOctets
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.16"))); // ifOutOctets
pdu.setType(PDU.GETBULK);
pdu.setMaxRepetitions(50);
// Get ifNumber only once
pdu.setNonRepeaters(1);
// set context non-default context (default context does not need to be set)
pdu.setContextName(new OctetString("subSystemContextA"));
// set non-default context engine ID (to use targets authoritative engine ID
// use an empty (size == 0) octet string)
pdu.setContextEngineID(OctetString.fromHexString("80:00:13:70:c0:a8:01:0d"));


SNMPv1 TRAP PDU
PDUv1 pdu = new PDUv1();
pdu.setType(PDU.V1TRAP);
pdu.setGenericTrap(PDUv1.COLDSTART);

SNMPv2c/SNMPv3 INFORM PDU
ScopedPDU pdu = new ScopedPDU();
pdu.setType(PDU.INFORM);
// sysUpTime
long sysUpTime = (System.currentTimeMillis() - startTime) / 10;
pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(sysUpTime)));
pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, SnmpConstants.linkDown));
// payload
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.1"+downIndex),
                            new Integer32(downIndex)));

分享到:
评论

相关推荐

    snmp4j.rar_SNMP_SNMP4J.jar_snmp4j的jar包_网络设备监控

    5. **PDU处理**:SNMP4J提供了对协议数据单元(PDU)的支持,包括GetRequestPDU、GetNextRequestPDU、SetRequestPDU和TrapPDU等,这些是SNMP协议交互的基础。 6. **安全模型与认证**:SNMPv3引入了用户安全模型...

    基于SNMP4J的SNMP操作实现代码

    SNMP4J是一个Java库,为SNMP协议提供了全面的支持,包括v1、v2c和v3这三个版本。本文将深入探讨如何使用SNMP4J来实现SNMP的基本操作,包括GET、GETNEXT、SET和TRAP。 1. SNMP协议基础: SNMP协议主要由管理站...

    snmp4j包来读取snmp协议数据

    在Java环境中,SNMP4J库为开发者提供了便利,可以用来读取和操作SNMP协议的数据。本文将深入探讨如何利用SNMP4j包来读取SNMP协议数据。 首先,理解SNMP4j的基本概念至关重要。SNMP4j是一个开源的Java库,完全实现了...

    SNMP实例大全--snmp4j(get ,trap,set,取mib)

    本文将详细介绍SNMP实例,特别是通过Java库snmp4j实现的GET、GETNEXT、SET操作以及TRAP发送和MIB获取。 1. **SNMP基本概念** SNMP由三个主要组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。管理...

    SNMP4J远程获取设备信息案例

    2. **创建Session对象**:SNMP4J中的`Session`对象是与远程设备通信的基础。我们可以使用`DefaultUdpTransportMapping`来创建一个UDP传输映射,并将其绑定到默认的SNMP端口(161)。 3. **设置安全参数**:根据SNMP...

    SNMP4j帮助文件

    SNMP4j是一款开源的Java库,专门用于实现简单网络管理协议(SNMP)的应用程序。这个库使得Java开发者能够轻松地与支持SNMP的网络设备进行通信,从而监控、管理和配置网络基础设施。"SNMP4j帮助文件"是针对这款库的...

    snmp4j AGENT 开发必备

    进行snmp4J网管开发的基础东东 agent代理端例子: Java代码 import java.util.*; import org.snmp4j.*; import org.snmp4j.smi.*; //agent代理端例子: public class Test2 { public static class Handler...

    使用Java进行SNMP编程-SNMP4J-代码实例

    通过这些基础知识点的学习,网络管理员可以利用Java语言和SNMP4J库完成服务器监控的工作,比如监控服务器的CPU负载、内存使用情况、磁盘空间以及各种网络接口的状态等。这对于维护服务器的稳定运行和及时发现网络...

    snmp4j文档

    这份文档详细介绍了如何使用SNMP4J库来构建SNMP应用程序,涵盖了从基本概念到高级特性的各个方面。 **1. SNMP协议基础** SNMP是网络管理的标准协议,用于监控和管理网络设备。它基于请求/响应模型,由管理站...

    snmp4j-2.5.6_SNMP4J.jar_

    **SNMP4J:网络管理的利器** SNMP4J是一个用Java编写的开放源码的简单网络管理协议(SNMP)实现库。这个库允许开发者构建能够与SNMP兼容的网络设备进行通信的应用程序。SNMP4J-2.5.6版本是其重要的里程碑,提供了对...

    snmp4j入门实例+snmp4j.jar+XPsnmp安装包

    首先,SNMP4J入门实例提供了如何使用SNMP4J进行网络通信的基础知识。SNMP协议基于请求/响应模型,通常涉及三个主要组件:管理站(Management Station)、代理(Agent)和管理信息库(Management Information Base, ...

    snmp4j学习文档

    本文档将深入探讨SNMP4J的相关知识点,帮助读者掌握SNMP协议的基础以及如何利用SNMP4J进行网络设备管理。 一、SNMP简介 SNMP(Simple Network Management Protocol)是一种广泛应用于网络设备管理的标准协议,它...

    snmp4j开发包,强烈推荐

    在Java开发中,SNMP4j是一个非常重要的库,它提供了对SNMP协议的全面支持,包括SNMP v1、v2c和v3三个版本。这个开发包被广泛推荐,因为它提供了详尽的实例和易于理解的API,是Java开发者进行SNMP编程的理想工具。 ...

    snmp4j-2.2.2-distribution.zip

    6. SNMP4J-SMI:实现了SNMP的管理信息基础架构(SMI),这是定义MIB对象和它们的结构的语言。 7. 示例和文档:包括源码示例和API文档,帮助开发者理解和使用SNMP4J库。 通过使用SNMP4J,开发者可以创建功能丰富的...

    snmp4j-doc

    在本文中,我们将深入探讨SNMP协议的基础知识,SNMP4J库的特性,以及如何利用SNMP4J-Doc来优化开发过程。 ### SNMP协议简介 SNMP是用于管理网络设备的标准协议,主要用于监控网络状态、收集网络性能数据和配置网络...

    SNMP4j.jar

    SNMP4j.jar是Java平台上的一个开源库,专门用于实现简单网络管理协议(SNMP)的应用程序。这个最新的版本2.6.2为开发者提供了一整套工具,以高效且灵活的方式与运行SNMP协议的设备进行通信。SNMP是一种广泛应用于...

    Java SNMP4J

    Java SNMP4J是一个基于Java平台的开源库,用于实现简单网络管理协议(SNMP)的应用程序。这个库为Java开发者提供了全面的工具集,让他们能够方便地与支持SNMP的网络设备进行通信,从而获取或管理系统配置、性能数据...

    使用snmp4j实现Snmp功能

    在Java中,我们可以使用开源库snmp4j来实现SNMP功能。snmp4j库提供了一个完整的SNMPv1、SNMPv2c和SNMPv3实现,包括协议操作、安全模型和MIB访问。 以下是如何使用snmp4j实现SNMP功能的详细步骤: 1. **获取snmp4j...

    snmp4j文档 提供了对snmp的封装

    在SNMP4J中,有几个关键的接口和类,它们构成了SNMP通信的基础: 1. `Session`接口:这是SNMP通信的核心,它定义了与SNMP代理进行交互的方法,如发送PDU(协议数据单元)和接收响应。`DefaultSession`是这个接口的...

Global site tag (gtag.js) - Google Analytics