[SNMP4J] R: SNMP4J Agent cannot be discovered (Netwrok Discovery)

Denis Ioan d.ioan at next-italia.it
Fri Sep 18 17:05:19 CEST 2015


Frank, 
  actually if I perform the Network Discovery Tools of iReasoning in my office where I have a standard router, the tool could find easy a couple of printers with all the informations (sysDescr, sysObject, sysUpTime, etc) but not my Agent :( Maybe I'm wrong but it seem an issue un my Agent. Or is it something should I configure on the operating system where the Agent works (it's a Linux Ubuntu)?
Best Regards
Denis

-----Messaggio originale-----
Da: Frank Fock [mailto:fock at agentpp.com] 
Inviato: venerdì 18 settembre 2015 16:52
A: Denis Ioan <d.ioan at next-italia.it>
Cc: snmp4j at agentpp.org
Oggetto: Re: [SNMP4J] SNMP4J Agent cannot be discovered (Netwrok Discovery)


Hi Denis,

The accessibility by IP multi-cast and broadcast is a network issue.
Your agent is fine if you can access it by a simple SNMP message it also can be accessed by a multi-cast or broadcast. From the agent point of view, the IP packet types cannot be distinguished and are processed in exactly the same way.

Best regards,
Frank



> On 18 Sep 2015, at 16:47, Denis Ioan <d.ioan at next-italia.it> wrote:
> 
> Hi Frank,
>  just for my understand, the problem where my agent cannot be not accessible by IP broadcast or multi-cast UDP packets is it a problem inside my software (my Agent programming) or could come from the network environment? (After this question I try to do not disturb you more).
> Thank you
> Best Regards
> Denis
> 
> -----Messaggio originale-----
> Da: Frank Fock [mailto:fock at agentpp.com]
> Inviato: venerdì 18 settembre 2015 16:38
> A: Denis Ioan <d.ioan at next-italia.it>; snmp4j at agentpp.org
> Oggetto: Re: R: [SNMP4J] SNMP4J Agent cannot be discovered (Netwrok 
> Discovery)
> 
> 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:snmp4j-bounces at agentpp.org] Per conto di Frank 
>> Fock
>> Inviato: giovedì 17 settembre 2015 22:05
>> A: snmp4j at agentpp.org
>> 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_DE
>>> S
>>> C
>>> RIPTION));
>>> 
>>> agent.registerManagedObject(MOCreator.createReadOnly(sysObjectID, 
>>> new OID(configuration.getAgentBaseOID())));
>>> 
>>> agent.registerManagedObject(MOCreator.createReadOnly(sysContact,SYS_
>>> C
>>> O
>>> NTACT));
>>> 
>>> agent.registerManagedObject(MOCreator.createReadOnly(sysName,SYS_NAM
>>> E
>>> )
>>> );
>>> 
>>> 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
>>> SNMP4J at agentpp.org
>>> 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
>> SNMP4J at agentpp.org
>> 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
> 
> 
> 






More information about the SNMP4J mailing list