`

Walk一个snmp的OID

阅读更多
package com.boonya.mecache.store;
import java.io.IOException;
import java.util.ArrayList;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.Null;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class SnmpWalk {
	private static int version = SnmpConstants.version1;
	private static String protocol = "udp";
	private static int port = 161;

	/**
	 * 用来walk一个snmp的OID 并获得相应的值
	 * 1)responsePDU == null<br>
	 * 2)responsePDU.getErrorStatus() != 0<br>
	 * 3)responsePDU.get(0).getOid() == null<br>
	 * 4)responsePDU.get(0).getOid().size() < targetOID.size()<br>
	 * 5)targetOID.leftMostCompare(targetOID.size(),responsePDU.get(0).getOid())
	 * !=0<br>
	 * 6)Null.isExceptionSyntax(responsePDU.get(0).getVariable().getSyntax())<br>
	 * 7)responsePDU.get(0).getOid().compareTo(targetOID) <= 0<br>
	 * 
	 * @param ipAddress
	 * @param community
	 * @param oid
	 * @return
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public Object snmpWalk(String ip, String community, String targetOid) {
		String address = protocol + ":" + ip + "/" + port;
		ArrayList arr_v = new ArrayList(10);

		OID targetOID = new OID(targetOid);

		PDU requestPDU = new PDU();
		requestPDU.setType(PDU.GETNEXT);
		requestPDU.add(new VariableBinding(targetOID));

		CommunityTarget target = SnmpUtil.createCommunityTarget(address,
				community, version, 2 * 1000L, 3);
		TransportMapping transport = null;
		Snmp snmp = null;
		try {
			transport = new DefaultUdpTransportMapping();
			snmp = new Snmp(transport);
			transport.listen();

			boolean finished = false;
			while (!finished) {
				VariableBinding vb = null;
				ResponseEvent response = snmp.send(requestPDU, target);
				PDU responsePDU = response.getResponse();

				if (null == responsePDU) {
					System.out.println("responsePDU == null");
					finished = true;
					break;
				} else {
					vb = responsePDU.get(0);
				}
				// check finish
				finished = checkWalkFinished(targetOID, responsePDU, vb);
				if (!finished) {
					// Dump response.
					// System.out.println("----"+vb.toString());
					// System.out.println("----"+vb.getOid().toString());
					// System.out.println(vb.getVariable().toString());
					arr_v.add(vb.getVariable().toString());

					// Set up the variable binding for the next entry.
					requestPDU.setRequestID(new Integer32(0));
					requestPDU.set(0, vb);
				}
			}
		} catch (Exception e) {
			System.out.println("SNMP walk Exception: " + e);
		} finally {
			if (snmp != null) {
				try {
					snmp.close();
				} catch (IOException ex1) {
					snmp = null;
				}
			}
			if (transport != null) {
				try {
					transport.close();
				} catch (IOException ex2) {
					transport = null;
				}
			}
		}
		return arr_v;

	}

	/**
	 * 检查SNMP走查完毕
	 * 
	 * @param resquestPDU
	 * @param targetOID
	 * @param responsePDU
	 * @param vb
	 * @return
	 */
	public boolean checkWalkFinished(OID targetOID, PDU responsePDU,
			VariableBinding vb) {
		boolean finished = false;
		if (responsePDU.getErrorStatus() != 0) {
			System.out.println("responsePDU.getErrorStatus() != 0 ");
			System.out.println(responsePDU.getErrorStatusText());
			finished = true;
		} else if (vb.getOid() == null) {
			System.out.println("vb.getOid() == null");
			finished = true;
		} else if (vb.getOid().size() < targetOID.size()) {
			System.out.println("vb.getOid().size() < targetOID.size()");
			finished = true;
		} else if (targetOID.leftMostCompare(targetOID.size(), vb.getOid()) != 0) {
			finished = true;
		} else if (Null.isExceptionSyntax(vb.getVariable().getSyntax())) {
			System.out
					.println("Null.isExceptionSyntax(vb.getVariable().getSyntax())");
			finished = true;
		} else if (vb.getOid().compareTo(targetOID) <= 0) {
			System.out.println("Variable received is not "
					+ "lexicographic successor of requested " + "one:");
			System.out.println(vb.toString() + " <= " + targetOID);
			finished = true;
		}
		return finished;

	}

}

分享到:
评论

相关推荐

    SNMP_WALK获取SNMP协议oid的非常好用的工具

    "SNMP_WALK"是利用SNMP协议进行数据查询的一个功能,它能够遍历设备的MIB(Management Information Base)树,获取指定OID(Object Identifier,对象标识符)的所有子节点信息。 SNMP_WALK工具通常是一个命令行实用...

    SnmpWalk.zip_SNMP_snmp WALK_snmpwalk _snmpwalk实现

    `snmpwalk`操作基于SNMP协议的GETNEXT请求,它会从指定的OID(Object Identifier)开始,连续获取MIB树中的下一个OID及其对应的值,直到到达MIB树的末端或者指定的OID范围结束。这种遍历方式对于收集网络设备状态...

    Java实现SNMP获得OId值

    除了GET操作外,SNMP还支持WALK操作,用于遍历一个OID下的所有子节点。在Java中,实现SNMP WALK通常需要循环发送GETNEXT请求直到到达结束点。 1. **初始化与建立连接** - 这部分与GET操作相似,同样需要初始化`...

    F5 SNMP OID说明

    管理网管工作站通常是一个独立的设备,它用作网络管理者进行网络管理的用户接口。网管工作站上必须装备有管理软件,管理员可以使用的用户接口和从 MIB 取得信息的数据库,同时为了进行网络管理它应该具备将管理命令...

    net-snmp,snmpwalk(windows最新版本)

    snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机...

    snmpwalk网络管理工具

    而`snmpwalk`是基于SNMP协议的一个强大工具,它能遍历并显示网络设备上的所有MIB对象,从而获取丰富的网络状态和配置数据。 ### SNMPwalk基础 `snmpwalk`是SNMP工具集的一部分,通常在Linux或Unix系统中使用,但也...

    SNMP常用OID合集.xlsx

    此合集包含200余个SNMP常用的OID。可以很方便的查找自己所需的OID,包括:系统参数、网络接口、CPU和负载、内存和磁盘及System Group等。

    SNMPWALK安装rpm.rar

    SNMPWALK是基于SNMP协议的一个实用工具,它用于通过网络遍历MIB(管理信息库)树,获取特定对象标识符(OID)或其子树的所有信息。这对于监控网络性能、诊断问题以及管理系统配置非常有用。 本资源包含适用于CentOS...

    SnmpWalk查看snmp

    SnmpWalk返回的是一个OID的序列,每个OID对应一个设备上的特定配置或状态信息。 SnmpWalk的工作流程如下: 1. 用户指定要查询的OID或者MIB节点。 2. 工具发送一个SNMP GETNEXT请求到目标设备。 3. 设备返回下一个...

    SNMP一些常用OID

    - **1.3.6.1.2.1.1.1.0**: 这个OID用于获取系统的基本信息,如设备型号、硬件版本、软件版本等,通常返回一个字符串值,通过`GET`请求可获取。 - **1.3.6.1.2.1.1.3.0**: 监控系统自启动以来的运行时间,即`...

    snmp4j get walk

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

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

    在上面的代码中,我们使用SNMP4j库创建了一个CommunityTarget对象,用于指定SNMP协议的版本、协议、端口号等信息。然后,我们创建了一个PDU对象,并将其设置为GET类型,最后使用Snmp对象将PDU对象发送到目标设备,并...

    snmpwalk.exe(windows 平台)

    跟linux平台的snmpwalk功能类似,使用方法:cmd→cd到该exe文件的目录→snmpwalk.exe + option(通过snmpwalk.exe -h可以获得相关参数及运用方法,包括version、community、host、oid等)

    dibian,Ubuntu版本的snmpwalk的安装介质,安装包,及说明文档

    SNMP(简单网络管理协议)是一种广泛用于网络设备管理和监控的标准...结合SNMP服务器的设置,你可以构建一个强大的网络管理系统。务必确保在使用SNMP时遵循安全最佳实践,比如限制社区字符串的访问权限,避免信息泄露。

    4-FortiGate防火墙SNMP状态监控OID值说明-v1.1归类.pdf

    4-FortiGate防火墙SNMP状态监控OID值说明-v1.1归类.pdf

    Windows系统下的可用SNMP软件-资源

    "SnmpWalk.exe" 是一个基于命令行的工具,它使用SNMP协议来遍历目标设备的管理信息库(MIB)。MIB是网络设备配置和状态信息的数据库。通过执行SNMP Walk,你可以获取特定对象标识符(OID)及其下属所有对象的值,这...

    C#SNMP_WALK举例

    3. **OID**:对象标识符(Object Identifier, OID)是SNMP中用于唯一标识一个管理对象的路径。例如,“1.3.6.1.2.1.2.2.1.2”代表的是接口描述OID。 4. **PDU**:协议数据单元(Protocol Data Unit),用于封装SNMP...

    SNMP Walk源代码

    在SNMP++库中,SNMP Walk被实现为一个强大的工具,它可以帮助开发者遍历网络设备的所有OID(对象标识符),收集有关网络性能、配置和状态的详细数据。SNMP++是C++编写的SNMP应用程序开发库,提供了一套完整的类接口...

    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 为什么积分越来越少,...

    snmpget、walk命令行工具,可直接使用

    SNMPwalk则是一个更强大的工具,它可以遍历设备上的整个MIB树,返回指定OID下的所有相关对象。这通常用于收集大量信息,比如获取网络设备上所有的接口状态,或者监控一段时间内的网络流量。SNMPwalk会按照OID的层次...

Global site tag (gtag.js) - Google Analytics