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协议进行数据查询的一个功能,它能够遍历设备的MIB(Management Information Base)树,获取指定OID(Object Identifier,对象标识符)的所有子节点信息。 SNMP_WALK工具通常是一个命令行实用...
`snmpwalk`操作基于SNMP协议的GETNEXT请求,它会从指定的OID(Object Identifier)开始,连续获取MIB树中的下一个OID及其对应的值,直到到达MIB树的末端或者指定的OID范围结束。这种遍历方式对于收集网络设备状态...
除了GET操作外,SNMP还支持WALK操作,用于遍历一个OID下的所有子节点。在Java中,实现SNMP WALK通常需要循环发送GETNEXT请求直到到达结束点。 1. **初始化与建立连接** - 这部分与GET操作相似,同样需要初始化`...
管理网管工作站通常是一个独立的设备,它用作网络管理者进行网络管理的用户接口。网管工作站上必须装备有管理软件,管理员可以使用的用户接口和从 MIB 取得信息的数据库,同时为了进行网络管理它应该具备将管理命令...
snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机...
而`snmpwalk`是基于SNMP协议的一个强大工具,它能遍历并显示网络设备上的所有MIB对象,从而获取丰富的网络状态和配置数据。 ### SNMPwalk基础 `snmpwalk`是SNMP工具集的一部分,通常在Linux或Unix系统中使用,但也...
此合集包含200余个SNMP常用的OID。可以很方便的查找自己所需的OID,包括:系统参数、网络接口、CPU和负载、内存和磁盘及System Group等。
SNMPWALK是基于SNMP协议的一个实用工具,它用于通过网络遍历MIB(管理信息库)树,获取特定对象标识符(OID)或其子树的所有信息。这对于监控网络性能、诊断问题以及管理系统配置非常有用。 本资源包含适用于CentOS...
SnmpWalk返回的是一个OID的序列,每个OID对应一个设备上的特定配置或状态信息。 SnmpWalk的工作流程如下: 1. 用户指定要查询的OID或者MIB节点。 2. 工具发送一个SNMP GETNEXT请求到目标设备。 3. 设备返回下一个...
- **1.3.6.1.2.1.1.1.0**: 这个OID用于获取系统的基本信息,如设备型号、硬件版本、软件版本等,通常返回一个字符串值,通过`GET`请求可获取。 - **1.3.6.1.2.1.1.3.0**: 监控系统自启动以来的运行时间,即`...
5. **SNMP GET WALK**:GET WALK操作结合了GET和GET NEXT,用于遍历MIB树中的一个分支,获取从某个OID开始的一系列对象值。它是获取大量设备状态信息的有效方式,特别适用于收集表(table)类型的MIB对象,如接口...
在上面的代码中,我们使用SNMP4j库创建了一个CommunityTarget对象,用于指定SNMP协议的版本、协议、端口号等信息。然后,我们创建了一个PDU对象,并将其设置为GET类型,最后使用Snmp对象将PDU对象发送到目标设备,并...
跟linux平台的snmpwalk功能类似,使用方法:cmd→cd到该exe文件的目录→snmpwalk.exe + option(通过snmpwalk.exe -h可以获得相关参数及运用方法,包括version、community、host、oid等)
SNMP(简单网络管理协议)是一种广泛用于网络设备管理和监控的标准...结合SNMP服务器的设置,你可以构建一个强大的网络管理系统。务必确保在使用SNMP时遵循安全最佳实践,比如限制社区字符串的访问权限,避免信息泄露。
4-FortiGate防火墙SNMP状态监控OID值说明-v1.1归类.pdf
"SnmpWalk.exe" 是一个基于命令行的工具,它使用SNMP协议来遍历目标设备的管理信息库(MIB)。MIB是网络设备配置和状态信息的数据库。通过执行SNMP Walk,你可以获取特定对象标识符(OID)及其下属所有对象的值,这...
3. **OID**:对象标识符(Object Identifier, OID)是SNMP中用于唯一标识一个管理对象的路径。例如,“1.3.6.1.2.1.2.2.1.2”代表的是接口描述OID。 4. **PDU**:协议数据单元(Protocol Data Unit),用于封装SNMP...
在SNMP++库中,SNMP Walk被实现为一个强大的工具,它可以帮助开发者遍历网络设备的所有OID(对象标识符),收集有关网络性能、配置和状态的详细数据。SNMP++是C++编写的SNMP应用程序开发库,提供了一套完整的类接口...
Java实现snmp的get和walk代码示例.doc snmp4j.chm snmp.chm SnmpMain.java snmp配置说明.doc snmp协议详细讲解.doc ToolsetAdministratorGuide.pdf ToolsetQuickStartGuide.pdf 常用oids.txt 为什么积分越来越少,...
SNMPwalk则是一个更强大的工具,它可以遍历设备上的整个MIB树,返回指定OID下的所有相关对象。这通常用于收集大量信息,比如获取网络设备上所有的接口状态,或者监控一段时间内的网络流量。SNMPwalk会按照OID的层次...