当前位置: 首页 > 知识库问答 >
问题:

Java中的SNMP代理:如何在MOTable中添加新行

贝滨海
2023-03-14

我正在尝试用Java实现SNMP代理。我使用snmp4j库(http://www.snmp4j.org/)。当前,我的代理在localhost/4700上工作。由于以下请求,我尝试发送snmpget请求:

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1

但我只得到类似“此OID当前不存在这样的实例”的信息。这是我的问题:我不知道如何创建一个实例。我试图在MOTable中添加行,但似乎不起作用。

下面是我实现MOGRoup的类的摘要

public class MyMIB 
//--AgentGen BEGIN=_EXTENDS
//--AgentGen END
implements MOGroup 
//--AgentGen BEGIN=_IMPLEMENTS
//--AgentGen END
{
    .
    .
    .

public static final OID oidTableEntry = 
    new OID(new int[] { 1,3,6,1,4,1,1,99,5,4,1,3,1 });
    .
    .
    .

private void createTableEntry(MOFactory moFactory) {
// Index definition
    .
    .
    .

// Table model
tableEntryModel = 
  moFactory.createTableModel(oidTableEntry,
                         tableEntryIndex,
                         tableEntryColumns);
((MOMutableTableModel)tableEntryModel).setRowFactory(
  new TableEntryRowFactory());
tableEntry = 
  moFactory.createTable(oidTableEntry,
                    tableEntryIndex,
                    tableEntryColumns,
                    tableEntryModel);

//Adding rows
ArrayList<Integer> oidMon1List= new ArrayList<Integer>();
oidRow1List = this.getListFromArray(oidTableEntry.getValue());
oidRow1List.add(1);

ArrayList<Integer> oidMon2List= new ArrayList<Integer>();
oidRow2List = this.getListFromArray(oidTableEntry.getValue());
oidRow2List.add(2);

DefaultMOMutableTableModel model =
               (DefaultMOMutableTableModel)tableEntry.getModel();

synchronized(model){
model.addRow(
        model.createRow(
                new OID(getArrayFromList(oidRow1List)), 
                new Variable[]{
                    new Integer32(123)
                    }));

model.addRow(
        model.createRow(
                new OID(getArrayFromList(oidRow2List)), 
                new Variable[]{
                    new Integer32(456)
                    }));   
    }
}

但是下面的请求仍然不起作用。

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.0

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1

我一定不明白如何正确地创建行。你能解释一下我该怎么做吗?

非常感谢!

精确一点:我在程序中添加了这些行:

System.out.println("Get row count: " +tableEntryModel.getRowCount());

//first row
System.out.println("TEST1: " +model.getRow(new OID(new int[] {1,3,6,1,4,1,1,99,5,4,1,3,1,1})).getValue(0));
System.out.println("TEST2: " +tableEntry.getValue(new OID(new int[] {1,3,6,1,4,1,1,99,5,4,1,3,1,1,0})));

第一个返回:2(如预期)

第二次返回:123(如预期)

第三个返回:null。。。这里,我不明白为什么!

共有2个答案

仉宪
2023-03-14

好吧,我找到了问题所在。实际上,我的代码工作正常,只是我的请求不正确。

                                        | oidColumn 1.3.6.1.4.1.1.99.5.4.1.3.1.1
 oidRow1 1.3.6.1.4.1.1.99.5.4.1.3.1.1   |       oidColumn.oidRow1
 oidRow2 1.3.6.1.4.1.1.99.5.4.1.3.1.2   |       oidColumn.oidRow2

所以如果我想得到Row1的第一个值,我必须提出这个请求:

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1.3.6.1.4.1.1.99.5.4.1.3.1.1
乐山
2023-03-14

我想说,代码和请求不匹配。我想代码就是问题所在,因为在SNMP4J代理中,表单元格的实例OID是由

<tableEntryOID>.<columnSubID>.<rowIndexOID>

因此,如果表对象的OID为1.3.6.1.4.1.1.99.5.4.1.3.1,并且希望第一列中的第一个实例的ID为1,则必须创建/添加具有以下内容的行:

model.addRow(       
    model.createRow(       
            new OID(1), new Variable[]{ new Integer32(123) })); 

然后可以使用

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1
 类似资料:
  • 问题内容: 是否可以向Java系统属性添加新值。如果有的话,如何在Java系统属性中引入具有相应值的新键。 问题答案: 无论是或使用国旗当您启动JVM

  • 本文向大家介绍如何在Java中处理Selenium中的代理?,包括了如何在Java中处理Selenium中的代理?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助PROXY类在Java中使用Selenium处理代理。

  • 问题内容: 假设我有一个清单,例如: 在遍历此列表时,我想在列表末尾添加一个元素。但是我不想遍历新添加的元素,也就是我想遍历列表的初始大小。 有人可以建议我该怎么做吗? 问题答案: 您不能为此使用foreach语句。foreach在内部使用迭代器: 此类的迭代器和listIterator方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时间以任何方式对列表进行结构修改,则除了通过迭代器自己的

  • 我对任何逻辑都是新手,我有一个问题我无法解决... 我把“布局类型”和“网络类型”设为“随机”,并勾选了“启动时申请”的复选框……一开始,我就有了一个不错的社交网络 然而代理的诞生和死亡...问题是,当我添加代理时,新创建的代理没有连接!所以我,当所有最初的特工都死了,我发现我自己有特工,但没有网络! 我该怎么办?添加新代理时,我希望它与其他代理连接:s 谢谢!!!

  • 我有一个使用Indy组件进行TCP通信的c应用程序。现在我需要实现SNMP代理(?)只是为了通过SNMP响应有关应用程序状态的请求。我决定也使用Indy组件来完成这项任务。也许有一些标准的方法来实现这个? SNMP组件可以很好地获取一些值。但我找不到如何通过snmp从应用程序返回值的示例。 根据Remy Lebeau的建议,我已经开始实施SendTrap。 但当我运行应用程序时,我的系统中并没有u

  • 问题内容: 我正在尝试使用PHP将新列添加到我的MYSQL表中。我不确定如何更改表以创建新列。在我的评估表中,我有: 假设我有一个带有文本框的页面,然后输入文本框并按一个按钮,则表将更新为: 我的代码: 问题答案: 您的桌子: 你也可以