hope this may help you
[CODE]

package com.s7.admintools;

import java.util.Vector;

import org.snmp4j.CommunityTarget;
import org.snmp4j.Snmp;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.smi.OID;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.PDU;
import org.snmp4j.event.ResponseListener;

public class SNMPBroadcast {
   Vector<String> broadcastList = new Vector<String>();

   /**
    * @cons
    */
   public SNMPBroadcast() {

   }

   /**
* This method is to broadcast SNMP Request and collect the list of ipAddress
    * @return broadcastList
    */
   public Vector<String> broadCast() {
       try {

           Snmp snmp = AdminToolsCommon.createSnmp();
           snmp.listen();

           CommunityTarget target = AdminToolsCommon
                   .createNewTarget(AdminToolsCommon
                           .getBroadcastTargetAddress());

           PDU command = AdminToolsCommon.createNewPDU();
command.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2,
                   1, 1, 1, 0 })));

           snmp.send(command, target, null, new ResponseListener() {
               public void onResponse(ResponseEvent event) {
                   String[] ipAddress;
                   // only if machine is windows
if (event.getResponse().toString().contains("Windows")) {
                       ipAddress = event.getPeerAddress().toString()
                               .split("/");
                       broadcastList.add(ipAddress[0]);
                       ipAddress = null;
                   }
               }
           });

           Thread.sleep(1000);

       } catch (Exception e) {
           // TODO:
       } finally {
       }

       return broadcastList;
   }

} // End of Broadcast

[/CODE]

Dmitriy Dubovoy wrote:
Hello,

Please help me,

I tried to send broadcast snmp request using SNMPv3 but always I received
only one response.

Please look at the my code below:

try {

            ThreadPool tp = ThreadPool.create("Asynchronous SNMP Adaptor
Thread", 3);

            MultiThreadedMessageDispatcher mtmd = new
MultiThreadedMessageDispatcher(tp, new MessageDispatcherImpl());

            mtmd.addMessageProcessingModel(new MPv1());

            mtmd.addMessageProcessingModel(new MPv2c());

            mtmd.addMessageProcessingModel(new MPv3());

            mtmd.addCommandResponder(this);

            DefaultUdpTransportMapping defaultTransport = new
DefaultUdpTransportMapping();

            defaultTransport.setReceiveBufferSize(65535);

            TransportMapping transport = defaultTransport;

            mtmd.addTransportMapping(transport);

            USM usm = new USM(SecurityProtocols.getInstance(),

                    new OctetString(MPv3.createLocalEngineID()), 0);

            SecurityModels.getInstance().addSecurityModel(usm);

            OctetString securityName = new OctetString("admin");

UsmUser usmUser = new UsmUser(securityName, AuthMD5.ID,
new OctetString("adminadmin"),

                  PrivDES.ID,

                  new OctetString("adminadmin"));

            snmp.getUSM().addUser( securityName, usmUser);

            transport.addTransportListener(mtmd); // addMessageDispatcher()
was deprecated in 1.7.4a.

            transport.listen();

            // create the PDU

                ScopedPDU pduScoped = new ScopedPDU();

                //Fill scoped pdu parameters

                logger.debug("asyncsend_v3(): Fill scoped pdu parameters ");

                pduScoped.setType(PDU.GET);

                pduScoped.add(new VariableBinding(new
OID("1.3.6.1.2.1.2.2.1.10"))); //for example

                //set SecurityLevel

                int securityLevel = snmpTarget.getSecurityLevel();

Address targetAddress = GenericAddress.parse("10.10.255.255/161");

                  PduHandle reqHandle = mtmd.sendPdu(null, targetAddress,
SnmpConstants.version3,

                              SecurityModel.SECURITY_MODEL_USM,
securityName.getValue(),

                              SecurityLevel.NOAUTH_NOPRIV, pduScoped, true);

         } catch (IOException e) {

            logger.error("asyncsend(): Error sending async message. " + e);

            throw e;

         } catch (Exception e){

            logger.error("asyncsend(): Error sending async message. " + e);

         }

...

public void processPdu(CommandResponderEvent e) {

                                PDU responsePdu = e.getPDU();

                                if (responsePdu == null)

                                                return;

                                /*

                                if (responsePdu.getType() != PDU.RESPONSE)

                                                return;

                                Integer32 int32 =
responsePdu.getRequestID();

                                if (int32.getValue() == 0)

                                                return;

                                */

                                PduHandle pduHandle = e.getPduHandle();

                                 e.getPeerAddress();

                                } catch (Exception exception) {

                                }

                }

After executing the first part of code I receives only one
CommandResponderEvent.
The same code for SNMP v1 works fine, I receives responses from all my
devices:

ThreadPool tp = ThreadPool.create("Asynchronous SNMP Adaptor Thread", 3);

            MultiThreadedMessageDispatcher mtmd = new
MultiThreadedMessageDispatcher(tp, new MessageDispatcherImpl());

            mtmd.addMessageProcessingModel(new MPv1());

            mtmd.addMessageProcessingModel(new MPv2c());

            mtmd.addMessageProcessingModel(new MPv3());

            mtmd.addCommandResponder(this);

            DefaultUdpTransportMapping defaultTransport = new
DefaultUdpTransportMapping();

            defaultTransport.setReceiveBufferSize(65535);

            TransportMapping transport = defaultTransport;

            mtmd.addTransportMapping(transport);

            // transport.addMessageDispatcher(mtmd);

            transport.addTransportListener(mtmd);

transport.listen();

Address targetAddress = GenericAddress.parse("10.10.255.255/161");

                                PduHandle reqHandle = mtmd.sendPdu(null,
targetAddress, SnmpConstants.version1,

SecurityModel.SECURITY_MODEL_SNMPv1, new OctetString("public") .getValue(),

SecurityLevel.NOAUTH_NOPRIV, pdu, true);

All devices supports SNMPv3 and set up by the same settings.

Could anyone help me to receive all responses? What I do incorrectly?

Please help me!

Thanks,

Dmitriy

_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j

_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j

Reply via email to