`
yangyangmyself
  • 浏览: 233868 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Snmp4j

    博客分类:
  • Snmp
阅读更多
SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体系结构,改进后的协议就是著名的SNMP。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大,现在Snmp有三个版分别是V1,V2,V3,现在SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。

引用
   开发Snmp对设备进行采集数据时,必须考虑设备支持的Snmp版本,v1,v2版本可以兼容;但v3增加很安全机制,当利用v1,v2采集数据失败时,此尝试用v3版本。


      概念:

引用
MIB----管理信息库,由网络管理协议访问的管理对象数据库,它包括SNMP可以通过网络设备的SNMP管理代理进行设置的变量。
SMI----管理信息结构,用于定义通过网络管理协议可访问的对象的规则。


   

引用
SNMP进行网络管理需要下面几个重要部分:管理基站,管理代理,管理信息库。
    管理基站通常是一个独立的设备,它用作网络管理者进行网络管理的用户接口。基站上必须装备有管理软件,管理员可以使用的用户接口和从MIB取得信息的数据库,同时为了进行网络管理它应该具备将管理命令发出基站的能力。
    管理代理是一种网络设备。这些设备都必须能够接收管理基站发来的信息,它们的状态也必须可以由管理基站监视。管理代理响应基站的请求进行相应的操作,也可以在没有请求的情况下向基站发送信息。
    MIB是对象的集合,它代表网络中可以管理的资源和设备。每个对象基本上是一个数据变量,它代表被管理的对象的一方面的信息。


  
   

package com.shine.framework.core.util;

import java.util.List;
import java.util.Map;
import java.util.Vector;

import org.dom4j.Element;
import org.snmp4j.AbstractTarget;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.ScopedPDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.UserTarget;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.security.AuthMD5;
import org.snmp4j.security.PrivDES;
import org.snmp4j.security.SecurityLevel;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class SnmpHelper4j extends SnmpAbstract {
	
	//Snmp Instance
	private Snmp snmp=null;
	
	private String ip;
	
	//Unit(共同体)
	private String community="public";
	
	//Default Port
	private int port = 161;
	
	//Snmp version
	private int version = 0;
	
	//Transport mapping
	private TransportMapping tm;
	
	private Address targetAddress;
	
	//Snmp Defualt Use UDP Protocl
	private String protol="udp";
	
	public SnmpHelper4j(){
		
	}
	public SnmpHelper4j(String ip, String community) throws Exception{
		this.init(ip, community);
	}
	public SnmpHelper4j(String ip, String community, int port,int v) throws Exception{
		this.init(ip, community, port,v);
	}
	/**
	 * 初始化
	 */
	public void init(String ip, String community, int port,int v) throws Exception {
		this.port=port;
		this.version=v;
		this.init(ip, community);	
	}
	
	/**
	 * 初始化
	 */
	public void init(String ip, String community) throws Exception {
		this.ip=ip;
		this.community=community;
		StringBuffer tstr = new StringBuffer(this.protol).append(":").append(ip).append("/").append(this.port);
		this.targetAddress = GenericAddress.parse(tstr.toString()); 
		this.tm = new DefaultUdpTransportMapping();
		this.snmp = new Snmp(this.tm);
	}
    /**
     * OID值
     */
	public String getOidValueString(String oid){
		for(int i=0;i<=3;i++){
			return this.getOidValueString(oid,i);
		}
		return null;
	}
	/**
	 * 存在预设值
	 * @param oid
	 * @param v
	 * @return
	 */
	public String getOidValueString(String oid,int v){
		if(v==0 || v==1){
			String result = getSnmpV1OidValueString(oid,v);
			if(result!=null){
				return result;
			}
		}
		if(v==3){
			String result = getSnmpV3OidValueString(oid);
			if(result!=null){
				return result;
			}			
		}
		return null;
	}
	/**
	 * 获取SnmpV1/V2版本OID值
	 * @param oid
	 * @param snmpv
	 * @return
	 */
	private String getSnmpV1OidValueString(String oid,int snmpv){
		this.state = true;
		CommunityTarget target = this.setCommunityTarget(snmpv);
		PDU pdu = this.setPdu(oid);		
        try{
        	return getStrResponse(snmpv,pdu,target);
 		}catch(Exception e){
 			e.printStackTrace();
 		}finally{
 			this.state = false;
 			this.close();
 			pdu=null;
 			target=null;
 		}
 		return null;
	}
	/**
	 * Snmp V1/V2 Target
	 * @param snmpv
	 * @return
	 */
	private CommunityTarget setCommunityTarget(int snmpv){
		CommunityTarget target = new CommunityTarget();
		target.setCommunity(new OctetString(this.community));
		target.setAddress(this.targetAddress);
		target.setVersion(snmpv);
		target.setTimeout(100);
		target.setRetries(1);
		return target;
	}
	/**
	 * SnmpV1/v2版本PDU数据
	 * @param oid
	 * @return
	 */
	private PDU setPdu(String oid){
		PDU pdu = new PDU();
		pdu.add(new VariableBinding(new OID(oid)));
		pdu.setType(PDU.GET);
		return pdu;
	}
	/**
	 * 获取SnmpV3版本OID值
	 * @param oid
	 * @param snmpv
	 * @return
	 */
	private String getSnmpV3OidValueString(String oid){
		this.state = true;
		USM usm = new USM(SecurityProtocols.getInstance(),new OctetString(MPv3.createLocalEngineID()), 0);
		SecurityModels.getInstance().addSecurityModel(usm);
		ScopedPDU spdu = this.setScopedPDU(oid);
		UserTarget target = this.setUserTarget();
		this.snmp.getUSM().addUser(new OctetString("MD5DES"), new UsmUser(new OctetString("MD5DES"), AuthMD5.ID,new OctetString("MD5DESUserAuthPassword"), PrivDES.ID,new OctetString("MD5DESUserPrivPassword")));		
		try{
			return getStrResponse(3,spdu,target);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			this.state = false;
			this.close();
			target=null;
			spdu = null;
			usm = null;
		}
 		return null;
	}
	/**
	 * V3 Target
	 * @return
	 */
	private UserTarget setUserTarget(){
		UserTarget target = new UserTarget();
		target.setAddress(this.targetAddress);
		target.setRetries(1);
		target.setTimeout(500);
		target.setVersion(SnmpConstants.version3);
		target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
		target.setSecurityName(new OctetString("MD5DES"));
		return target;
	}
	/**
	 * SnmpV3版本Pdu数据
	 * @param oid
	 * @return
	 */
	private ScopedPDU setScopedPDU(String oid){
		ScopedPDU spdu = new ScopedPDU();
		spdu.add(new VariableBinding(new OID(oid)));
		spdu.setType(ScopedPDU.GET);
		spdu.setMaxRepetitions(50);
		return spdu;
	}
	/**
	 * OID字符串数据响应
	 * @param snmpv
	 * @param pdu
	 * @param target
	 * @return
	 * @throws Exception
	 */
	private String getStrResponse(int snmpv,PDU pdu,AbstractTarget target) throws Exception{
		this.snmp.listen();
		ResponseEvent response = this.snmp.send(pdu, target);
		PDU tpdu = response.getResponse();
		if (response.getResponse() != null && tpdu.getErrorIndex() == tpdu.noError && tpdu.getErrorStatus() == tpdu.noError) {
		    this.version=snmpv;
			Vector<VariableBinding> v = response.getResponse().getVariableBindings();
			for(VariableBinding var:v){
			   return var.getOid().toString()+"(IP: "+this.ip + ":Snmp4j"+":snmpv"+(this.version+1)+")";		    		 
			}
			     
		}
		return null;
	}

	/**
	 * 重连接
	 */
	public void reconnection(String ip, String community, int port) {
		try {
			if (this.tm != null)
				this.tm.close();
			this.community=community;
			StringBuffer tstr = new StringBuffer(this.protol).append(":").append(ip).append("/").append(port);
			this.targetAddress = GenericAddress.parse(tstr.toString()); 
			this.tm = new DefaultUdpTransportMapping();
			this.snmp = new Snmp(this.tm);	
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 重连接
	 */
	public void reconnection() {
		this.reconnection(this.ip, this.community, this.port);
	}
	/**
	 * 关闭监听
	 */
	public void close() {
		try{
			if(this.tm != null){ 
				this.tm.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public int getVersion() {
		return version;
	}
	public void setVersion(int version) {
		this.version = version;
	}
	public Snmp getSnmp() {
		return snmp;
	}
	public void setSnmp(Snmp snmp) {
		this.snmp = snmp;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	public String getCommunity() {
		return community;
	}
	public void setCommunity(String community) {
		this.community = community;
	}
	public int getPort() {
		return port;
	}
	public void setPort(int port) {
		this.port = port;
	}
	public TransportMapping getTm() {
		return tm;
	}
	public void setTm(TransportMapping tm) {
		this.tm = tm;
	}
	public Address getTargetAddress() {
		return targetAddress;
	}
	public void setTargetAddress(Address targetAddress) {
		this.targetAddress = targetAddress;
	}
	public String getProtol() {
		return protol;
	}
	public void setProtol(String protol) {
		this.protol = protol;
	}
}
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {	
		SnmpHelper4j sh = new SnmpHelper4j("192.168.2.18", "public", 161);
		System.out.println(sh.getOidValueString("1.3.6.1.2.1.1.1.0"));
	}
}


   附上源码(Snmp开源包包括Api文档)
  
2
2
分享到:
评论

相关推荐

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

    SNMP4J是一个Java实现的SNMP协议库,使得Java开发者能够轻松地在应用程序中集成SNMP功能,从而对网络设备进行监控和管理。 SNMP4J.jar是这个库的核心组件,包含了SNMP协议的各种操作所需的类和方法。这个压缩包中的...

    snmp4j-1.9.3d.zip_snmp4j-1.9.3d_snmp管理工具

    标题中的"snmp4j-1.9.3d.zip_snmp4j-1.9.3d_snmp管理工具"表明这是一个版本为1.9.3d的SNMP4J库的压缩包,它包含了对SNMP协议的支持和一些管理功能。 SNMP,全称Simple Network Management Protocol,是一种应用层...

    snmp4j包来读取snmp协议数据

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

    snmp4j api文档

    **SNMP4J API文档详解** SNMP4J是一个开源的Java实现的简单网络管理协议(SNMP)库,它提供了全面的API用于开发SNMP应用程序。本文将深入解析SNMP4J API的核心概念和主要功能,帮助开发者理解和利用这个强大的工具...

    snmp4j的jar包

    SNMP4J是一个基于Java语言实现的简单网络管理协议(SNMP)的开源库,它为开发者提供了在Java环境中开发SNMP应用的全面支持。SNMP是网络设备管理和监控的标准协议,广泛应用于网络设备配置、性能监控以及故障排查等...

    基于SNMP4J的SNMP操作实现代码

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

    snmp4j源码和API

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它提供了全面的功能,用于开发SNMP应用。SNMP是网络管理领域的重要标准,用于监控和管理网络设备,如路由器、交换机和服务器。下面将详细...

    snmp4j.zip_java使用snmp4j_snmp4j_snmp4j java

    SNMP4J是一个Java库,专门用于实现简单网络管理协议(SNMP)的应用程序。SNMP是一种广泛应用于网络设备管理的标准协议,它允许系统管理员远程监控和管理网络设备,如路由器、交换机、服务器等。在Java环境中,SNMP4J...

    SNMP4J 的jar包

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的开源库,它提供了全面的SNMPv1、SNMPv2c和SNMPv3支持,包括代理(Agent)和管理站(Manager)的功能。这个jar包包含了SNMP4J的核心组件以及SNMP4J-Agent扩展,用于...

    snmp4j-agent官方源码

    SNMP4J-Agent是SNMP4J项目的一部分,它是一个开放源码的Java实现,用于构建SNMP代理(Agent)应用程序。SNMP(简单网络管理协议)是一种广泛使用的网络管理协议,允许网络管理员监控和配置网络设备。SNMP4J-Agent...

    snmp4j-agent

    SNMP4J-Agentx是一个基于Java的开源工具,主要用于实现简单网络管理协议(SNMP)的代理功能。这个工具在SNMP4J项目下开发,是SNMP4J的一个扩展,提供了更丰富的功能和更方便的接口来创建和管理SNMP代理。SNMP4J-...

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

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

    snmp4j实现snmp trap 发送与接收

    SNMP4J 实现 SNMP Trap 发送与接收 SNMP(Simple Network Management Protocol,简易网络管理协议)是一种广泛应用于网络管理的协议,SNMP4J 是一个基于 Java 的 SNMP 库,提供了完整的 SNMP 功能实现。本文将详细...

    用SNMP4J实现的Trap源码

    SNMP4J是一个Java实现的SNMP协议库,它为开发者提供了全面的SNMP功能,包括发送Trap(陷阱)消息。Trap是SNMP中的一种通知机制,当网络设备发生异常或特定事件时,会主动向管理站发送Trap消息。 在这个项目中,"用...

    snmp4j的jar包,源码和api

    SNMP4J是一个Java实现的简单网络管理协议(SNMP)的应用编程接口(API),它为开发者提供了在Java环境中编写SNMP应用的工具。SNMP是网络设备管理和监控的标准协议,广泛应用于网络设备配置、性能监控和故障排查。在...

    用snmp4j获取本地所有oid

    Snmp4j是一个Java库,它提供了全面的SNMP支持,包括V1、V2c和V3版本,使得开发者能够在Java应用程序中轻松地进行SNMP通信。本篇文章将详细介绍如何在Windows环境下配置SNMP服务,并利用Snmp4j获取本地所有OID(对象...

    SNMP4J远程获取设备信息案例

    SNMP4J是一个Java库,专门用于实现简单网络管理协议(SNMP)的应用程序。SNMP是网络管理和监控的标准协议,允许系统管理员远程收集和配置网络设备的信息。在这个"SNMP4J远程获取设备信息案例"中,我们将深入探讨如何...

    java利用snmp4j包来读取snmp协议数据

    SNMP4J是一个开源的Java库,专门设计用于实现SNMP协议的客户端功能,使得开发者能够从网络设备中读取或设置管理信息。本篇文章将详细探讨如何使用SNMP4j库在Java中读取SNMP协议数据。 首先,了解SNMP是必要的。SNMP...

    snmp4j get walk

    SNMP(简单网络管理协议)是用于网络设备管理的标准协议,而SNMP4J是一个Java实现的SNMP库,它提供了在Java应用程序中与SNMP兼容设备交互的能力。"SNMP get walk" 是一个关键的操作,它允许从网络设备中批量获取MIB...

    如何利用snmp4j-agent在PC端模拟snmp服务

    本文将深入探讨如何使用SNMP4J-Agent工具在个人计算机上模拟SNMP服务,以便进行测试和开发。 SNMP4J-Agent是SNMP4J项目的一部分,是一个开源的Java库,用于实现SNMP代理功能。它提供了丰富的API,可以方便地构建...

Global site tag (gtag.js) - Google Analytics