Hi,

I have noticed the following behavior when i was coding using TableUtils.

Scenario: Fetch data using Invalid V3 credentials i.e. securityName.

1) I have used: 
               public List getTable(Target target, OID[] columnOIDs, OID 
lowerBoundIndex, OID upperBoundIndex)  
    output:  returning a TableEvent with the reportPDU i.e.
                      REPORT[reqestID=0, errorStatus=0, errorIndex=0, 
VBS[1.3.6.1.6.3.15.1.1.3.0 = 9]]

2) But When i use 
               public void getTable(Target target, OID[] 
columnOIDs, TableListener listener,Object userObject,OID lowerBoundIndex,
                       OID upperBoundIndex)
    output: empty list.

Here i am attaching the sample program which i have used. 

Please let me know whether this is an expected behavior or not.
Correct me if i am doing anything wrong.


Thanks & Regards,
Gangadhar.Katakam


      
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

import org.snmp4j.AbstractTarget;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.ScopedPDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.UserTarget;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.MessageProcessingModel;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.security.AuthMD5;
import org.snmp4j.security.AuthSHA;
import org.snmp4j.security.PrivAES128;
import org.snmp4j.security.PrivDES;
import org.snmp4j.security.SecurityLevel;
import org.snmp4j.security.SecurityModel;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.util.DefaultPDUFactory;
import org.snmp4j.util.TableEvent;
import org.snmp4j.util.TableListener;
import org.snmp4j.util.TableUtils;

public class ScopedPDUTest {

   /**
    * @param args
    */
   public static void main(String[] args) {
      try {
         Address targetAddress = GenericAddress.parse("udp:10.31.88.93/161");
         TransportMapping transport = new DefaultUdpTransportMapping();
         Snmp snmp = new Snmp(transport);
         MPv3 mpv3 = (MPv3) snmp
               .getMessageProcessingModel(MessageProcessingModel.MPv3);
         UserTarget target = new UserTarget();
         transport.listen();
         
         USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
               mpv3.createLocalEngineID()), 0);
         SecurityModels.getInstance().addSecurityModel(usm);
         target.setVersion(SnmpConstants.version3);
         target.setAddress(targetAddress);
         target.setRetries(3);
         target.setTimeout(1500);
         // target.setSecurityModel(SecurityModel.SECURITY_MODEL_USM);
         OctetString securityName = createOctetString("testuser123");
         OctetString authPassphrase = createOctetString("123user@");
         OctetString privPassphrase = createOctetString("123user@@");
         UsmUser usmUser = new UsmUser(securityName, AuthMD5.ID,
               authPassphrase, PrivAES128.ID, privPassphrase);
         target.setSecurityName(securityName);
         target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
         target.setSecurityModel(SecurityModel.SECURITY_MODEL_USM);
         System.out.println("usm:::" + usm);
         snmp.getUSM().addUser(securityName, usmUser);

         // TODO Auto-generated method stub
         ScopedPDU pdu = new ScopedPDU();
        
         String []strOIDs = {"1.3.6.1.6.3.10.2.1.1"};
         OID oids = new OID("1.3.6.1.6.3.10.2.1.1");
         List<OID> list = new ArrayList();
         list.add(oids);
         final OID[] oidArray = new OID[list.size()];
         int i = 0;
         for (OID oid : list) {
            oidArray[i++] = oid;
         }
         TableUtils tableUtils = new TableUtils(snmp, new 
DefaultPDUFactory(PDU.GETBULK));
         InternalTableListener listener = new InternalTableListener();
         tableUtils.getTable(target, oidArray, listener, null, null, null);
         System.out.println("rows::"+listener.getRows());
         List<TableEvent> tableEvents = tableUtils.getTable(target, 
parseStrToOID(strOIDs), null, null);
         Iterator<TableEvent> tEvent = tableEvents.iterator();
         while(tEvent.hasNext()) {
            TableEvent event = (TableEvent) tEvent.next();
            System.out.println("Table event:::error::"+ 
event.getErrorMessage());
            System.out.println("Table event::reportpdu:::"+ 
event.getReportPDU());
            System.out.println("Table event:::index::"+ event.getIndex());
            VariableBinding[] vb = event.getColumns();
            //System.out.println("vb:::"+vb.getOid());
            for (int count=0; count< vb.length;count++) {
               if (vb[count].getOid() != null)
               System.out.println("Table event::oid:::"+vb[count].getOid());
               System.out.println("Table 
event::value::"+vb[count].getVariable());
            }
         }
         //System.out.println("table events:::"+tableEvents);
         snmp.close();
      } catch (Exception e) {
         e.printStackTrace();
      }

   }
   
   protected static OID[] parseStrToOID(String[] strOIDs) {
      OID[] oids = new OID[strOIDs.length];
      for (int i = 0; i < strOIDs.length; i++) {
          oids[i] = new OID(strOIDs[i]);
      }
      return oids;
  }

   private static OctetString createOctetString(String val) {
      if (val == null || val.length() == 0) {
         return null;
      }

      return new OctetString(val);
   }
}
class InternalTableListener implements TableListener {

   private List rows = new LinkedList();
   private volatile boolean finished = false;

   public boolean next(TableEvent event) {
     rows.add(event);
     return true;
   }

   public synchronized void finished(TableEvent event) {
     if ((event.getStatus() != TableEvent.STATUS_OK) ||
         (event.getIndex() != null)) {
       rows.add(event);
     }
     finished = true;
     notify();
   }

   public List getRows() {
     return rows;
   }

   public boolean isFinished() {
     return finished;
   }
 }
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j

Reply via email to