简单介绍一下SNMP4J
SNMP4J——一个支持java管理器和代理,支持snmp应用程序接口的类库。
SNMP4J是一个商业类库,而且开源免费,它也是一个有着很高技术艺术性的SNMP执行能力的类库,支持J2SE1.4或更高的版本。SNMP4J支持指令发生器(管理器),就像指令回应(代理)一样好。它从SNMP++(一个著名的,支持SNMPv1/v2/v3的C++应用程序接口)获得灵感,具有清晰的对象导向。
SNMP4J 应用程序接口提供一下特性:
1. 支持MD5和SHA验证,DES和AES128、AES192和AES256加密的SNMPv3。
2. 支持MPv1,MPv2C和MPv3,带执行的可阻塞的信息处理模块。
3. 全部PDU格式。
4. 可阻塞的传输拓扑。UPD和TCP支持直接使用。
5. 可阻塞的超时模块。
6. 同步和异步请求。
7. 支持像指令回应器一样好的指令发生器。
8. 带有Apache证书模版,开源免费。
9. JAVA 1.4.1或更高版本。
10. 使用LOG4J记录日志。
11. 使用GETBULK实现Row-based矩阵的有效的异步表格获取。
12. 支持多线程。
13. JUNIT测试
利用SNMP4J获取可管网络设备的OID数据
使用SNMP4j来获得SNMP信息,首先要创建两个实例CommunityTarget和PDU(主要针对v1和v2)。
我写了个简单的程序如下。
import org.snmp4j.*;
import org.snmp4j.transport.*;
import java.io.*;
import org.snmp4j.smi.*;
import org.snmp4j.mp.*;
import org.snmp4j.event.*;
class SnmpGet{
public static void main(String[] args){
try{
//设定CommunityTarget
CommunityTarget myTarget = new CommunityTarget();
Address deviceAdd = GenericAddress.parse("udp:10.5.24.37/161");
myTarget.setAddress(deviceAdd);
myTarget.setCommunity(new OctetString("public"));
myTarget.setRetries(2);
myTarget.setTimeout(5*60);
myTarget.setVersion(SnmpConstants.version2c);//org.snmp4j.mp.*;
//设定采取的协议
TransportMapping transport1 = new DefaultUdpTransportMapping();
Snmp protocol = new Snmp(transport1);
transport1.listen();
//获取mib
PDU request = new PDU();
String oidstr ="1.3.6.1.2.1.4.20";
VariableBinding var = new VariableBinding(new OID(oidstr));
request.add(var);
request.setType(PDU.GETNEXT);
ResponseEvent responseEvent = protocol.send(request, myTarget);
PDU response=responseEvent.getResponse();
//输出
if(response != null){
System.out.println("request.size()="+request.size());
System.out.println("response.size()="+response.size());
VariableBinding vb = response.get(0);
System.out.println(vb);
}
}catch(IOException e){
e.printStackTrace();
System.out.println(e.getMessage());
return;
}
}
简单介绍一下SNMP4J
最新推荐文章于 2024-07-12 15:11:45 发布