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

向snmp代理注册OID

云宾鸿
2023-03-14

我正在尝试使用snmp4j模拟SNMP代理。我正在向代理注册MOs。下面是代码段:

static final OID mo1= new OID("1.3.6.1.4.1.1234.1.104");
static final OID mo2= new OID("1.3.6.1.4.1.1234.1.104.1");
static final OID mo3= new OID("1.3.6.1.4.1.1234.1.104.1.1");

agent.registerManagedObject(MOCreator.createReadOnly(mo1,"m1"));
agent.registerManagedObject(MOCreator.createReadOnly(mo2,"m2"));                
agent.registerManagedObject(MOCreator.createReadOnly(mo3,"m3"));


public class MOCreator {

    public static MOScalar createReadOnly(OID oid,Object value ){
        return new MOScalar(oid,
                MOAccessImpl.ACCESS_READ_ONLY,
                getVariable(value));
    }

    private static Variable getVariable(Object value) {
        System.out.println("Value : "+value.toString());

        OctetString octetString = new OctetString((String)value);

        if(value instanceof String) {
            return octetString;
        }
        throw new IllegalArgumentException("Unmanaged Type: " + value.getClass());
    }

}

当启动代理时,我得到了DuplicateInstrationException。请指导我如何注册类。请提供方向。

共有2个答案

拓拔俊德
2023-03-14

发件人:http://oosnmp.net/pipermail/snmp4j/2014-September/005416.html

SMI禁止将一个OID注册在另一个OID之下(实例中的实例)。否则,代理中对象的字典排序无法无歧义地实现。

所以我认为这种OID注册方法是不可能的。您应该尝试使用OID,而不使用像这样严格的子字符串。或者尝试颠倒注册顺序。

唐俊爽
2023-03-14

事实上,正如Seth所说,OID的选择似乎是无效的。

假设你有一个OID1.3.6.1.4.1.1234.1.104的对象。

要么:

  • 它是一个标量,在这种情况下,它的值在1.3.6.1.4.1.1234.1.104.0,或
  • 这是一个表,在这种情况下,它具有值1.3.6.1.4.1.1234.1.104。

它也可以是一个对象组,而不是一个对象,如文件夹,但您也不会注册其中的一个。

标量下不能有标量(或表),因此不能向代理注册它们。

如果不知道您的MIB是什么样子的,您想保存什么类型的数据,以及您想如何组织它,我就不能给出具体的建议,但这里似乎有一个MIB设计问题。确保在MIB上运行smilint以验证正确性。

 类似资料:
  • 我已使用snmp4j api在SNMP代理上创建,但SNMP表注册存在问题 一旦我注册了表和表中的行。然后,如果我在表中设置值,所有行都会设置相同的值。我已经从JSON创建了snmp表 如果我设置了值,请在下表中 .1.3.6.1.4.1.1.201.6.2。它为下表中注册的所有行设置值。是否有人知道如何使用snmmpj代理正确注册和设置值。

  • 我是SNMP新手,谢谢你的支持......我有一个子代理的现有Perl脚本,在尝试运行它时出现了以下问题:代理似乎连接到“默认”snmpd deamon,该deamon被配置为主代理(“master agentx”行存在于snmpd.conf中)。此时,脚本将一些值分配给我的MIB中的对象。但是,当我然后在master-agent上执行snmpwalk或snmpget时,我得到(对于v1查询)“结

  • 源代码 ENS中的反向解析是指从以太坊地址(比如0x1234...)到ENS域名的映射,它通过一个特定的域名空间(.addr.reverse)来实现。这个域名空间由一个专用注册中心拥有和控制,该注册中心可以接受任何人的调用,并根据调用者的地址为其分配子域名。 例如,账户 0x314159265dd8dbb310642f98f50c066173c1259b 可以通过调用声明 314159265dd8

  • 我在编写一个非常庞大的mib时遇到了问题,因为我只有一个代理与许多没有snmp的设备连接。所有设备都通过推送将相同类型的数据发送到代理,然后代理将snmp陷阱发送到snmp管理器。此外,Manager正在向代理发送SNMP GET。我想编写一个标准的mib,它适用于每个设备,管理器只需发送一些OID来获取对应的值,而不是数百个OID。一个非常庞大的mib意味着有很多分支。

  • 使用以下代码作为示例https://www.jitendrazaa.com/blog/java/snmp/create-snmp-client-in-java-using-snmp4j/当我将OID发送到空IP或没有SNMP的设备时,要监视网络,程序会引发异常。 我使用for循环读取IP。我试图以不同的方式改变执行流程,但没有成功。 该程序属于java的GetAsString方法。lang.Nul

  • 我正在尝试使用SNMP4j代理在SNMP代理上注册一组MOs。 然后运行它: 此处的输出为: 我得到DuplicateEntertainment strationException的原因是否与地址结构或顺序有关? 每个对象都是一个组织。snmp4j。代理人mo.MOScalar具有唯一的八位字符串值。 相关:向snmp代理注册OID