snmp4j problema ao recuperar os objetos via GET e GETNEXT

Olá pessoal, estou com um problemão aqui.

Estou tentando recuperar os objetos de uma MIB usando o SNMP (versão 2) e estou utilizando a API SNMP4J

Porém ao tentar pegar os objetos com a operação de GET, o retorno é de que não há objeto (No Such Object).

E ao utilizar o GetNext o retorno é incorreto, sempre é retornado o primeiro objeto da MIB o SysDescr.

Segue o código abaixo:

GET:

[code]import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.snmp4j.*;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class Get {

private String result;

public Get(String ip, String comunidade, String oid) {
    result = "";
    String address = ip + "/161";
    TransportMapping transport;
    Snmp snmp;
    try {
        transport = new DefaultUdpTransportMapping();
        transport.listen();
        CommunityTarget target = new CommunityTarget();
        target.setCommunity(new OctetString(comunidade));
        target.setVersion(SnmpConstants.version2c);
        target.setAddress(new UdpAddress(address));
        target.setRetries(2);
        target.setTimeout(1500);
        String[] oidListStr;
        oidListStr = oid.split(".");
        int[] oidList = new int[oidListStr.length];
        String aux;
        int number;
        for (int i = 0; i < oidListStr.length; i++) {
            aux = oidListStr[i];
            number = Integer.parseInt(aux);
            oidList[i] = number;
        }
        PDU pdu = new PDU();
        pdu.add(new VariableBinding(new OID(oidList)));
        pdu.setType(PDU.GET);
        snmp = new Snmp(transport);
        result = result + "Request:\n[ Note: Enviando requesição Get para agente...";
        ResponseEvent response = snmp.send(pdu, target);
        if (response != null) {
            PDU responsePDU = response.getResponse();
            if (responsePDU != null) {
                int errorStatus = responsePDU.getErrorStatus();
                int errorIndex = responsePDU.getErrorIndex();
                String errorStatusText = responsePDU.getErrorStatusText();

                if (errorStatus == PDU.noError) {
                    result = result + "Resposta Snmp Get = " + responsePDU.getVariableBindings() + "\n"
                            + responsePDU;
                } else {
                    result = "Erro: Fallha na requisição" + "\nStatus do erro = "
                            + errorStatus + "\nÍndice do erro = "
                            + errorIndex + "\nMensagem do erro = "+ errorStatusText;
                }
            } else {
                result = "Erro: Resposta Get é nula";
            }
        } else {
            result = "Erro: Tempo expirado ";
        }

        snmp.close();
    } catch (IOException ex) {
        Logger.getLogger(Snmp.class.getName()).log(Level.SEVERE, null, ex);
    }


}

public String getResult() {
    return result;
}

}[/code]

GETNEXT

[code]import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class GetNext {

private String result;

public GetNext(String ip, String comunidade, String oid){
    result = "";
    String address = ip + "/161";
    TransportMapping transport;
    Snmp snmp;
    
    try {
        transport = new DefaultUdpTransportMapping();
        transport.listen();
        
        CommunityTarget target = new CommunityTarget();
        target.setCommunity(new OctetString(comunidade));
        target.setVersion(SnmpConstants.version2c);
        target.setAddress(new UdpAddress(address));
        target.setRetries(2);
        target.setTimeout(1500);
        
        String[] oidListStr;
        oidListStr = oid.split(".");
        int[] oidList = new int[oidListStr.length];
        String aux;
        int number;
        for(int i=0; i< oidListStr.length; i++){
            aux = oidListStr[i];
            number = Integer.parseInt(aux);
            oidList[i] = number;
        }
        
       
        PDU pdu = new PDU();
        pdu.add(new VariableBinding(new OID(oidList)));
        pdu.setType(PDU.GETNEXT);

        snmp = new Snmp(transport);
         
        result = result + "Request:\n Enviando requesição GetNext para agente...";
       
        ResponseEvent response = snmp.send(pdu, target);
   
        if(response != null){
            PDU responsePDU = response.getResponse();
            
           
            if (responsePDU != null){
                int errorStatus = responsePDU.getErrorStatus();
                int errorIndex = responsePDU.getErrorIndex();
                String errorStatusText = responsePDU.getErrorStatusText();       
                      
                
                
                
                if (errorStatus == PDU.noError){
                    result = result +("\nResposta Snmp GetNext = "+responsePDU.getVariableBindings());
                    result = result + (responsePDU.toString());
                }
                else{
                     result = result +"Erro: Fallha na requisição"+"\n"+
                            "Status do erro = " + errorStatus +"\n"+
                            "Índice do erro = " + errorIndex+"\n"+
                             "Mensagem do erro = " + errorStatusText;
                }
            }
            else{
                result = result +("Erro: Resposta GetNext é nula");
            }
        }           
        else{
            result = result +("Erro: Tempo expirado ");
        }
        snmp.close();
    } catch (IOException ex) {
        Logger.getLogger(Snmp.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public String getResult(){
    return result;
}

}[/code]

Interface: (botão de evento)

[code]private void bOkActionPerformed(java.awt.event.ActionEvent evt) {
if(cbAcoes.getSelectedItem().equals("get")){
String ip = tfIp.getText();
String comunidade= tfComunidade.getText();
String oid = tfOid.getText();
Get g = new Get(ip, comunidade, oid);
taResult.setText(g.getResult());

   }
   else if(cbAcoes.getSelectedItem().equals("getBulk")){   
     String ip = tfIp.getText();        
     String comunidade= tfComunidade.getText();   
     String oid = tfOid.getText(); 
     String min = tfNonr.getText();
     String max = tfMaxr.getText();
      
     if((min.equals(""))||(max.equals(""))){
       JOptionPane.showMessageDialog(null, "Por favor preencha os campos  com um número de buscas do GetBulk!");
     }
     else{
        GetBulk gb = new GetBulk(ip,comunidade,oid,min,max);      
        taResult.setText(gb.getResult()); 
     }
   }
   else if(cbAcoes.getSelectedItem().equals("getNext")){   
     String ip = tfIp.getText();        
     String comunidade= tfComunidade.getText();   
     String oid = tfOid.getText();         
     GetNext gn = new GetNext(ip, comunidade, oid);      
     taResult.setText(gn.getResult()); 
    
     }  else if(cbAcoes.getSelectedItem().equals("set")){ 
       String ip = tfIp.getText();        
     String comunidade= tfComunidade.getText();   
     String oid = tfOid.getText();         
     Set s = new Set(ip, comunidade, oid);      
     taResult.setText(s.getResult());
     } 
    
}[/code]

PS.: nao estou preocupado com o GetBulk ou o Set mesmo que possam aparecer código para tratamento dos mesmos.

Olá, estou começando a usar SNMP também, e na verdade gostaria de saber como consigo capturar
os dados de status da Impressora …

Você poderia me ajudar ?

Posta o Resultado, se conseguiu ou não, pois estou com o mesmo problema.

Flw