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

java实现snmp的get和walk

    博客分类:
  • snmp
阅读更多

    首先到http://www.snmp4j.org/上下载一个jar,然后加入引用。

    在这里我主要是参照别人的代码实现的snmpget和snmpwalk命令。具体的请看代码

package open.mis.test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
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;
import snmp.SNMPObject;
import snmp.SNMPSequence;
import snmp.SNMPVarBindList;
import snmp.SNMPv1CommunicationInterface;

public class SnmpManager {
	private static final Log log = LogFactory.getLog(SnmpManager.class);
	private static int version=0;
	private static String protocol = "udp";
	private static String port="161";
	
	public static String snmpGet(String ipAddress,String community,String oid){
		String resultStat = null;
		StringBuilder address = new StringBuilder();
		address.append(protocol);
		address.append(":");
		address.append(ipAddress);
		address.append("/");
		address.append(port);
		Address targetAddress = GenericAddress.parse(address.toString());
		PDU pdu = new PDU();
		pdu.add(new VariableBinding(new OID(oid)));
		pdu.setType(PDU.GET);
		
		//创建共同体对象communityTarget
		CommunityTarget target = new CommunityTarget();
		target.setCommunity(new OctetString(community));
		target.setAddress(targetAddress);
		target.setVersion(SnmpConstants.version1);
		target.setTimeout(2000);
		target.setRetries(1);
		
		DefaultUdpTransportMapping udpTransportMapping = null;
		Snmp snmp = null;
		try{
			//发送同步消息
			udpTransportMapping = new DefaultUdpTransportMapping();
			udpTransportMapping.listen();
			snmp = new Snmp(udpTransportMapping);
			ResponseEvent response = snmp.send(pdu, target);
			PDU responsePdu = response.getResponse();
			
			if(responsePdu == null){
				log.info(ipAddress+":Request time out");
			}else {
				Object obj = responsePdu.getVariableBindings().firstElement();
				VariableBinding variable = (VariableBinding)obj;
				System.out.println(variable.getOid());
				resultStat = variable.getVariable().toString();
			}
		}catch (Exception e) {
			System.out.println("获取SNMP节点状态时发生错误"+e);
		}finally{
			if(snmp != null){
				try {
					snmp.close();
				} catch (IOException e2) {
					snmp = null;
				}
			}
			if(udpTransportMapping != null){
				try {
					udpTransportMapping.close();
				} catch (Exception e2) {
					udpTransportMapping = null;
				}
			}
		}
		System.out.println("IP" + ipAddress + " resultStat:"+resultStat);
		return resultStat;
	}
	
	public static String[] snmpwalk(String ipAddress,String community,String oid){
		String[] returnValueStrings = null; //oid走访结果数组
		SNMPv1CommunicationInterface comInterface = null;
		try{
			InetAddress hostAddress = InetAddress.getByName(ipAddress);
			comInterface = new SNMPv1CommunicationInterface(version,hostAddress,community);
			comInterface.setSocketTimeout(2000);
			
			//返回所有以oid开始的管理信息库变量值
			SNMPVarBindList tableVars = comInterface.retrieveMIBTable(oid);
			returnValueStrings = new String[tableVars.size()];
			
			//循环处理所有以oid开始的节点的返回值
			for(int i=0;i<tableVars.size();i++){
				SNMPSequence pair= (SNMPSequence)tableVars.getSNMPObjectAt(i);
				SNMPObject  snmpValue = pair.getSNMPObjectAt(1);
				String typesString = snmpValue.getClass().getName();
				if(typesString.equals("snmp.SNMPOctecString")){
					String snmpString = snmpValue.toString();
					int nullLocation = snmpString.indexOf('\0');
					if(nullLocation >=0){
						snmpString = snmpString.substring(0,nullLocation);
					}
					returnValueStrings[i] = snmpString;
					System.out.println(snmpString);
				}else {
					returnValueStrings[i] = snmpValue.toString();
					System.out.println(snmpValue.toString());
				}
			}
		}catch (SocketTimeoutException e) {
			System.out.println("走访IP为"+ipAddress+",OID为"+oid+"时超时!");
			returnValueStrings = null;
		}catch (Exception e) {
			System.out.println("SNMP走访节点时发生错误");
		}finally{
			if(comInterface!=null){
				try{
					comInterface.closeConnection();
				}catch (SocketException e) {
					comInterface = null;
				}
				
			}
		}
		return returnValueStrings;
	}
	
	public static void main(String[] args) {
		SnmpManager.snmpGet("127.0.0.1", "public", "1.3.6.1.2.1.1.5.0");
		//SnmpManager.snmpGet("127.0.0.1", "public", "sysName.0");
		//sSnmpManager.snmpwalk("127.0.0.1", "public", "SNMPv2-MIB");
	}
}
分享到:
评论

相关推荐

    Java实现snmp的get和walk代码示例

    Java实现snmp的get和walk代码示例 本文主要介绍了使用Java语言实现SNMP(Simple Network Management Protocol,简单网络管理协议)的get和walk功能,使用了第三方库SNMP4j来实现相关功能。 一、SNMP简介 SNMP是一...

    java版的SNMP_get/walk/getbulk

    java版的SNMP_get,SNMP_walk,SNMP_getbulk,详细举例代码完整版!!

    snmp4j get walk

    5. **SNMP GET WALK**:GET WALK操作结合了GET和GET NEXT,用于遍历MIB树中的一个分支,获取从某个OID开始的一系列对象值。它是获取大量设备状态信息的有效方式,特别适用于收集表(table)类型的MIB对象,如接口...

    java实现snmp数据包发送和接收资料

    以上是对"java实现snmp数据包发送和接收"这一主题的详细讲解,涵盖了SNMP协议基础、Java实现SNMP的方法、安全性和性能优化等多个方面。通过学习和实践,开发者可以利用Java有效地管理和监控网络设备。

    Java实现SNMP获得OId值

    通过以上分析,我们可以看到Java结合`Snmp4j`库在实现SNMP的GET和WALK操作方面提供了强大且灵活的支持。无论是对特定OID的快速查询还是对整个OID树的遍历,都可以通过精心设计的代码结构高效完成。对于网络管理和...

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

    在这份文档中,提到了几个SNMP4J中实现的操作,包括GET、GETNEXT、GETBULK、Walk和SET。 GET请求用于检索单个或多个管理对象实例的值。这是最基本的操作,通常用来获取一个或多个特定的管理信息库(MIB)对象的值。...

    snmp_Java进行SNMP通信_SNMP协议_snmp配置_常用OID_snmp.jar_snmp4j_.jar

    Java实现snmp的get和walk代码示例.doc snmp4j.chm snmp.chm SnmpMain.java snmp配置说明.doc snmp协议详细讲解.doc ToolsetAdministratorGuide.pdf ToolsetQuickStartGuide.pdf 常用oids.txt 为什么积分越来越少,...

    snmp实现的原理以及用java实现源程序

    本篇文章详细介绍了SNMP的基本原理,特别是Trap机制的运作方式,并基于提供的代码片段分析了如何使用Java实现一个简单的SNMP代理,包括设置监听地址、创建SNMP实例、处理Trap消息等关键步骤。通过这样的实现,可以在...

    java调用snmp协议

    SNMP4J是一个完全用Java编写的SNMP API,它支持SNMPv1、SNMPv2c和SNMPv3,并且提供了一个易于使用的API,可以方便地进行SNMP的Get、Set、Trap和Walk操作。 1. **Get操作**:通过OID(Object Identifier,对象标识符...

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

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

    snmp_manager.rar_java snmp web开发_snmp in java _snmp java_snmp ma

    在这个“snmp_manager.rar”压缩包中,我们找到了一个基于Java实现的SNMP Web应用,它使得用户可以通过Web浏览器方便地查询和管理支持SNMP协议的设备。 首先,我们要理解Java SNMP开发的基础。在Java中,我们可以...

    snmp4j java关于访问snmp设备的jar包

    SNMP4J是一个Java库,专门用于实现Simple Network ...总之,SNMP4J是Java开发者访问SNMP设备的强大工具,通过它的API可以方便地实现对网络设备的监控和管理,无论是简单的查询还是复杂的配置任务,都能轻松应对。

    SNMP协议java开发包

    SNMP4j是Java平台上的一个开源SNMP API,它提供了完整的SNMP v1、v2c和v3的支持,包括Trap发送、Get、Set操作以及Walk功能。这个开发包可以帮助我们构建应用程序,以便监控网络设备的端口状态,服务器的内存、CPU...

    java访问snmpJar包snmp.jar

    Java通过SNMP(简单网络管理协议)库,如`snmp.jar`,可以实现对网络设备的监控和管理。SNMP是一种广泛应用于网络管理和故障排查的协议,它允许系统管理员远程收集和修改网络设备的状态信息。`snmp.jar`包含了执行...

    JAVA基于SNMP网络设备MIB信息采集.zip

    通过学习和理解这些代码,开发者可以更好地掌握如何在Java应用程序中集成SNMP功能,从而实现对网络设备的远程监控和管理。同时,这也可以作为进一步扩展到其他网络管理任务,如性能监控、故障检测和自动化的基础。

    snmp 获取服务器信息

    `SysInfo.java`可能是一个Java应用程序,用于利用Sigar库来获取和展示系统信息。通过集成这个库,开发者可以方便地获取服务器的硬件、操作系统、网络等详细状态,并可自定义处理和展示这些信息。 总结来说,SNMP是...

    计算机毕业设计 JAVA基于SNMP网络设备MIB信息采集(论文+源代码) 代码论文 范文 模板 资源 JAVA程序源码

    标题中的“JAVA基于SNMP网络设备MIB信息采集”是一个典型的网络管理领域的技术主题,涉及到的主要知识点包括: ...通过分析和实现这个项目,学生不仅可以提升编程技能,还能深入理解网络设备的管理工作。

    JAVA基于SNMP网络设备MIB信息采集(论文+源代码).rar

    项目的核心功能包括:SNMP协议的实现:使用Java语言实现了SNMP协议的基本操作,如GET、SET和WALK操作,用于读取和修改网络设备的MIB变量。MIB信息解析:能够解析从网络设备返回的MIB信息,并将其转换为易于理解的...

    用SNMP4J实现的Trap源码

    它提供了丰富的API,支持各种SNMP操作,如Get、Set、Walk以及Trap的发送和接收。这个库还包括一个模拟代理,可用于测试和调试。 2. **Trap的概念**:在SNMP中,Trap是网络设备向管理站发送的一种非请求式的通信方式...

Global site tag (gtag.js) - Google Analytics