Consulta de bloque de un hash y ejecutar rutina
Publicado: 2021-11-12 12:59 @583
Hola a todos, requiero de su ayuda. Necesito poder leer un archivo perl (.pl) el cual contiene un hash; requiero que lea el primer bloque y después valide si es v2c o v3, y poder almacenar algunos atributos de ese mismo bloque para efectuar una rutina.
Mis datos del archivo Datos.pl:
Digamos leer el archivo .pl y entrar al bloque de España y ver si es v2c o v3. Si es v3 guardar el valor de name, privpassword, username, etc. para ocuparlas en una rutina (Consulta SNMP) y mostrar la salida.
Ahora si es v2 tal el caso de Perú sólo guardar el valor de community y name, para aplicar la consulta
y mostrar la salida.
Estaba probando con un solo bloque, pasando los datos directamente a una variable, anexo lo que tengo.
PD: Les agradecería mucho su ayuda
Mis datos del archivo Datos.pl:
Using perl Syntax Highlighting
- %hash = (
- 'Espana' => {
- 'active' => 'true',
- 'authpassword' => 'E$pan@#2021_2022',
- 'authprotocol' => 'sha',
- 'community' => '',
- 'name' => 'Esp_Madrid',
- 'privpassword' => 'S3cRt_EsP4n4',
- 'privprotocol' => 'aes',
- 'username' => 'n3tw0rk_EsP4na',
- 'version' => 'v3',
- 'wmipassword' => '',
- 'wmiusername' => ''
- },
- 'Peru' => {
- 'active' => 'true',
- 'name' => 'Peru_LATAM',
- 'authpassword' => '',
- 'authprotocol' => 'md5',
- 'community' => 'test_P3Ru_001%',
- 'privpassword' => '',
- 'privprotocol' => 'aes',
- 'username' => '',
- 'version' => 'v2',
- 'wmipassword' => '',
- 'wmiusername' => ''
- },
- 'MEXICO_CENTER_01' => {
- 'active' => 'true',
- 'name' => 'MEXICO_CENTER_01',
- 'authpassword' => '',
- 'authprotocol' => 'md5',
- 'community' => 'M3xiC0_#2021%',
- 'privpassword' => '',
- 'privprotocol' => 'aes',
- 'username' => '',
- 'version' => 'v2',
- 'wmipassword' => '',
- 'wmiusername' => ''
- }
- );
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Digamos leer el archivo .pl y entrar al bloque de España y ver si es v2c o v3. Si es v3 guardar el valor de name, privpassword, username, etc. para ocuparlas en una rutina (Consulta SNMP) y mostrar la salida.
- snmpwalk -v3 -l <noAuthNoPriv|authNoPriv|authPriv> -u <username> [-a <MD5|SHA>] [-A <authphrase>] [-x DES] [-X <privaphrase>] <name>[:<dest_port>] [oid]
Ahora si es v2 tal el caso de Perú sólo guardar el valor de community y name, para aplicar la consulta
y mostrar la salida.
Estaba probando con un solo bloque, pasando los datos directamente a una variable, anexo lo que tengo.
Using perl Syntax Highlighting
- /usr/bin/perl
- use POSIX qw/ strftime /; # fecha
- my $IPNODO = 'NODO_TEST_SNMP';
- my $cmd = "snmpwalk -v 2c -c public $IPNODO"; # Comando consulta snmpwalk
- print "Ejecutando el comando: [$cmd]\n"; # Print del comando a ejecutar
- eval {
- local $SIG{ALRM} = sub { die "timeout\n" }; # Nota: \n es requerido
- alarm 90; # ajustamos una alarma a los 90 segundos
- $salidaComando = qx($cmd);
- alarm 0; # todo bien, desactivamos alarma
- };
- if ($@) { # si hubo errores...
- die unless $@ eq "timeout\n"; # Propagar los errores inesperados
- die "ERROR: Se produjo un error al ejecutar [$cmd]: [$@]\n"; # paramos el programa informando del error
- }
- print "Salida: [$salidaComando]\n"; # Imprime el debug de la consulta SNMPWALK
- if ($salidaComando =~ /No more variables left in this MIB View \(It is past the end of the MIB tree\)/i) { # Valida si existe el String
- my $fecha = strftime( "%d-%m-%Y %H:%M:%S", localtime(time) );
- $epoc = time();
- my $detalle = "$epoc,$IPNODO,SNMP Down,Warning,,No more variables left in this MIB View (It is past the end of the MIB tree)\n"; # Imprime el Warning y manda al log
- my $filename = '/usr/local/nmis8/logs/CheckSNMP.log';
- open(FH, '>>', $filename) or die $!;
- print FH $detalle;
- close(FH);
- }
- else { # Si no encuentra nada manda mensaje de falso.
- print "No se encuentra el patrón";
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
PD: Les agradecería mucho su ayuda