⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmpv1communicationinterface.java

📁 snmp inquistor Pour la communication avec les agents SNMP on utilise un package Java open source
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                    // got the right one; add it to retrieved var list and break!
                    retrievedVars.addSNMPObject(newPair);
                    break;
                }
            
            }
            
        }
        
        
        requestID++;
        
        
        return retrievedVars;
        
    }
    
    
    
    
    /**
    *    Retrieve the MIB variable values corresponding to the object identifiers
    *    given in the array itemID (in dotted-integer notation). Return as SNMPVarBindList object; 
    *    if no such variable (either due to device not supporting it, or community name having incorrect
    *    access privilege), SNMPGetException thrown
    *    @throws IOException Thrown when timeout experienced while waiting for response to request.
    *    @throws SNMPBadValueException 
    *   @throws SNMPGetException Thrown if one of supplied OIDs has value that can't be retrieved
    */
    
    public SNMPVarBindList getMIBEntry(String[] itemID)
        throws IOException, SNMPBadValueException, SNMPGetException
    {
        // send GetRequest to specified host to retrieve values of specified object identifiers
        
        SNMPVarBindList retrievedVars = new SNMPVarBindList();
        SNMPSequence varList = new SNMPSequence();
        
        int errorStatus = 0;
        int errorIndex = 0;
        
        for (int i = 0; i < itemID.length; i++)
        {
            SNMPObjectIdentifier requestedObjectIdentifier = new SNMPObjectIdentifier(itemID[i]);
            SNMPVariablePair nextPair = new SNMPVariablePair(requestedObjectIdentifier, new SNMPNull());
            varList.addSNMPObject(nextPair);
        }
        
        
        SNMPPDU pdu = new SNMPPDU(SNMPBERCodec.SNMPGETREQUEST, requestID, errorStatus, errorIndex, varList);
        
        SNMPMessage message = new SNMPMessage(version, community, pdu);
        
        byte[] messageEncoding = message.getBEREncoding();
        
        
        /*
        System.out.println("Request Message bytes:");
        
        for (int i = 0; i < messageEncoding.length; ++i)
            System.out.print(hexByte(messageEncoding[i]) + " ");
        */
        
        DatagramPacket outPacket = new DatagramPacket(messageEncoding, messageEncoding.length, hostAddress, remotePort);
        
        
        dSocket.send(outPacket);
        
        
        while (true)    // wait until receive reply for requestID & OID (or error)
        {
            
            DatagramPacket inPacket = new DatagramPacket(new byte[receiveBufferSize], receiveBufferSize);
            
            dSocket.receive(inPacket);
            
            byte[] encodedMessage = inPacket.getData();
            
            /*
            System.out.println("Message bytes:");
            
            for (int i = 0; i < encodedMessage.length; ++i)
            {
                System.out.print(hexByte(encodedMessage[i]) + " ");
            }
            */
            
            
            SNMPMessage receivedMessage = new SNMPMessage(SNMPBERCodec.extractNextTLV(encodedMessage,0).value);
            SNMPPDU receivedPDU = receivedMessage.getPDU();
            
            // check request identifier; if incorrect, just ignore packet and continue waiting
            if (receivedPDU.getRequestID() == requestID)
            {
                
                // check error status; if retrieval problem, throw SNMPGetException
                if (receivedPDU.getErrorStatus() != 0)
                {
                    // determine error index
                    errorIndex = receivedPDU.getErrorIndex();
                    throw new SNMPGetException("OID " + itemID[errorIndex - 1] + " not available for retrieval", errorIndex, receivedPDU.getErrorStatus());        
                }
                
                // copy info from retrieved sequence to var bind list
                varList = receivedPDU.getVarBindList();
                
                for (int i = 0; i < varList.size(); i++)
                {
                    SNMPSequence newPair = (SNMPSequence)(varList.getSNMPObjectAt(i));
                    
                    SNMPObjectIdentifier newObjectIdentifier = (SNMPObjectIdentifier)(newPair.getSNMPObjectAt(0));
                    SNMPObject newValue = newPair.getSNMPObjectAt(1);
                    
                    if (newObjectIdentifier.toString().equals(itemID[i]))
                    {
                        retrievedVars.addSNMPObject(newPair);
                    }
                    else
                    {
                        // wrong OID; throw GetException
                        throw new SNMPGetException("OID " + itemID[i] + " expected at index " + i + ", OID " + newObjectIdentifier + " received", i+1, SNMPRequestException.FAILED);
                    }
                }
                
                break;
            
            }
            
        }
        
        
        requestID++;
        
        
        return retrievedVars;
        
    }
    
    
    
    
    
    /**
    *    Retrieve the MIB variable value corresponding to the object identifier following that
    *    given in itemID (in dotted-integer notation). Return as SNMPVarBindList object; if no
    *    such variable (either due to device not supporting it, or community name having incorrect
    *    access privilege), variable value will be SNMPNull object
    *    @throws IOException Thrown when timeout experienced while waiting for response to request.
    *    @throws SNMPBadValueException 
    *   @throws SNMPGetException Thrown if one the OID following the supplied OID has value that can't be retrieved
    */
    
    public SNMPVarBindList getNextMIBEntry(String itemID)
        throws IOException, SNMPBadValueException, SNMPGetException
    {
        // send GetRequest to specified host to retrieve specified object identifier
        
        SNMPVarBindList retrievedVars = new SNMPVarBindList();
        
        
        int errorStatus = 0;
        int errorIndex = 0;
        
        
        SNMPObjectIdentifier requestedObjectIdentifier = new SNMPObjectIdentifier(itemID);
        SNMPVariablePair nextPair = new SNMPVariablePair(requestedObjectIdentifier, new SNMPNull());
        SNMPSequence varList = new SNMPSequence();
        varList.addSNMPObject(nextPair);
        SNMPPDU pdu = new SNMPPDU(SNMPBERCodec.SNMPGETNEXTREQUEST, requestID, errorStatus, errorIndex, varList);
        
        SNMPMessage message = new SNMPMessage(version, community, pdu);
        
        byte[] messageEncoding = message.getBEREncoding();
        
        
        /*
        System.out.println("Request Message bytes:");
        
        for (int i = 0; i < messageEncoding.length; ++i)
            System.out.print(hexByte(messageEncoding[i]) + " ");
        */
        
        DatagramPacket outPacket = new DatagramPacket(messageEncoding, messageEncoding.length, hostAddress, remotePort);
        
        
        dSocket.send(outPacket);
        
        
        while (true)    // wait until receive reply for requestID & OID (or error)
        {
            
            DatagramPacket inPacket = new DatagramPacket(new byte[receiveBufferSize], receiveBufferSize);
            
            dSocket.receive(inPacket);
            
            byte[] encodedMessage = inPacket.getData();
            
            /*
            System.out.println("Message bytes:");
            
            for (int i = 0; i < encodedMessage.length; ++i)
            {
                System.out.print(hexByte(encodedMessage[i]) + " ");
            }
            */
            
            
            SNMPMessage receivedMessage = new SNMPMessage(SNMPBERCodec.extractNextTLV(encodedMessage,0).value);
            SNMPPDU receivedPDU = receivedMessage.getPDU();
            
            // check request identifier; if incorrect, just ignore packet and continue waiting
            if (receivedPDU.getRequestID() == requestID)
            {
                
                // check error status; if retrieval problem, throw SNMPGetException
                if (receivedPDU.getErrorStatus() != 0)
                    throw new SNMPGetException("OID " + itemID + " not available for retrieval", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());        
                
                
                varList = receivedPDU.getVarBindList();
                SNMPSequence newPair = (SNMPSequence)(varList.getSNMPObjectAt(0));
                
                SNMPObjectIdentifier newObjectIdentifier = (SNMPObjectIdentifier)(newPair.getSNMPObjectAt(0));
                SNMPObject newValue = newPair.getSNMPObjectAt(1);
                
                retrievedVars.addSNMPObject(newPair);
                
                break;
            
            }
            
        }
        
        
        requestID++;
        
        
        return retrievedVars;
        
    }
    
    
    
    
    
    /**
    *    Retrieve the MIB variable value corresponding to the object identifiers following those
    *    given in the itemID array (in dotted-integer notation). Return as SNMPVarBindList object; 
    *    if no such variable (either due to device not supporting it, or community name having 
    *    incorrect access privilege), SNMPGetException thrown
    *    @throws IOException Thrown when timeout experienced while waiting for response to request.
    *    @throws SNMPBadValueException 
    *   @throws SNMPGetException Thrown if OID following one of supplied OIDs has value that can't be retrieved
    */
    
    public SNMPVarBindList getNextMIBEntry(String[] itemID)
        throws IOException, SNMPBadValueException, SNMPGetException
    {
        // send GetRequest to specified host to retrieve values of specified object identifiers
        
        SNMPVarBindList retrievedVars = new SNMPVarBindList();
        SNMPSequence varList = new SNMPSequence();
        
        int errorStatus = 0;
        int errorIndex = 0;
        
        for (int i = 0; i < itemID.length; i++)
        {
            SNMPObjectIdentifier requestedObjectIdentifier = new SNMPObjectIdentifier(itemID[i]);
            SNMPVariablePair nextPair = new SNMPVariablePair(requestedObjectIdentifier, new SNMPNull());
            varList.addSNMPObject(nextPair);
        }
        
        SNMPPDU pdu = new SNMPPDU(SNMPBERCodec.SNMPGETNEXTREQUEST, requestID, errorStatus, errorIndex, varList);
        SNMPMessage message = new SNMPMessage(version, community, pdu);
        
        byte[] messageEncoding = message.getBEREncoding();
        
        
        /*
        System.out.println("Request Message bytes:");
        
        for (int i = 0; i < messageEncoding.length; ++i)
            System.out.print(hexByte(messageEncoding[i]) + " ");
        */
        
        DatagramPacket outPacket = new DatagramPacket(messageEncoding, messageEncoding.length, hostAddress, remotePort);
        
        
        dSocket.send(outPacket);
        
        
        while (true)    // wait until receive reply for requestID & OID (or error)
        {
            
            DatagramPacket inPacket = new DatagramPacket(new byte[receiveBufferSize], receiveBufferSize);
            
            dSocket.receive(inPacket);
            
            byte[] encodedMessage = inPacket.getData();
            
            /*
            System.out.println("Message bytes:");
            
            for (int i = 0; i < encodedMessage.length; ++i)
            {
                System.out.print(hexByte(encodedMessage[i]) + " ");
            }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -