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