# Dynamic SNMP

# Introducción

**Ver**. 22-05-2025

Este plugin tiene como finalidad hacer escaneos SNMP dinámicos (por ejemplo, interfaces cuya OID cambia entre reinicios).

Ejecutado por defecto, monitoriza el estado de las interfaces y su tráfico de entrada y salida. Entre sus capacidades está el filtrado de interfaces en base al nombre, así como la asignación de umbrales y alertas a los módulos que genera.

**Tipo**: Plug-in de servidor, Plug-in de agente

# Matriz de compatibilidad

<table border="1" id="bkmrk-sistemas-donde-se-ha-1" style="width: 74.8148%;"><tbody><tr><td style="width: 56.7204%;">**Desarrollado y probado en**</td><td style="width: 43.2796%;">Rocky linux, Fedora 34</td></tr><tr><td style="width: 56.7204%;">**Sistemas en los que se espera que funcione**</td><td style="width: 43.2796%;">Cualquier sistema linux</td></tr></tbody></table>

# Pre requisitos

- Conectividad hacia el host y la comunidad que se pretende escanear.

# Parámetros

Parámetros requeridos:

<table border="1" id="bkmrk--c-comunidad--v-vers" style="border-collapse: collapse; width: 100%; height: 867.907px;"><colgroup><col style="width: 30.5312%;"></col><col style="width: 69.4688%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-v *version*</div></div></td><td style="height: 29.7969px;">Versión de SNMP</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-h *IP*</div></div></td><td style="height: 29.7969px;">IP del dispositivo</td></tr></tbody></table>

Parámetros específicos de SNMP:

<table border="1" id="bkmrk--c%C2%A0community-comunid" style="border-collapse: collapse; width: 100%; height: 867.907px;"><colgroup><col style="width: 30.2898%;"></col><col style="width: 69.7102%;"></col></colgroup><tbody><tr><td style="height: 29.7969px;"><div><div>-c *community*</div></div></td><td style="height: 29.7969px;">Comunidad (SNMP v1 y v2c)</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-u *user*</td><td style="height: 29.7969px;"><div><div>Usuario o entidad de seguridad (solo SNMPv3)</div></div></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-n *context*</td><td style="height: 29.7969px;"><div><div>Contexto (solo SNMPv3)</div></div></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-l *securityLevel*</td><td style="height: 29.7969px;"><div><div>Nivel de seguridad (solo SNMPv3). Los posibles valores son "noAuthNoPriv", "authNoPriv" y "authPriv".</div></div></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-a *authProtocol*</td><td style="height: 29.7969px;"><div><div>Protocolo de autenticación (solo SNMPv3). Puede ser "MD5" o "SHA".</div></div></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-A *authKey*</td><td style="height: 29.7969px;"><div><div>Clave de autenticación utilizada en combinación con el protocolo de autenticación especificado (solo SNMPv3).</div></div></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-x *privProtocol*</td><td style="height: 29.7969px;"><div><div>Protocolo de privacidad que se utilizará para cifrar los datos transmitidos (solo SNMPv3). Los posibles valores incluyen "DES" y "AES".</div></div></td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-X *privKey*</td><td style="height: 29.7969px;"><div><div>Es la clave de privacidad que se utiliza junto con el protocolo de privacidad para cifrar y descifrar los datos transmitidos (solo SNMPv3).</div></div></td></tr></tbody></table>

Parámetros opcionales del plugin:

<table border="1" id="bkmrk--agent-agentname-nom" style="border-collapse: collapse; width: 100%; height: 700.687px;"><colgroup><col style="width: 30.2845%;"></col><col style="width: 69.7155%;"></col></colgroup><tbody><tr style="height: 63.3906px;"><td style="height: 63.3906px;"><div><div>-agent *agentname*</div></div></td><td style="height: 63.3906px;">Nombre del agente (sólo si se ejecuta como Plugin de servidor). Si se omite este parámetro, el plugin actuará como Plugin de agente.</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;"><div><div>-only *regex*</div></div></td><td style="height: 63.3906px;">Cadena de texto o expresión regular para filtrar elementos. Sólo se monitorizarán las ramas que contengan esta expresión en su rama de nombre.</td></tr><tr style="height: 63.3906px;"><td style="height: 63.3906px;"><div><div>-reject *regex*</div></div></td><td style="height: 63.3906px;">Cadena de texto o expresión regular para filtrar elementos. Se excluirán las ramas que contengan esta expresión en su rama de nombre.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-p *port*</td><td style="height: 29.7969px;">Puerto SNMP del dispositivo. Por defecto: 161</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-d *data\_type*</td><td style="height: 29.7969px;">Tipo de dato (por defecto lo detecta automáticamente)</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">-o *OID*</td><td style="height: 46.5938px;">OID base para monitorización (de aquí partirán las OIDs de -branches y -names).</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;"><div><div>-names *namesOID*</div></div></td><td style="height: 46.5938px;">Subrama que se utilizará como nombre para los módulos (parte de la OID indicada en -o)</td></tr><tr style="height: 102.562px;"><td style="height: 102.562px;"><div><div>-branches *branches*</div></div></td><td style="height: 102.562px;">Esta opción especifica las ramas (branches) que se deben recuperar bajo los OIDs proporcionados (parte de la OID indicada en -o). El formato es Rama1:OID1,Rama2:OID2,...

Por ejemplo: "OperStatus:.8,AdminStatus:.7"

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-wmin *wmin*</div></div></td><td style="height: 29.7969px;">Umbral mínimo de warning para los módulos generados</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-wmax *wmax*</div></div></td><td style="height: 29.7969px;">Umbral máximo de warning para los módulos generados</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-cmin *cmin*</div></div></td><td style="height: 29.7969px;">Umbral mínimo de crítico para los módulos generados</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-cmax *cmax*</div></div></td><td style="height: 29.7969px;">Umbral máximo de crítico para los módulos generados</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;"><div><div>-alrt *alerts*</div></div></td><td style="height: 46.5938px;">Alertas globales para los módulos generados (ej. "Critical condition")</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-group *modulegroup*</div></div></td><td style="height: 29.7969px;">Grupo para los módulos generados.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-nodefaults 1</div></div></td><td style="height: 29.7969px;">Desactiva la monitorización por defecto (se usa junto a -o, -names y -branches)</td></tr><tr><td><div><div>-interval</div></div></td><td>Define el intervalo del agente (Por defecto 300)</td></tr></tbody></table>

Envío de datos a Pandora (sólo cuando se ejecuta como plugin de servidor):

<table border="1" id="bkmrk--m%C2%A0mode-modo-de-tran" style="border-collapse: collapse; width: 100%; height: 867.907px;"><colgroup><col style="width: 30.1657%;"></col><col style="width: 69.8343%;"></col></colgroup><tbody><tr><td style="height: 46.5938px;"><div><div>-m *mode*</div></div></td><td style="height: 46.5938px;">Modo de transferencia, tentacle o localcopy. Por defecto: 'tentacle'</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-t_ip *tentacleIP*</div></div></td><td style="height: 29.7969px;">IP de tentacle (sólo con modo de transferencia "tentacle"). Por defecto: 127.0.0.1</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-t_port *tentaclePort*</div></div></td><td style="height: 29.7969px;">Puerto de tentacle (sólo con modo de transferencia "tentacle"). Por defecto: 41121</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-t_opts *tentacleOpts*</div></div></td><td style="height: 29.7969px;">Opciones extras de tentacle (sólo con modo de transferencia "tentacle")</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"><div><div>-t_file_path *tentaclePath*</div></div></td><td style="height: 29.7969px;">Ruta de tentacle (sólo con modo de transferencia "localcopy"). Por defecto: /var/spool/pandora/data\_in/</td></tr></tbody></table>

# Ejecución manual

El formato de ejecución del plugin es el siguiente:

```
./dynamic_snmp -agent <agent name> -h <host> -v <version> [-c <comunidad>] [-u <username>] [-a <authProtocol>] [-A <authKey>] [-x <privProtocol>] [-X <privPassword>] [-l <securityLevel>] [-o <base oid>] [-names <instance>] [-branches <branches>] [-nodefaults 1] [-t_ip <tentacleIP>] [-t_port <tentaclePort>] [-t_opts "<tentacleOptions>"] [-t_file_path "<tentaclePath>"] [-m <transferMode>] [-wmin <wmin>] [-wmax <wmax>] [-cmin <cmin>] [-cmax <cmax>] [-alrt <alert_name>] [-group <moduleGroup>] [-debug 1]
```

Ejemplo de monitorización básica con SNMPv2, con todo por defecto y lanzado como plugin de Agente. Generará módulos de OperStatus, ifInOctets y ifOutOctets (ifHCInOctets e ifHCOutOctets si están disponibles):

```
./dynamic_snmp -h "192.168.51.1" -v "2c" -c "mycommunity"
```

Ejemplo de monitorización básica con SNMPv2, ejecutando como plugin de Servidor y utilizando los filtros de inclusión y exclusión. Se monitorizarán las interfaces cuyo nombre contenga "Ge", pero no para las que contengan "0/3", y se incluirán en el agente cuyo agentname es "Test-agentname":

```
./dynamic_snmp -agent "Test-agentname" -h "192.168.51.1" -v "2c" -c "mycommunity" -only "Ge" -reject "0/3"
```

Mismo ejemplo, pero utilizando SNMPv3:

```
./dynamic_snmp -agent "Test-agentname" -h "192.168.51.1" -v "3" -l "authPriv" -u "snmpv3user" -a "SHA" -A "PASSWORD1" -x "AES" -X "PASSWORD2" -only "Ge" -reject "0/3"
```

Ejemplo de monitorización personalizada con SNMPv2, ejecutando como plugin de Servidor, desactivando la monitorización por defecto y escogiendo manualmente las ramas a monitorizar:

```
./dynamic_snmp -agent "Test-agentname" -h "192.168.51.1" -v "2c" -c "mycommunity"  -o ".1.3.6.1.2.1" -names ".2.2.1.2" -branches "OperStatus:.2.2.1.8,AdminStatus:.2.2.1.7" -nodefaults 1
```

Nota: Las comillas mostradas en los ejemplos anteriores no son necesarias, pero pueden evitar problemas.

# Configuración en Pandora FMS

Para configurar esto como plugin de Servidor en PandoraFMS, se deben seguir los siguientes pasos :

**1. Subir el plugin a PandoraFMS, por ejemplo en la siguiente ruta:**

```
/usr/share/pandora_server/util/plugin
```

**2. Crear un plugin de servidor en el apartado Plugins:**

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/image.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/image.png)

 **3. Añadir nombre, descripción y timeout:**

<p class="callout warning">Este plugin puede tardar un tiempo en ejecutarse, por lo que se recomienda configurar un timeout de al menos 20 segundos. Es posible que el parámetro global "plugin\_timeout" del pandora\_server.conf deba ser ajustado también.</p>

[![Captura de pantalla 2025-05-22 a las 13.40.05.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/captura-de-pantalla-2025-05-22-a-las-13-40-05.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/captura-de-pantalla-2025-05-22-a-las-13-40-05.png)

Descripción utilizada en el ejemplo:

> This plugin generates modules dynamically in the agent it's created in. Based on the ifName, it generates modules for:  
> \- ifOperStatus  
> \- ifInOctets (ifHCInOctets, if available)  
> \- ifOutOctets (ifHCOutOctets, if available)  
> The value returned by the module represents the number of modules generated.

**4. Se añade la ruta del plugin en el comando y los parámetros necesarios para la ejecución de este.**

Este ejemplo se configurará para monitorización de interfaces con SNMPv2, indicando filtros para las interfaces y umbrales de estado para los módulos generados. Se utilizarán las macros de servidor \_agentname\_ y \_address\_ para no tener que indicar manualmente el nombre de agente y la dirección IP del dispositivo en cada ejecución:

<p class="callout info">Para cada parámetro se debe configurar una macro, siendo la sintaxis de esta macro la siguiente : \_fieldx\_, siendo x el numero posicional del parámetro.</p>

[![Captura de pantalla 2025-05-22 a las 13.43.29.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/captura-de-pantalla-2025-05-22-a-las-13-43-29.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/captura-de-pantalla-2025-05-22-a-las-13-43-29.png)

Plugin parameters utilzados en el ejemplo:

```
-agent "_agentname_" -h "_address_" -v "_field1_" -c "_field2_" -only "_field3_" -reject "_field4_" -wmin "_field5_" -wmax "_field6_" -cmin "_field7_" -cmax "_field8_"
```

**5. Se configuran las macros anteriores, añadiendo en cada una el valor del parámetro:**

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/Okgimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/Okgimage.png)

Campos incluidos en el ejemplo:

- Field 1 
    - Description: `SNMP version`
    - Default value: `2c`
- Field 2 
    - Description: `SNMP community`
- Field 3: 
    - Description: `Filter interfaces by name`
    - Help: `Optional: allows filtering interfaces by name, separated by commas. For example: ‘ge,fe’, will only generate modules for interfaces whose name contains ‘ge’ or ‘fe’.`
- Field 4: 
    - Description: `Exclude interfaces by name`
    - Help: `Optional: allows to exclude interfaces by name, separated by comma. For example: ‘ge,fe’ will generate modules for all available interfaces except if their name contains ‘ge’ or ‘fe’.`
- Field 5: 
    - Description: `Warning threshold (min)`
    - Help: Optional: `Allows to specify the min threshold for Warning status in the generated modules.`
- Field 6: 
    - Description: `Warning threshold (max)`
    - Help: Optional: `Allows to specify the max threshold for Warning status in the generated modules.`
- Field 7: 
    - Description: `Critical threshold (min)`
    - Help: Optional: `Allows to specify the min threshold for Critical status in the generated modules.`
- Field 8: 
    - Description: `Critical threshold (max)`
    - Help: `Allows to specify the max threshold for Critical status in the generated modules.`

**6.** **Una vez configurado se debe crear un módulo en un agente que ejecute el plugin. En el menú de módulos de un agente, crear un módulo de tipo plugin server:**

[![Captura de pantalla 2025-05-22 a las 16.05.33.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/Htucaptura-de-pantalla-2025-05-22-a-las-16-05-33.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/Htucaptura-de-pantalla-2025-05-22-a-las-16-05-33.png)

**7. En el menú de configuración del módulo, indicar un nombre, seleccionar el plugin y rellenar los campos requeridos:**

[![Captura de pantalla 2025-05-22 a las 15.51.20.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/captura-de-pantalla-2025-05-22-a-las-15-51-20.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/captura-de-pantalla-2025-05-22-a-las-15-51-20.png)

**8. Una vez creado el módulo, el plugin se ejecutará y generará los módulos que coincidan con los filtros indicados:**

[![Captura de pantalla 2025-05-22 a las 15.56.12.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/captura-de-pantalla-2025-05-22-a-las-15-56-12.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/captura-de-pantalla-2025-05-22-a-las-15-56-12.png)

# Agentes y módulos generados por el plugin

El plugin creará los módulos en el agente seleccionado con el parámetro -agent. Si el agentname especificado no se corresponde con el de ningún agente existente, se creará uno nuevo automáticamente.

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-02/scaled-1680-/rAdimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-02/rAdimage.png)

[![Captura de pantalla 2025-05-22 a las 15.56.12.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/scaled-1680-/i5zcaptura-de-pantalla-2025-05-22-a-las-15-56-12.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-05/i5zcaptura-de-pantalla-2025-05-22-a-las-15-56-12.png)