- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建小应用程序来管理 snmp 设备,首先我想获取系统信息。
我使用 snmp4j 版本 2.7.0、java 1.8,设备使用 snmpv3。首先我想同步获取数据。我尝试用两种方式做到这一点,但我总是超时
这是我的代码
//Normal request
public class SynchronouslySnmp
{
protected String PORT="/161";
protected String PROTOCOL="udp:";
protected SnmpData snmpData;
protected Snmp snmp;
public SynchronouslySnmp(SnmpData snmpData)
{
this.snmpData=snmpData;
}
public void start()
{
createSNMPsession();
addSnmpUser();
sendSnmp();
}
private void sendSnmp()
{
// send the PDU
ResponseEvent response;
try
{
response = snmp.send(getPDU(), getTarget());
// extract the response PDU (could be null if timed out)
PDU responsePDU = response.getResponse();
// extract the address used by the agent to send the response:
if(responsePDU == null)
{
System.out.println("ERROR: table OID [" + SnmpContants.system + "] time out" );
}
else
{
Address peerAddress = response.getPeerAddress();
System.out.println("pdu: "+responsePDU.toString());
System.out.println("Address: "+peerAddress.toString());
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
snmp.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
protected void createSNMPsession()
{
TransportMapping<? extends Address> transport;
try
{
transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
transport.listen();
//snmp.listen();
}
catch (IOException e)
{
e.printStackTrace();
}
}
protected void addSnmpUser()
{
// add user to the USM
snmp.getUSM().addUser(new OctetString(snmpData.getUsmUser()),
new UsmUser(new OctetString(snmpData.getUsmUser()),
snmpData.getAuthProtocol(),
new OctetString(snmpData.getAuthPassword()),
snmpData.getPrivProtocol(),
new OctetString(snmpData.getPrivPassword())));
}
protected Target getTarget()
{
// create the target
UserTarget target = new UserTarget();
Address targetAddress = GenericAddress.parse(PROTOCOL+snmpData.getIpAddress()+PORT);
target.setAddress(targetAddress);
target.setRetries(snmpData.getRetryTimes());
target.setTimeout(snmpData.getTimeout());
target.setVersion(snmpData.getSnmpVersion());
target.setSecurityLevel(snmpData.getSecurityLevel());
target.setSecurityName(new OctetString(snmpData.getUsmUser()));
return target;
}
protected PDU getPDU()
{
// create the PDU
PDU pdu = new ScopedPDU();
pdu.add(new VariableBinding(SnmpConstants.system));
pdu.setType(PDU.GETBULK);
return pdu;
}
}
我尝试使用treeUtil,但遇到了与正常请求中相同的错误,以下是我的代码
public class SynchronouslySnmpUsingTree extends SynchronouslySnmp
{
private OID tableOid;
private LinkedHashMap<String, List<VariableBinding>> resultMap;
public SynchronouslySnmpUsingTree(SnmpData snmpData)
{
super(snmpData);
resultMap = new LinkedHashMap<String, List<VariableBinding>>();
tableOid=new OID(".1.3.6.1.2.1.1");
createSNMPsession();
addSnmpUser();
sendSnmp();
}
private void sendSnmp()
{
try
{
TreeUtils treeUtils = new TreeUtils(snmp, new PDUFactory()
{
@Override
public PDU createPDU(MessageProcessingModel arg0) {
return getPDU();
}
@Override
public PDU createPDU(Target arg0) {
return getPDU();
}
});
List<TreeEvent> events = treeUtils.getSubtree(getTarget(), tableOid);
if (events == null || events.size() == 0)
{
System.out.println("Error: Unable to read table...");
return;
}
for (TreeEvent event : events)
{
if (event != null && !event.isError())
{
VariableBinding[] varBindings = event.getVariableBindings();
if (varBindings != null && varBindings.length != 0)
{
for (VariableBinding varBinding : varBindings)
{
if (varBinding != null)
{
OID oid = varBinding.getOid();
List<VariableBinding> binds = resultMap.get(oid.toString());
if( binds == null)
{
binds = new ArrayList<VariableBinding>();
resultMap.put(oid.toString(), binds);
}
binds.add(varBinding);
}
}
}
}
else
{
System.out.println("Error: table OID [" + tableOid + "] " + event.getErrorMessage());
continue;
}
}
}
catch(Throwable t)
{
System.out.println("Failed operation: getMibTableWithNext");
t.printStackTrace();
}
finally
{
try
{
snmp.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
主要功能
public static void main(String[] args){
SynchronouslySnmp synchronouslySnmp =new SynchronouslySnmp (new SnmpData());
synchronouslySnmp.start();
SynchronouslySnmpUsingTree synchronouslySnmpUsingTree = new SynchronouslySnmpUsingTree(new SnmpData());
}
程序运行结果
Error: table OID [1.3.6.1.2.1.1] time out); <---nurmal
Error: table OID [1.3.6.1.2.1.1] Request time out); <---tree
我查看https://www.snmp4j.org/html/faq.html
Why am I always getting a time-out (response == null) when sending a request?
Probably you have forgotten to call the listen() method of the TransportMapping (once) or the Snmp class before sending the request.
但我在 createSNMPsession() 方法中这样做那么我做错了什么?谢谢。 :)
最佳答案
所以,在我绞尽脑汁一整天之后,答案附在任何需要知道如何将 SNMPV3 与 SNMP4J 一起使用的人身上。
让我们从正常请求开始。问题是我将 PDU 与 GETBULK 一起使用,但我没有设置最大重复次数,因此默认值为 0,并且我得到了空 VBS
要修复它只需使用:
protected PDU getPDU()
{
// create the PDU
PDU pdu = new ScopedPDU();
pdu.add(new VariableBinding(SnmpConstants.system));
pdu.setType(PDU.GETBULK);
pdu.setMaxRepetitions(10);//or any number you wish
return pdu;
}
对于树问题,不需要定义最大重复次数,这是 getSubTree 的全部要点。所以问题是我将超时(以秒为单位)设置为 30 而不是毫秒为 30000 愚蠢的错误。但后来我得到了更大的错误“代理没有按字典顺序返回变量绑定(bind)”。我用墙来修复它:
treeUtils.setIgnoreLexicographicOrder(true);
List<TreeEvent> events = treeUtils.getSubtree(getTarget(), tableOid);
if (events == null || events.size() == 0)
{
System.out.println("Error: Unable to read table...");
return;
}
.
.
.
if( binds == null)
{
binds = new ArrayList<VariableBinding>();
binds.add(varBinding);
resultMap.put(oid.toString(), binds);
}
关于java - 如何使用 snmp4j-2.7.0 获取 snmpv3 中的系统信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237216/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!