首先到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(Simple Network Management Protocol,简单网络管理协议)的get和walk功能,使用了第三方库SNMP4j来实现相关功能。 一、SNMP简介 SNMP是一...
java版的SNMP_get,SNMP_walk,SNMP_getbulk,详细举例代码完整版!!
5. **SNMP GET WALK**:GET WALK操作结合了GET和GET NEXT,用于遍历MIB树中的一个分支,获取从某个OID开始的一系列对象值。它是获取大量设备状态信息的有效方式,特别适用于收集表(table)类型的MIB对象,如接口...
以上是对"java实现snmp数据包发送和接收"这一主题的详细讲解,涵盖了SNMP协议基础、Java实现SNMP的方法、安全性和性能优化等多个方面。通过学习和实践,开发者可以利用Java有效地管理和监控网络设备。
通过以上分析,我们可以看到Java结合`Snmp4j`库在实现SNMP的GET和WALK操作方面提供了强大且灵活的支持。无论是对特定OID的快速查询还是对整个OID树的遍历,都可以通过精心设计的代码结构高效完成。对于网络管理和...
在这份文档中,提到了几个SNMP4J中实现的操作,包括GET、GETNEXT、GETBULK、Walk和SET。 GET请求用于检索单个或多个管理对象实例的值。这是最基本的操作,通常用来获取一个或多个特定的管理信息库(MIB)对象的值。...
Java实现snmp的get和walk代码示例.doc snmp4j.chm snmp.chm SnmpMain.java snmp配置说明.doc snmp协议详细讲解.doc ToolsetAdministratorGuide.pdf ToolsetQuickStartGuide.pdf 常用oids.txt 为什么积分越来越少,...
本篇文章详细介绍了SNMP的基本原理,特别是Trap机制的运作方式,并基于提供的代码片段分析了如何使用Java实现一个简单的SNMP代理,包括设置监听地址、创建SNMP实例、处理Trap消息等关键步骤。通过这样的实现,可以在...
SNMP4J是一个完全用Java编写的SNMP API,它支持SNMPv1、SNMPv2c和SNMPv3,并且提供了一个易于使用的API,可以方便地进行SNMP的Get、Set、Trap和Walk操作。 1. **Get操作**:通过OID(Object Identifier,对象标识符...
本文将详细介绍SNMP实例,特别是通过Java库snmp4j实现的GET、GETNEXT、SET操作以及TRAP发送和MIB获取。 1. **SNMP基本概念** SNMP由三个主要组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。管理...
在这个“snmp_manager.rar”压缩包中,我们找到了一个基于Java实现的SNMP Web应用,它使得用户可以通过Web浏览器方便地查询和管理支持SNMP协议的设备。 首先,我们要理解Java SNMP开发的基础。在Java中,我们可以...
SNMP4J是一个Java库,专门用于实现Simple Network ...总之,SNMP4J是Java开发者访问SNMP设备的强大工具,通过它的API可以方便地实现对网络设备的监控和管理,无论是简单的查询还是复杂的配置任务,都能轻松应对。
SNMP4j是Java平台上的一个开源SNMP API,它提供了完整的SNMP v1、v2c和v3的支持,包括Trap发送、Get、Set操作以及Walk功能。这个开发包可以帮助我们构建应用程序,以便监控网络设备的端口状态,服务器的内存、CPU...
Java通过SNMP(简单网络管理协议)库,如`snmp.jar`,可以实现对网络设备的监控和管理。SNMP是一种广泛应用于网络管理和故障排查的协议,它允许系统管理员远程收集和修改网络设备的状态信息。`snmp.jar`包含了执行...
通过学习和理解这些代码,开发者可以更好地掌握如何在Java应用程序中集成SNMP功能,从而实现对网络设备的远程监控和管理。同时,这也可以作为进一步扩展到其他网络管理任务,如性能监控、故障检测和自动化的基础。
`SysInfo.java`可能是一个Java应用程序,用于利用Sigar库来获取和展示系统信息。通过集成这个库,开发者可以方便地获取服务器的硬件、操作系统、网络等详细状态,并可自定义处理和展示这些信息。 总结来说,SNMP是...
标题中的“JAVA基于SNMP网络设备MIB信息采集”是一个典型的网络管理领域的技术主题,涉及到的主要知识点包括: ...通过分析和实现这个项目,学生不仅可以提升编程技能,还能深入理解网络设备的管理工作。
项目的核心功能包括:SNMP协议的实现:使用Java语言实现了SNMP协议的基本操作,如GET、SET和WALK操作,用于读取和修改网络设备的MIB变量。MIB信息解析:能够解析从网络设备返回的MIB信息,并将其转换为易于理解的...
它提供了丰富的API,支持各种SNMP操作,如Get、Set、Walk以及Trap的发送和接收。这个库还包括一个模拟代理,可用于测试和调试。 2. **Trap的概念**:在SNMP中,Trap是网络设备向管理站发送的一种非请求式的通信方式...