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

📄 snmpv1communicationinterface.java

📁 snmp inquistor Pour la communication avec les agents SNMP on utilise un package Java open source
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            */
            
            
            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 following " + 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);
                    
                    retrievedVars.addSNMPObject(newPair);
                    
                }
                
                break;
            
            }
            
        }
        
        
        requestID++;
        
        
        return retrievedVars;
        
    }
    
    
    
    
    
    
    
    /**
    *    Set the MIB variable value of the object identifier
    *    given in startID (in dotted-integer notation). Return SNMPVarBindList object returned
    *    by device in its response; can be used to check that setting was successful.
    *    Uses SNMPGetNextRequests to retrieve variable values in sequence.
    *    @throws IOException Thrown when timeout experienced while waiting for response to request.
    *    @throws SNMPBadValueException 
    */
    
    public SNMPVarBindList setMIBEntry(String itemID, SNMPObject newValue)
        throws IOException, SNMPBadValueException, SNMPSetException
    {
        // send SetRequest to specified host to set value of specified object identifier
        
        SNMPVarBindList retrievedVars = new SNMPVarBindList();
        
        int errorStatus = 0;
        int errorIndex = 0;
        
        SNMPObjectIdentifier requestedObjectIdentifier = new SNMPObjectIdentifier(itemID);
        SNMPVariablePair nextPair = new SNMPVariablePair(requestedObjectIdentifier, newValue);
        
            
        
        SNMPSequence varList = new SNMPSequence();
        varList.addSNMPObject(nextPair);
        SNMPPDU pdu = new SNMPPDU(SNMPBERCodec.SNMPSETREQUEST, requestID, errorStatus, errorIndex, varList);
        
        
        SNMPMessage message = new SNMPMessage(version, community, pdu);
        byte[] messageEncoding = message.getBEREncoding();
        
        /*
        System.out.println("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 correct 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((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)
                {
                    switch (receivedPDU.getErrorStatus())
                    {
                        case 1:
                            throw new SNMPSetException("Value supplied for OID " + itemID + " too big.", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                        
                        case 2:
                            throw new SNMPSetException("OID " + itemID + " not available for setting.", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                        
                        case 3:
                            throw new SNMPSetException("Bad value supplied for OID " + itemID + ".", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                            
                        case 4:
                            throw new SNMPSetException("OID " + itemID + " read-only.", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                            
                        default:
                            throw new SNMPSetException("Error setting OID " + itemID + ".", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());    
                            
                    }
                }
                
                
                varList = receivedPDU.getVarBindList();
                SNMPSequence newPair = (SNMPSequence)(varList.getSNMPObjectAt(0));
                
                // check the object identifier to make sure the correct variable has been received;
                // if not, just continue waiting for receive
                if (((SNMPObjectIdentifier)newPair.getSNMPObjectAt(0)).toString().equals(itemID))
                {
                    // got the right one; add it to retrieved var list and break!
                    retrievedVars.addSNMPObject(newPair);
                    break;
                }
            
            }
            
        }
        
        
        requestID++;
    
        
        return retrievedVars;
        
    }
    
    
    
    
    /**
    *    Set the MIB variable values of the supplied object identifiers given in the 
    *    itemID array (in dotted-integer notation). Return SNMPVarBindList returned
    *    by device in its response; can be used to check that setting was successful.
    *    Uses SNMPGetNextRequests to retrieve variable values in sequence.
    *    @throws IOException Thrown when timeout experienced while waiting for response to request.
    *    @throws SNMPBadValueException 
    */
    
    public SNMPVarBindList setMIBEntry(String[] itemID, SNMPObject[] newValue)
        throws IOException, SNMPBadValueException, SNMPSetException
    {
        // check that OID and value arrays have same size
        if (itemID.length != newValue.length)
        {
            throw new SNMPSetException("OID and value arrays must have same size", 0, SNMPRequestException.FAILED);
        }
        
        
        // send SetRequest to specified host to set 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, newValue[i]);
            varList.addSNMPObject(nextPair);
        }
        
        SNMPPDU pdu = new SNMPPDU(SNMPBERCodec.SNMPSETREQUEST, requestID, errorStatus, errorIndex, varList);
        SNMPMessage message = new SNMPMessage(version, community, pdu);
        
        byte[] messageEncoding = message.getBEREncoding();
        
        /*
        System.out.println("Message bytes:");
        
        for (int i = 0; i < messageEncoding.length; ++i)
        {
            System.out.print(getHex(messageEncoding[i]) + " ");
        }
        */
        
        
        DatagramPacket outPacket = new DatagramPacket(messageEncoding, messageEncoding.length, hostAddress, remotePort);
        
        dSocket.send(outPacket);
        
        
        while (true)    // wait until receive reply for correct 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((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)
                {
                    errorIndex = receivedPDU.getErrorIndex();
                    
                    switch (receivedPDU.getErrorStatus())
                    {
                        case 1:
                            throw new SNMPSetException("Value supplied for OID " + itemID[errorIndex - 1] + " too big.", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                        
                        case 2:
                            throw new SNMPSetException("OID " + itemID[errorIndex - 1] + " not available for setting.", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                        
                        case 3:
                            throw new SNMPSetException("Bad value supplied for OID " + itemID[errorIndex - 1] + ".", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                            
                        case 4:
                            throw new SNMPSetException("OID " + itemID[errorIndex - 1] + " read-only.", receivedPDU.getErrorIndex(), receivedPDU.getErrorStatus());
                            
                        default:
                            throw new SNMPSetException("Error setting OID " + itemID[errorIndex - 1] + ".", receivedPDU.getErrorIndex(), 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 receivedValue = newPair.getSNMPObjectAt(1);
                    
                    if (newObjectIdentifier.toString().equals(itemID[i]))
                    {
                        retrievedVars.addSNMPObject(newPair);
                    }
                    else
                    {
                        // wrong OID; throw GetException

⌨️ 快捷键说明

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