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

Frank Fock fock at agentpp.com
Fri Sep 18 17:09:39 CEST 2015


Denis,

Many people seem to use the iReasoning tool and bother me with question 
why it does not
provide the results they expect. Please ask the provider of the tool 
instead.

The agent is just fine. It cannot be an issue with the agent if you can 
access it with some
(standard conforming) SNMP tool.

Best regards,
Frank

Am 18.09.2015 um 17:05 schrieb Denis Ioan:
> 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
>>
>>
>>
>
>

-- 
---
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