Hi Denis,

What object a manager expects to find to successfully "discover" an agent depends on the manager itself. However, there are some standard objects that should be there in any case.
For SNMPv3 those objects are provided by the SNMP-FRAMEWORK-MIB.
SNMP4J-Agent by default provides those objects.

You can use MIB Explorer Pro to run a discovery by yourself and log the exchanged packets
too.
But also please check for network security issues. The agent you are running could be
not accessible by IP broadcast or multi-cast UDP packets.

Best regards,
Frank

Am 18.09.2015 um 10:28 schrieb Denis Ioan:
Hi Frank,
    first of all thank you for the quick reply. I try to give you some more 
details about my issue:
As you could check in my lines of code I've implemented (or I tried to 
implement) an SNMP Agent v3.
I registered all my private OIDs and I've also implemented all the mib-2/system 
OIDs (sysName, sysDescription, etc).
So you can "get" any the system OIDs and get/set all my enterprise OIDs (as 
well you can SnmpWalk, GetNext, etc). This works well.
Some software like "Whats Up Gold" in order to connect to a SNMP device uses such a "SNMP 
Network Discovery" where they poll all the subnet addresses looking for a SNMP Device. I've tried with a 
Cisco router (SNMPv3 and authentication) and the application discovers it immediately, but when I try on my 
device the software cannot discover it. As well if I use the "Network Discovery" function if the 
iReasoning MIB Browser (with the one I can work perfectly in terms of SnmpGet, SnmpSet and so on).
At this point I ask myself if I should register some other mandatory OIDs (not 
only the system OIDs) to let my device to be automatically discovered or I miss 
to implement in my software something important.
I hope I could give some more indications and thank once more.
Best Regards
Denis

-----Messaggio originale-----
Da: SNMP4J [mailto:[email protected]] Per conto di Frank Fock
Inviato: giovedì 17 settembre 2015 22:05
A: [email protected]
Oggetto: Re: [SNMP4J] SNMP4J Agent cannot be discovered (Netwrok Discovery)

Hi Denis,

Before I can answer your question, I need to know what you exactly mean by "Network 
Discovery"?

Often IP multi-cast was used for that. Nowadays this is often no longer 
possible because switches/router/firewalls block multi-cast packets for 
security reasons.

In addition, multi-cast works only with SNMPv1 and v2c (community based) and
SNMPv3 with noAuthNoPriv.

Best regards,
Frank

Am 17.09.2015 um 11:14 schrieb Denis Ioan:
Hi to everybody,
     I'm new to the SNMP protocol but I had to implement an Agent in v3.
Using SNMP4J I've implemented and all works fine except the agent
cannot be discovered automatically from the Network Discovery functions.
I guess I forgot to insert something in the configuration. I post here
the Agent class and the way I use it in the software:

public class SNMPAgent extends BaseAgent {
private final String GROUP_NAME = "v3group"; private String address;
      private String baseOID;
      private String securityName; // User
      private String SHAPassword;
      private String AES128Passphrase;
      private String trapIPAddress;
      private String trapPort;
/**
       *
       * @param address
       * @throws IOException
       */
      public SNMPAgent(String address, String baseOID,
              String securityName, String SHAPassword, String
AES128Passphrase, String trapIPAddress, String trapPort) throws
IOException {

              /**
               * Creates a base agent with boot-counter, config file,
and a
               * CommandProcessor for processing SNMP requests.
Parameters:
               * "bootCounterFile" - a file with serialized
boot-counter information
               * (read/write). If the file does not exist it is created
on shutdown of
               * the agent. "configFile" - a file with serialized
configuration
               * information (read/write). If the file does not exist
it is created on
               * shutdown of the agent. "commandProcessor" - the
CommandProcessor
               * instance that handles the SNMP requests.
               */
              super(new File("conf.agent"), new File("bootCounter.agent"),
                              new CommandProcessor(
                                              new
OctetString(MPv3.createLocalEngineID())));
this.address = address;
              this.baseOID = baseOID;
              this.securityName = securityName;
              this.SHAPassword = SHAPassword;
              this.AES128Passphrase = AES128Passphrase;
              this.trapIPAddress = trapIPAddress;
              this.trapPort = trapPort;
}

      /**
       * Adds community to security name mappings needed for SNMPv1 and
SNMPv2c.
       */
      @Override
      protected void addCommunities(SnmpCommunityMIB communityMIB) {
}

      /**
       * Adds initial notification targets and filters.
       */
      @Override
      protected void addNotificationTargets(final SnmpTargetMIB targetMIB,
          final SnmpNotificationMIB notificationMIB) {
      }

      /**
       * Adds all the necessary initial users to the USM.
       */
      @Override
      protected void addUsmUser(USM usm)
      {
          UsmUser user = new UsmUser(
                          new OctetString(securityName),
                          AuthSHA.ID,
                          new OctetString(SHAPassword),
                          PrivAES128.ID,
                          new OctetString(AES128Passphrase)
                          );

          usm.addUser(user.getSecurityName(), null, user);
      }

      /**
       * Adds initial VACM configuration.
       */
      @Override
      protected void addViews(VacmMIB vacm)
      {         
          vacm.addGroup(
                  SecurityModel.SECURITY_MODEL_USM,
                  new OctetString(securityName),
                  new OctetString(GROUP_NAME),
                  StorageType.nonVolatile
                  );

          vacm.addAccess(
                  new OctetString(GROUP_NAME),
                  new OctetString(),
                  SecurityModel.SECURITY_MODEL_USM,
                  SecurityLevel.AUTH_PRIV,
                  MutableVACM.VACM_MATCH_EXACT,
                  new OctetString("fullReadView"),
                  new OctetString("fullWriteView"),
                  new OctetString("fullNotifyView"),
                  StorageType.nonVolatile
                  );

          vacm.addViewTreeFamily(
                  new OctetString("fullReadView"),
                  new OID(baseOID),
                  new OctetString(),
                  VacmMIB.vacmViewIncluded,
                  StorageType.nonVolatile
                  );

          vacm.addViewTreeFamily(
                  new OctetString("fullWriteView"),
                  new OID(baseOID),
                  new OctetString(),
                  VacmMIB.vacmViewIncluded,
                  StorageType.nonVolatile
                  );
vacm.addViewTreeFamily(new OctetString("fullReadView"), new
OID("1.3"),
                                new OctetString(), VacmMIB.vacmViewIncluded,
                                StorageType.nonVolatile);
      }

      /**
       * Unregister the basic MIB modules from the agent's MOServer.
       */
      @Override
      protected void unregisterManagedObjects() {
              // TODO Auto-generated method stub

      }

      /**
       * Register additional managed objects at the agent's server.
       */
      @Override
      protected void registerManagedObjects() {
              // TODO Auto-generated method stub

      }

      protected void initTransportMappings() throws IOException {
              transportMappings = new TransportMapping[1];
              Address addr = GenericAddress.parse(address);
              TransportMapping tm = TransportMappings.getInstance()
                              .createTransportMapping(addr);
              transportMappings[0] = tm;
      }

      /**
       * Start method invokes some initialization methods needed to
start the
       * agent
       *
       * @throws IOException
       */
      public void start() throws IOException {

              init();
              // This method reads some old config from a file and causes
              // unexpected behavior.
              // loadConfig(ImportModes.REPLACE_CREATE);
              addShutdownHook();
              //getServer().addContext(new OctetString("public"));
              finishInit();
              run();
              sendColdStartNotification();
      }

      /**
       * Clients can register the MO they need
       */
      public void registerManagedObject(ManagedObject mo) {
              try {
                      server.register(mo, null);
              } catch (DuplicateRegistrationException ex) {
                      throw new RuntimeException(ex);
              }
      }

      public void unregisterManagedObject(MOGroup moGroup) {
              moGroup.unregisterMOs(server, getContext(moGroup));
      }

}

I user the Agent in this way:


agent = new SNMPAgent(
                      LOCALHOST + '/' + configuration.getAgentSnmpPort(),
                      configuration.getAgentBaseOID(),
                      configuration.getAgentSnmpUser(),
                      configuration.getAgentSHAPassword(),
                      configuration.getAgentAES128PassPhrase(),
                      configuration.getTrapDestIPAddress(),
                      configuration.getTrapPort());

              agent.start();

// Since BaseAgent registers some mibs by default we need to unregister
        // one before we register our own sysDescr. Normally you would
        // override that method and register the mibs that you need
        agent.unregisterManagedObject(agent.getSnmpv2MIB());
// Register a system description, use one from you product environment
        // to test with

agent.registerManagedObject(MOCreator.createReadOnly(sysDescr,SYS_DESC
RIPTION));

agent.registerManagedObject(MOCreator.createReadOnly(sysObjectID, new
OID(configuration.getAgentBaseOID())));

agent.registerManagedObject(MOCreator.createReadOnly(sysContact,SYS_CO
NTACT));

agent.registerManagedObject(MOCreator.createReadOnly(sysName,SYS_NAME)
);

agent.registerManagedObject(MOCreator.createReadOnly(sysLocation,SYS_L
OCATION));

agent.registerManagedObject(MOCreator.createReadOnly(sysServices,SYS_S
ERVICES));
MOSSysUpTime = MOCreator.createReadWrite(sysUpTime, new
TimeTicks((long)0));
          agent.registerManagedObject(MOSSysUpTime);


I thank you in advance everybody will answer me.
Denis



_______________________________________________
SNMP4J mailing list
[email protected]
https://oosnmp.net/mailman/listinfo/snmp4j
--
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax:   +49 7024 8688231

_______________________________________________
SNMP4J mailing list
[email protected]
https://oosnmp.net/mailman/listinfo/snmp4j



--
---
AGENT++
Maximilian-Kolbe-Str. 10
73257 Koengen, Germany
https://agentpp.com
Phone: +49 7024 8688230
Fax:   +49 7024 8688231

_______________________________________________
SNMP4J mailing list
[email protected]
https://oosnmp.net/mailman/listinfo/snmp4j

Reply via email to