1. 获取网络设备信息:
import java.io.IOException;
import java.util.Vector;
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.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 SnmpUtil {
private Snmp snmp = null;
private Address targetAddress = null;
public void initComm() throws IOException {
// 设置Agent方的IP和端口
targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
transport.listen();
}
public void sendPDU() throws IOException
{
// 设置 target
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
// 通信不成功时的重试次数
target.setRetries(2);
// 超时时间
target.setTimeout(1500);
target.setVersion(SnmpConstants.version1);
// 创建 PDU
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 })));
// MIB的访问方式
pdu.setType(PDU.GET);
// 向Agent发送PDU,并接收Response
ResponseEvent respEvnt = snmp.send(pdu, target);
// 解析Response
if (respEvnt != null && respEvnt.getResponse() != null) {
Vector<VariableBinding> recVBs = respEvnt.getResponse()
.getVariableBindings();
for (int i = 0; i < recVBs.size(); i++) {
VariableBinding recVB = recVBs.elementAt(i);
System.out.println(recVB.getOid() + " : " + recVB.getVariable());
}
}
}
public static void main(String[] args) {
try {
SnmpUtil util = new SnmpUtil();
util.initComm();
util.sendPDU();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 更改设备名
import java.io.IOException;
import java.util.Vector;
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.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 SnmpUtil {
private Snmp snmp = null;
private Address targetAddress = null;
public void initComm() throws IOException {
// 设置Agent方的IP和端口
targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
transport.listen();
}
public ResponseEvent sendPDU(PDU pdu) throws IOException {
// 设置 target
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
// 通信不成功时的重试次数
target.setRetries(2);
// 超时时间
target.setTimeout(1500);
target.setVersion(SnmpConstants.version1);
// 向Agent发送PDU,并返回Response
return snmp.send(pdu, target);
}
public void setPDU() throws IOException {
// set PDU
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 }), new OctetString("SNMPTEST")));
pdu.setType(PDU.SET);
sendPDU(pdu);
}
public void getPDU() throws IOException {
// get PDU
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 })));
pdu.setType(PDU.GET);
readResponse(sendPDU(pdu));
}
public void readResponse(ResponseEvent respEvnt) {
// 解析Response
if (respEvnt != null && respEvnt.getResponse() != null) {
Vector<VariableBinding> recVBs = respEvnt.getResponse()
.getVariableBindings();
for (int i = 0; i < recVBs.size(); i++) {
VariableBinding recVB = recVBs.elementAt(i);
System.out.println(recVB.getOid() + " : " + recVB.getVariable());
}
}
}
public static void main(String[] args) {
try {
SnmpUtil util = new SnmpUtil();
util.initComm();
util.setPDU();
util.getPDU();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 接受trap信息
private TransportMapping transport = null;
public void initComm() throws IOException {
// 设置Agent方的IP和端口
targetAddress = GenericAddress.parse("udp:192.168.1.1/161");
// 设置接收trap的IP和端口
transport = new DefaultUdpTransportMapping(new UdpAddress(
"192.168.1.2/162"));
snmp = new Snmp(transport);
CommandResponder trapRec = new CommandResponder() {
public synchronized void processPdu(CommandResponderEvent e) {
// 接收trap
PDU command = e.getPDU();
if (command != null) {
System.out.println(command.toString());
}
}
};
snmp.addCommandResponder(trapRec);
transport.listen();
}
public void setTrap() throws IOException {
// 构造Trap PDU
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"),
new OctetString("SnmpTrap")));
pdu.setType(PDU.TRAP);
sendPDU(pdu);
System.out.println("Trap sent successfully.");
}
public synchronized void listen() {
System.out.println("Waiting for traps..");
try {
this.wait();//Wait for traps to come in
} catch (InterruptedException ex) {
System.out.println("Interrupted while waiting for traps: " + ex);
System.exit(-1);
}
}
public static void main(String[] args) {
try {
SnmpUtil util = new SnmpUtil();
util.initComm();
util.listen();
} catch (IOException e) {
e.printStackTrace();
}
}
分享到:
相关推荐
在这个“C++ SNMP实例程序”中,我们将会探讨如何在Visual Studio环境下使用C++进行SNMP编程。 首先,SNMP主要由三部分构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。管理站负责发送请求,而代理则...
本文将详细介绍SNMP实例,特别是通过Java库snmp4j实现的GET、GETNEXT、SET操作以及TRAP发送和MIB获取。 1. **SNMP基本概念** SNMP由三个主要组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。管理...
当学习这些代码实例时,读者应着重理解SNMP协议的基本概念、SNMP4J库的使用方法以及如何在Java程序中调用这些方法来执行具体的网络管理任务。这些知识能够帮助读者构建自己的SNMP监控工具或者集成SNMP功能到现有的...
利用C++实现SNMP协议,包括最常用的GET,GETNEXT操作等。
本文档介绍了如何在 Cisco交换机或路由器上配置SNMP。本文档的目标不是涵盖所有的 SNMP功能,而是对主要的命令加以介绍并提供一些示例和指南。
net-snmp API分为两种,...该demo是使用signle api去实现snmp读,写也是类似的。基本方法是用single api直接替换到传统的api(除了几个函数参数有差别外,大部分的参数都是一样的)。 全部代码,gcc直接编译,可测试。
这需要定义一个`CommandResponder`接口实现类,并注册到SNMP实例: ```java snmp.addCommandResponder(new CommandResponder() { @Override public void processPdu(CommandResponderEvent event) { PDU pdu = ...
"SNMP与Net-SNMP移植参考程序.rar"可能包含示例代码或已经移植好的Net-SNMP实例,可供参考;而"参考资料"可能是其他相关的文档或链接,有助于深入学习和解决移植过程中遇到的问题。通过研究这些资源,可以更顺利地...
- 创建并配置SNMP实例,包括设置版本、社区字符串、安全参数等。 - 创建Trap PDU,设置Trap类型(如 GenericTrap enterprises.0 coldStart)和变量绑定。 - 发送Trap,通常使用`snmp.send(pdu, target)`方法。 6...
本篇文章详细介绍了SNMP的基本原理,特别是Trap机制的运作方式,并基于提供的代码片段分析了如何使用Java实现一个简单的SNMP代理,包括设置监听地址、创建SNMP实例、处理Trap消息等关键步骤。通过这样的实现,可以在...
4. **发送请求** - 使用Snmp实例的`send`方法发送PDU到Target,可以是GET、SET或TRAP请求。 5. **接收响应** - 如果是同步发送,可以使用`receive`方法等待响应。异步发送时,可以注册监听器来处理响应。 6. **...
在这个“SNMP agent.rar”压缩包中,我们主要关注的是C语言实现的SNMP代理(SNMP Agent)以及MIB(Management Information Base)实例,特别是与SNMP表格(snmp table)相关的开发。 首先,SNMP代理是SNMP协议的...
3. 创建Snmp实例:使用TransportMapping实例初始化Snmp对象。 4. 创建Target对象:根据目标设备的IP地址和端口创建Address对象,然后创建ComunityTarget实例。 5. 发送请求:使用Snmp对象的`send`方法,传入PDU...
很好的SNMP实例, 希望与大家一块学习 ~
**SNMP4J 文档 实例** SNMP4J 是一个开源的 Java SNMP 库,它为开发人员提供了实现 Simple Network Management Protocol (SNMP) 应用程序的强大工具。SNMP 是一种网络管理协议,用于在设备之间交换网络管理信息,如...
这个压缩包包含了SNMP4J入门实例、SNMP4J的jar文件以及XP SNMP(Windows XP上的SNMP服务)的安装包,是学习和使用SNMP4J的好资源。 首先,SNMP4J入门实例提供了如何使用SNMP4J进行网络通信的基础知识。SNMP协议基于...
2. **创建SNMP对象**:然后,你需要创建一个`Snmp`对象实例,指定SNMP版本和目标网络地址。例如,对于SNMP V2c,你可以这样创建: ```csharp var snmp = new Snmp(new VersionCode(VersionCode.V2), "192.168.1.1...
这个是本人由于公司需要扩展Net-SNMP的Agent而写的一个开发流程文档,压缩包中也包含程序的...根据Net-SNMP官方的实例程序,详细介绍了SNMP代理开发的各个步骤,各位读者按照步骤可以轻松的完成一个简单代理端的开发。
在这个实例中,我们将深入探讨如何使用SNMP4J进行基本的SNMP操作。 首先,我们要了解SNMP的基本组件。在SNMP中,有三个主要角色: 1. **管理站(Manager)**:这是发起SNMP请求的客户端,通常是一个服务器或应用...