用com.adventnet.snmp包读mib

public static boolean readMibBulk(String ip, String community, SnmpOID[] oids, Vector[] resultList, Vector indexList) {
        SnmpAPI snmpapi = null;
        SnmpSession session = null;
        int maxRepInt = 25;
        try {
            snmpapi = new SnmpAPI();
            snmpapi.start();
            session = new SnmpSession(snmpapi);
            session.open();

            SnmpPDU pdu = new SnmpPDU();
            pdu.setRemoteHost(ip);
            pdu.setRemotePort(161);
            pdu.setCommunity(community);
            pdu.setTimeout(5000);
            pdu.setRetries(2);
            pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
            pdu.setCommand(SnmpAPI.GETBULK_REQ_MSG);
            pdu.setMaxRepetitions(maxRepInt);
            pdu.setNonRepeaters(0);
            //三重循环
            for (int i = 0; i < oids.length; i++) {
                pdu.addNull(oids[i]); //先读第一个参数
                resultList[i] = new Vector();
                while (true) {   //当读该参数的25行后还没有读完,则继续读25行
                    SnmpPDU v = session.syncSend(pdu);
                    if (v == null) {
                        return false;
                    }
                    int j = 0;
                    SnmpOID loid = null;
                    for (j = 0; j < maxRepInt; j++) {//读每一列
                        if (isInSubTree(oids[i].toIntArray(), v.getObjectID(j))) { //判断该索引是否属于要读的索引
                            String t = v.getVariableBinding(j).toString();
                            int index = t.indexOf(":");
                            resultList[i].add(t.substring(index + 2)); //返回值
                            pdu.removeVariableBinding(j);
                            loid = v.getObjectID(j); //当前的行号
                            String d = getIndexs(oids[i].toIntArray(), v.getObjectID(j)); //索引
                            indexList.add(d);
                        } else {
                            break;  //当块读的参数不符合的时候
                        }
                    }
                    //读完一列后
                    if (j == maxRepInt) {
                        pdu.addNull(loid);  //当读了25行,内容还没有读完,则从loid行开始继续读25行
                    } else {
                        break;
                    }
                }
                pdu.removeVariableBinding(0);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        } finally {
            if (null != session) {
                snmpapi.close();
                session.close();
                session = null;
            }
        }
        return true;

    }

 

public static boolean readMibWalk(String ip, String community, SnmpOID[] oids, Vector[] resultList, Vector indexList) {
        SnmpAPI snmpapi = null;
        SnmpSession session = null;
        try {
            snmpapi = new SnmpAPI();
            snmpapi.start();
            session = new SnmpSession(snmpapi);
            session.open();

            SnmpPDU pdu = new SnmpPDU();
            pdu.setRemoteHost(ip);
            pdu.setRemotePort(161);
            pdu.setCommunity(community);
            pdu.setTimeout(5000);
            pdu.setRetries(2);
            pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
            pdu.setCommand(SnmpAPI.GETNEXT_REQ_MSG);
            //两重循环
            for (int i = 0; i < oids.length; i++) { //读一个参数
                pdu.addNull(oids[i]);
                resultList[i] = new Vector();
                while (true) {    //用get-next的方式一行一行的读取
                    SnmpPDU v = session.syncSend(pdu);
                    if (v == null) {
                        return false;
                    }
                    if (isInSubTree(oids[i].toIntArray(), v.getObjectID(0))) {
                        String t = v.getVariableBinding(0).toString();
                        int index = t.indexOf(":");
                        resultList[i].add(t.substring(index + 2)); //返回值
                        pdu.removeVariableBinding(0);
                        pdu.addNull(v.getObjectID(0));
                        if (i == 0) {
                            String d = getIndexs(oids[i].toIntArray(), v.getObjectID(0));
                            indexList.add(d); //索引
                        }
                    } else {
                        break;
                    }
                }
                pdu.removeVariableBinding(0);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        } finally {
            if (null != session) {
                snmpapi.close();
                session.close();
                session = null;
            }
        }
        return true;
    }

 

public static boolean readMibCurrent(String ip, String community, SnmpOID[] oids, Vector[] resultList, Vector indexList) {
        SnmpAPI snmpapi = null;
        SnmpSession session = null;
        try {
            snmpapi = new SnmpAPI();
            snmpapi.start();
            session = new SnmpSession(snmpapi);
            session.open();

            SnmpPDU pdu = new SnmpPDU();
            pdu.setRemoteHost(ip);
            pdu.setRemotePort(161);
            pdu.setCommunity(community);
            pdu.setTimeout(5000);
            pdu.setRetries(2);
            pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
            pdu.setCommand(SnmpAPI.GET_REQ_MSG);
            //两重循环
            for (int i = 0; i < oids.length; i++) { //读一个参数
                pdu.addNull(oids[i]);
                resultList[i] = new Vector();
               
                SnmpPDU v = session.syncSend(pdu);
                if (v == null) {
                    return false;
                }
                if (isInSubTree(oids[i].toIntArray(), v.getObjectID(0))) {
                    String t = v.getVariableBinding(0).toString();
                    int index = t.indexOf(":");
                    resultList[i].add(t.substring(index + 2)); //返回值
                    pdu.removeVariableBinding(0);
                }

               pdu.removeVariableBinding(0);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        } finally {
            if (null != session) {
                snmpapi.close();
                session.close();
                session = null;
            }
        }
        return true;
    }

 

public static boolean readMibCurrent(String ip, String community, SnmpOID[] oids, Vector[] resultList, Vector indexList) {
        SnmpAPI snmpapi = null;
        SnmpSession session = null;
        try {
            snmpapi = new SnmpAPI();
            snmpapi.start();
            session = new SnmpSession(snmpapi);
            session.open();

            SnmpPDU pdu = new SnmpPDU();
            pdu.setRemoteHost(ip);
            pdu.setRemotePort(161);
            pdu.setCommunity(community);
            pdu.setTimeout(5000);
            pdu.setRetries(2);
            pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
            pdu.setCommand(SnmpAPI.GET_REQ_MSG);
            //两重循环
            for (int i = 0; i < oids.length; i++) { //读一个参数
                resultList[i] = new Vector();
                pdu.addNull(oids[i]);
            }

            SnmpPDU v = session.syncSend(pdu);
            if (v == null) {
                return false;
            }

            for(int j = 0; j < oids.length;j++){
                if (isInSubTree(oids[j].toIntArray(), v.getObjectID(j))) {
                    String t = v.getVariableBinding(j).toString();
                    int index = t.indexOf(":");
                    resultList[j].add(t.substring(index + 2)); //返回值
                    pdu.removeVariableBinding(j);
                }
            }

           pdu.removeVariableBinding(0);
            
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        } finally {
            if (null != session) {
                snmpapi.close();
                session.close();
                session = null;
            }
        }
        return true;
    }

 

private void setMib(String host, int port, String community,
                            String writeCommunity, String oid, String value) throws
                SnmpException {
            SnmpAPI snmpapi = new SnmpAPI();
            snmpapi.start();
            SnmpSession session = new SnmpSession(snmpapi);
            session.open();
            SnmpPDU pdu = new SnmpPDU();
            try {
                pdu.setRemoteHost(host);
                pdu.setRemotePort(port);
                pdu.setCommunity(community);
                pdu.setWriteCommunity(writeCommunity);
                pdu.setTimeout(5000);
                pdu.setRetries(3);
                pdu.setVersion(SnmpAPI.SNMP_VERSION_2C);
                pdu.setCommand(SnmpAPI.SET_REQ_MSG);

                SnmpOID snmpOID = new SnmpOID(oid); // add OID
                // create SnmpVar instance for the value and the type
                SnmpVar var = null;
                try {
                    var = SnmpVar.createVariable(value, SnmpAPI.INTEGER); //设置下发配置的值和类型
                } catch (SnmpException e) {
                    System.err.println("Cannot create variable: " + oid +
                                       " with value:1");
                    return;
                }
                SnmpVarBind varbind = new SnmpVarBind(snmpOID, var); //create varbind
                pdu.addVariableBinding(varbind); // add variable binding
                // Send PDU
                try {
                    pdu = session.syncSend(pdu);
                } catch (SnmpException e) {
                    System.err.println("Sending PDU" + e.getMessage());
                }
                if (pdu == null) {
                    System.out.println("Request timed out!");
                    return;
                }
                System.out.println("Response PDU received from " +
                                   pdu.getAddress() + ", community: " +
                                   pdu.getCommunity());
                if (pdu.getErrstat() != 0) {
                    System.err.println(pdu.getError());
                } else {
                    System.out.println(pdu.printVarBinds());
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                if (session != null) {
                    snmpapi.close();
                    session.close();
                    session = null;
                }
            }
        }
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为语言模型AI,我无法给出实际的代码演示。不过,我可以简单介绍一下 AdventNet SNMP库 和 SNMP4J库 的用法,以及它们的差异和注意事项。 AdventNet SNMP库是一个用于Java开发的SNMP开发工具包,提供了SNMP管理和代理功能。你可以使用它来发布SNMP服务,包括基本的表和组结构。下面是一个简单的代码示例: ``` SnmpAPI api = new SnmpAPI(); SnmpSession session = new SnmpSession(api); session.open(); MOTableBuilder builder = new MOTableBuilder("myTable"); builder.addColumn("column1", SMIConstants.SYNTAX_INTEGER); builder.addColumn("column2", SMIConstants.SYNTAX_OCTET_STRING); MOTable table = builder.build(); DefaultMOTable moTable = new DefaultMOTable(table); DefaultMOTableProvider provider = new DefaultMOTableProvider(moTable); SNMPAgent agent = new SNMPAgent(api, session, provider); agent.start(); ``` 这段代码使用 AdventNet SNMP库 创建了一个名为 "myTable" 的表,包含两列,分别为整数和字符串类型。然后,它创建了一个 SNMP 代理,将这个表发布到 SNMP 服务中。 SNMP4J库也是一个用于Java开发的SNMP开发工具包,提供了SNMP管理和代理功能。你可以使用它来发布SNMP服务,包括基本的表和组结构,以及发送 trap 协议。下面是一个简单的代码示例: ``` TransportMapping transport = new DefaultUdpTransportMapping(); Snmp snmp = new Snmp(transport); snmp.listen(); DefaultPDUFactory pduFactory = new DefaultPDUFactory(); DefaultMOFactory moFactory = new DefaultMOFactory(); MOTableBuilder builder = new MOTableBuilder(new OID("1.3.6.1.2.1.1.9")); builder.addColumn(new MOColumn(colID, SMIConstants.SYNTAX_INTEGER32)); builder.addColumn(new MOColumn(colID, SMIConstants.SYNTAX_OCTET_STRING)); MOTable table = builder.build(); DefaultMOTable moTable = new DefaultMOTable(table, moFactory); DefaultMOServer server = new DefaultMOServer(); server.register(moTable, null); CommandResponder trapListener = new CommandResponder() { public void processPdu(CommandResponderEvent event) { // 处理 trap 协议 } }; snmp.addCommandResponder(trapListener); ``` 这段代码使用 SNMP4J库 创建了一个名为 "1.3.6.1.2.1.1.9" 的表,包含两列,分别为整数和字符串类型。然后,它创建了一个 SNMP 代理,将这个表发布到 SNMP 服务中,并注册了一个 trap 监听器,用于处理 trap 协议。 两种库的差异主要在于实现方式和支持的功能。AdventNet SNMP库提供了更多的高级功能,例如 SNMP v3 认证和加密,以及更灵活的 MIB 定义方式。而 SNMP4J库则更加轻量级,适用于简单的 SNMP 应用场景。在使用这些库时,需要注意一些通用的事项,例如正确配置 SNMP 环境和权限控制,以及正确处理 SNMP 请求和响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值