• Publicidad

Duda con código NET::SNMP

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Duda con código NET::SNMP

Notapor Ramiro_xp » 2010-08-18 13:34 @607

Hola, ¿qué tal? Este es mi primer post en este foro, muy bueno por lo demás, he aprendido bastante.

Tengo unas dudas con algunas líneas de este código, no es mio pero lo he ido modificando.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #use strict;
  3. use Net::SNMP qw( oid_lex_sort );
  4. my $oid = '.1.3.6.1.4.1.12394.1.2.100.3.1.1.14';
  5. my $host = 'x.x.x.x';
  6. my $community = 'loquesea';
  7. my ($session, $error) = Net::SNMP->session
  8. (
  9. -hostname => $host ,
  10. -community => $community ,
  11. );
  12. $result = $session->get_table(-baseoid => $oid);
  13. foreach my $resp ( oid_lex_sort ( keys %{ $result } ) )
  14. {
  15. printf("resultado $resp %s\n",$result->{ $resp });
  16. }
  17. $session->close();
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y el resultado es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
resultado .1.3.6.1.4.1.12394.1.2.100.3.1.1.14.622.2112 0x0010e7e2e15e
resultado .1.3.6.1.4.1.12394.1.2.100.3.1.1.14.623.2376 0x0010e7a2313d
resultado .1.3.6.1.4.1.12394.1.2.100.3.1.1.14.623.2377 0x0010e7a2313d
resultado .1.3.6.1.4.1.12394.1.2.100.3.1.1.14.624.2505 0x0010e782a15f
resultado .1.3.6.1.4.1.12394.1.2.100.3.1.1.14.624.2506 0x0010e782a15f
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Mis dudas acá son:
1.- ¿Qué hace lo siguiente?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
( keys %{ $result } )
$result->{ $resp }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


2.- ¿Cómo puedo hacer para que el valor en Hex me lo deje como 0010E782A15F y no en 0x0010e782a15f, ya que si cambio en printf() el %s por %X solo me arroja 0.

P.D.: la variable $result es una cadena de texto.

Saludos
Ramiro_xp
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-06-03 13:43 @613

Publicidad

Re: Duda con código NET::SNMP

Notapor rnstux » 2010-08-18 15:05 @670

Hola.

$result no es una cadena de texto, es una hash (algo así como los arreglos asociativos en PHP). Y lo que estás haciendo es un recorrido básico de un hash.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $resp ( oid_lex_sort ( keys %{ $result } ) ) {
   printf("resultado $resp %s\n",$result->{ $resp });
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Aquí puedes obtener más info:
http://www.cs.mcgill.ca/~abatko/compute ... owto/hash/

¿A qué te refieres con pasar 0010E782A15F a 0x0010e782a15f?

¿Eliminar 0x y pasarlo a mayúsculas? Si es así eso lo puedes hacer con expresiones regulares. :wink:
rnstux
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-07-10 00:43 @071

Re: Duda con código NET::SNMP

Notapor Ramiro_xp » 2010-08-18 15:16 @677

Hola, gracias por responder.

Me quedó algo más claro con lo del hash, pero en la segunda línea no se bien lo que hace el printf().
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
printf("resultado $resp %s\n",$result->{ $resp });
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

más que nada en la parte de $result->{ $resp }).

Lo de ocupar expresiones regulares lo quería evitar más que nada por ahorrar código, estuve viendo que existe el método translate(): http://search.cpan.org/~dtown/Net-SNMP-v6.0.0/lib/Net/SNMP.pm#translate()_-_enable_or_disable_the_translation_mode_for_the_object pero ningún ejemplo para poder implementarlo.

Saludos y gracias.
Ramiro_xp
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-06-03 13:43 @613

Re: Duda con código NET::SNMP

Notapor rnstux » 2010-08-18 16:02 @710

Si no entiendes está parte, es que no te quedó claro lo de los hash, $result->{ $resp } <-- Quiere decir que, vas a acceder al contenido del hash cuya clave es el valor de $resp.

Perdón, no tengo experiencia con el módulo de Net::SNMP.
rnstux
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-07-10 00:43 @071

Re: Duda con código NET::SNMP

Notapor explorer » 2010-08-18 16:04 @711

Ramiro_xp escribiste:1.- ¿Qué hace lo siguiente?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
( keys %{ $result } )
$result->{ $resp }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La función keys() devuelve las claves del hash referenciado por la variable $result.

$result->{ $resp } devuelve el valor correspondiente a la clave $resp, de un hash referenciado por $result.
Ramiro_xp escribiste:2.- ¿Cómo puedo hacer para que el valor en Hex me lo deje como 0010E782A15F y no en 0x0010e782a15f, ya que si cambio en printf() el %s por %X solo me arroja 0.

No puedes aplicar printf() a todo el resultado que devuelve $result->{ $resp }, porque está devolviendo toda la línea que ves.

Lo que sí puedes hacer es lo que te propone rnstux: una expresión regular. El código del bucle te quedaría así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my $resp ( oid_lex_sort ( keys %{ $result } ) ) {
  2.     my $linea = $result->{ $resp };
  3.     $linea =~ s/0x//;               # quitamos el '0x'
  4.    printf("resultado $resp %s\n", $linea);
  5. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 49 invitados