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:
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
- snmpwalk -v 2c <name> -c <community> system
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