首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java不获取树的叶子

Java不获取树的叶子
EN

Stack Overflow用户
提问于 2018-03-21 12:47:18
回答 1查看 431关注 0票数 0

我试图使用下面的Java代码使用SNMP-walk命令检索MIB树的叶子,但没有成功。我正在使用SNMP4J框架与应用程序的其他SNMP端进行交互。我的测试用例是从MIB检索maxPhases标量,这是NTCIP协议(来自美国政府的传输系统协议)中的一个参数。应用程序的另一端是使用net框架(C/C++)构建的,其中RESULTDS中显示了一个用例。示例映像可以检索maxPhases和maxPhaseGroups值(都是整数24)。我使用SHA认证和AES128加密数据(系统将部署使用互联网,所以我们需要的安全层)。

代码语言:javascript
运行
复制
public static String doSnmpwalk() throws IOException { 
        Snmp snmp = null; 
        TransportMapping transport = null; 

        try { 

            Address targetAddress = GenericAddress.parse("udp:" + targetAddr + "/" + portNum); 
            transport = new DefaultUdpTransportMapping(); 
            snmp = new Snmp(transport);

            USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
            SecurityModels.getInstance().addSecurityModel(usm);

            snmp.getUSM().addUser(new OctetString("user"),
                    new UsmUser(new OctetString("SHAAES"), AuthSHA.ID, new OctetString("12345678"), PrivAES128.ID, new OctetString("91234567")));

            transport.listen(); 

            UserTarget target = new UserTarget();
            target.setAddress(targetAddress);
            target.setRetries(1);
            target.setTimeout(5000);
            target.setVersion(SnmpConstants.version3);
            target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
            target.setSecurityName(new OctetString("SHAAES"));

            OID oid = new OID(oidStr); 
            OID [] oidArray  = new OID[1];
            oidArray[0] = oid;

            DefaultPDUFactory defaultPDUFactory = new DefaultPDUFactory(PDU.GETBULK); 
            TreeUtils treeUtils = new TreeUtils(snmp, defaultPDUFactory); 

            //List<TreeEvent> events = treeUtils.getSubtree(target, oid);

            List<TreeEvent> events = treeUtils.walk(target, oidArray);

            if (events == null || events.size() == 0) { 
                return null; 
            } 

            // Get snmpwalk result. 
            for (TreeEvent event : events) { 
                if (event.isError()) { 
                   // LOGGER.error("OID has an error: {}", event.getErrorMessage()); 
                } else { 
                    VariableBinding[] varBindings = event.getVariableBindings(); 
                    if (varBindings == null || varBindings.length == 0) { 
                        //System.out.println("VarBinding: No result returned."); 
                    } 
                    for (VariableBinding varBinding : varBindings) { 
                        varBinding.toValueString(); 
                        results += (varBinding.getOid().toString() + "=" + varBinding.getVariable().toString()) + "\n"; 
                    } 
                } 
            } 
        } finally { 
            if (snmp!=null) snmp.close(); 
            if (transport!=null) transport.close(); 
        } 

        return results; 
    } 

结果:

代码语言:javascript
运行
复制
SNMPv2-SMI::enterprises.1206.4.2.1.1.1.0 = INTEGER: 24
SNMPv2-SMI::enterprises.1206.4.2.1.1.3.0 = INTEGER: 24
EN

回答 1

Stack Overflow用户

发布于 2018-04-15 15:55:40

这个问题措辞错误,因为SNMP4J实际上返回叶对象的值。根据上面的评论,这个问题的作者正在寻找与他返回的对象ID相关的MIB信息。

该信息不是通过有线传输的,而是来自相应MIB规范的静态信息。SNMP4J-SMI-PRO或其他MIB解析器也可以用来获取这些信息。当变量或VariableBinding的内容转换为字符串时,SNMP4J-SMI-PRO将无缝地完成这一任务。为此,它使用MIB规范中的显示提示信息和对象类型语法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49406718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档