Java SNMP4J入门
我需要在SNMP4J中做一个代理,但是关于如何开始的文档非常差。有没有人有过SNMP4J的使用经验,能给我一个如何开始的想法?谢谢。您可以在此处下载SNMP4JAgent的源代码: 源代码包括一个示例代理——查看org.snmp4j.agent.example包中的所有相关类Java SNMP4J入门,java,snmp,snmp4j,Java,Snmp,Snmp4j,我需要在SNMP4J中做一个代理,但是关于如何开始的文档非常差。有没有人有过SNMP4J的使用经验,能给我一个如何开始的想法?谢谢。您可以在此处下载SNMP4JAgent的源代码: 源代码包括一个示例代理——查看org.snmp4j.agent.example包中的所有相关类 一种开始的方法是使用示例代码创建一个代理,然后修改它以满足您的需要。描述每个类的JavaDoc有点简洁,但它是完整的。这里有一个很好的链接,它描述了snmp4j的核心snmp类 还可以查看SnmpRequest.ja
一种开始的方法是使用示例代码创建一个代理,然后修改它以满足您的需要。描述每个类的JavaDoc有点简洁,但它是完整的。这里有一个很好的链接,它描述了snmp4j的核心snmp类
还可以查看SnmpRequest.java以获得一个快速示例很难找到使用SNMP4j库实现SNMPv3的好文档。官方文档中没有SNMPv3代理的工作示例。我编写了一个基本的SNMP代理,它可以使用SNMPv3协议进行连接,并在服务器上执行GET和SET操作
import java.io.IOException;
import org.snmp4j.PDU;
import org.snmp4j.ScopedPDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.UserTarget;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.security.AuthGeneric;
import org.snmp4j.security.AuthSHA;
import org.snmp4j.security.PrivAES128;
import org.snmp4j.security.PrivacyGeneric;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.TransportIpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultTcpTransportMapping;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class SNMPV3Agent {
private Address nmsIP;
private String user;
private String securityName;
private String privacyPassword;
private String authorizationPassword;
private AuthGeneric authProtocol;
private PrivacyGeneric privacyProtocol;
private String protocol;
private long timeOut = 1000L;
private int noOfRetries = 2;
private Snmp snmp;
private UserTarget target;
SNMPV3Agent(String ip, String protocol, int snmpPort, String username,
String securityName, String privacyPassword, String authPassowrd,
AuthGeneric authProtocol, PrivacyGeneric privacyProtocol) {
nmsIP = GenericAddress.parse(protocol + ":" + ip + "/" + snmpPort);
System.out.println("NMS IP set : " + nmsIP.toString());
this.protocol = protocol;
this.user = username;
this.securityName = securityName;
this.privacyPassword = privacyPassword;
this.authorizationPassword = authPassowrd;
this.authProtocol = authProtocol;
this.privacyProtocol = privacyProtocol;
}
public static void main(String[] args) {
SNMPV3Agent agent = new SNMPV3Agent("nms/server-ip", "udp", 162,
"abhinav", "abhinav", "myprivpass", "myauthpass",
new AuthSHA(), new PrivAES128());
try {
agent.startAgent();
ResponseEvent response = agent
.snmpGetOperation(SnmpConstants.sysName);
System.out.println(response.getResponse());
// Similarly you can perform set operation.
} catch (IOException e) {
e.printStackTrace();
}
}
public void startAgent() throws IOException {
if (snmp == null) {
TransportMapping<? extends TransportIpAddress> transport = null;
if (protocol.equalsIgnoreCase("udp")) {
System.out.println("UDP Protocol selected.");
transport = new DefaultUdpTransportMapping();
} else {
System.out.println("TCP Protocol selected.");
transport = new DefaultTcpTransportMapping();
}
snmp = new Snmp(transport);
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
transport.listen();
snmp.getUSM().addUser(
new OctetString(user),
new UsmUser(new OctetString(securityName), authProtocol
.getID(), new OctetString(authorizationPassword),
privacyProtocol.getID(), new OctetString(
privacyPassword)));
target = createUserTarget();
}
}
public ResponseEvent snmpSetOperation(VariableBinding[] vars)
throws IOException {
PDU setPdu = new ScopedPDU();
for (VariableBinding variableBinding : vars) {
setPdu.add(variableBinding);
}
return snmp.send(setPdu, target);
}
public ResponseEvent snmpGetOperation(OID oid) throws IOException {
PDU getPdu = new ScopedPDU();
getPdu.add(new VariableBinding(oid));
return snmp.get(getPdu, target);
}
private UserTarget createUserTarget() {
UserTarget target = new UserTarget();
target.setAddress(nmsIP);
target.setRetries(noOfRetries);
target.setTimeout(timeOut);
target.setVersion(3);
target.setSecurityLevel(3);
target.setSecurityName(new OctetString(securityName));
return target;
}
public long getTimeOut() {
return timeOut;
}
public void setTimeOut(long timeOut) {
this.timeOut = timeOut;
}
public int getNoOfRetries() {
return noOfRetries;
}
public void setNoOfRetries(int noOfRetries) {
this.noOfRetries = noOfRetries;
}
}
import java.io.IOException;
导入org.snmp4j.PDU;
导入org.snmp4j.ScopedPDU;
导入org.snmp4j.Snmp;
导入org.snmp4j.TransportMapping;
导入org.snmp4j.UserTarget;
导入org.snmp4j.event.ResponseEvent;
导入org.snmp4j.mp.MPv3;
导入org.snmp4j.mp.SnmpConstants;
导入org.snmp4j.security.AuthGeneric;
导入org.snmp4j.security.AuthSHA;
导入org.snmp4j.security.PrivAES128;
导入org.snmp4j.security.PrivacyGeneric;
导入org.snmp4j.security.SecurityModels;
导入org.snmp4j.security.SecurityProtocols;
导入org.snmp4j.security.USM;
导入org.snmp4j.security.UsmUser;
导入org.snmp4j.smi.Address;
导入org.snmp4j.smi.GenericAddress;
导入org.snmp4j.smi.OID;
导入org.snmp4j.smi.OctetString;
导入org.snmp4j.smi.TransportIpAddress;
导入org.snmp4j.smi.VariableBinding;
导入org.snmp4j.transport.defaulttcpttransportmapping;
导入org.snmp4j.transport.defaultudpttransportmapping;
公共类SNMPV3Agent{
专用地址nmsIP;
私有字符串用户;
私有字符串securityName;
私有字符串私有密码;
私有字符串授权密码;
专用认证协议;
专用专用专用协议;
私有字符串协议;
专用长超时=1000L;
私家侦探=2;
私有Snmp;
私有用户目标;
SNMPV3Agent(字符串ip、字符串协议、int-snmpPort、字符串用户名、,
字符串securityName、字符串privacyPassword、字符串AuthPassword、,
AuthGeneric authProtocol,PrivacyGeneric privacyProtocol){
nmsIP=GenericAddress.parse(协议+”:“+ip+”/“+snmpPort);
System.out.println(“NMS IP集:+nmsIP.toString());
本协议=协议;
this.user=用户名;
this.securityName=securityName;
this.privacyPassword=privacyPassword;
this.authorizationPassword=authPassowrd;
this.authProtocol=authProtocol;
this.privacyProtocol=privacyProtocol;
}
公共静态void main(字符串[]args){
SNMPV3Agent代理=新的SNMPV3Agent(“nms/服务器ip”,“udp”,162,
“abhinav”、“abhinav”、“myprivpass”、“myauthpass”,
新authsa(),新PrivAES128());
试一试{
agent.startAgent();
ResponseEvent response=代理
.snmpGetOperation(SnmpConstants.sysName);
System.out.println(response.getResponse());
//类似地,您可以执行set操作。
}捕获(IOE异常){
e、 printStackTrace();
}
}
public void startAgent()引发IOException{
如果(snmp==null){
TransportMapping关于如何运行SampleAgent,我曾经在这里写过博客,我已经使用Snmp4j创建了Snmp代理…唯一的问题是如何允许/code永远运行我的代理…您甚至可以查看FriendlySMP,它是Snmp4j的抽象。上面的代码没有实现Snmp代理。它实现了一个Snmp命令生成器,它是基本上相反(代理==命令响应程序)。