• Publicidad

Búsqueda de parámetros en un archivo

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

Re: Búsqueda de parámetros en un archivo

Notapor situ » 2013-01-05 22:35 @983

Voy a utilizar tu opción.

Quería hacerte otra consulta:

Si ahora, mediante mi regex, obtengo el array "@username", el cual ya tiene la lista de usuarios limpia, por lo cual no tendría que tener el bloque del código que va desde la línea 20 a la 25, ¿cómo debo modificar tu código para que me siga funcionando?

Saludos, espero que se entienda lo que consulto.
Última edición por situ el 2013-01-06 08:58 @415, editado 1 vez en total
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: Búsqueda de parámetros en un archivo

Notapor explorer » 2013-01-06 08:32 @397

Pues tienes dos opciones, a elegir:

1)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @usuarios_que_han_accedido = @username;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


2) Cambia todas las apariciones de @usuarios_que_han_accedido por @username en las líneas 25 a 35.
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

Re: Búsqueda de parámetros en un archivo

Notapor situ » 2013-01-06 09:07 @422

Perdón en tu código, donde estás manejando "hash".

Gracias.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Búsqueda de parámetros en un archivo

Notapor explorer » 2013-01-06 15:36 @692

En las líneas 20 a 24 traduzco el contenido de @username a hash, y a partir de ahí es lo que utilizo. Si tu @username solo contiene los nombres de los usuarios, entonces habría que dejarlo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my %usuarios_con_accesos;
  2. for my $usuario (@username) {
  3.     $usuarios_con_accesos{$usuario} = 1;          # recordamos los usuarios que han accedido
  4. }
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

Re: Búsqueda de parámetros en un archivo

Notapor situ » 2013-01-07 10:38 @485

Estoy teniendo un problema con la siguiente funcion, la cual se encarga de pasar a texto claro las password 7 de Cisco

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # función para obtener los password en texto plano del password 7
  2. sub descifrar {
  3.     foreach $epass (@epass) {
  4.  
  5.         if ( !( length($epass) & 1 ) ) {
  6.             $ep    = $epass;
  7.             $dpass = "";
  8.             ( $s, $e ) = ( $ep =~ /^(..)(.+)/ );
  9.             for ( $i = 0; $i < length($e); $i += 2 ) {
  10.                 $dpass .= sprintf "%c", hex( substr( $e, $i, 2 ) ) ^ $xlat[ $s++ ];
  11.             }
  12.         }
  13.     }
  14. }
  15.  
  16.  
  17.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Error en el Apache
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. [Mon Jan 07 12:52:22 2013] [error] [client 127.0.0.1] [Mon Jan  7 12:52:22 2013] script.cgi: Use of uninitialized value $epass in length at /var/www/script.cgi line 64, <INPUT> line 785., referer: http://127.0.0.12/config.cgi
  2.  
  3. [Mon Jan 07 12:52:22 2013] [error] [client 127.0.0.1] [Mon Jan  7 12:52:22 2013] script.cgi: Use of uninitialized value $ep in pattern match (m//) at /var/www/script.cgi line 67, <INPUT> line 785., referer: http://127.0.0.12/config.cgi
  4.  
  5. [Mon Jan 07 12:52:22 2013] [error] [client 127.0.0.1] [Mon Jan  7 12:52:22 2013] script.cgi: Use of uninitialized value $e in length at /var/www/script.cgi line 68, <INPUT> line 785., referer: http://127.0.0.12/config.cgi
  6.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El array "@epass" lo obtengo interpretando <INPUT>, de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
elsif (m/^(username.*)/) {
    push (@username,$1);
}
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Luego leo lo obtenido y lo interpreto para quedarme con dos campos.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach $username (@username) {
  2.     if ($username =~ m/^username\s(.*)\sprivilege.*password\s7\s(.*)/) {
  3.         push (@epass,$2);
  4.         descifrar();
  5.         print F "<tr><td>Usuario:$1= $2(<b>$dpass</b>)</td></tr>\n";
  6.     }
  7. }
  8.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema es que con algunos archivos anda bien y con otros no.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Búsqueda de parámetros en un archivo

Notapor explorer » 2013-01-07 11:46 @532

¿Qué quieres hacer en esta línea?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         if ( !( length($epass) & 1 ) ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El operador '&' es el 'and' a nivel binario.
Según lo que has escrito, el if() se activa cuando la longitud de $epass es par.
Me temo que no es eso lo que quieres hacer...

Los mensajes de error vienen de lo siguiente: alguno de los valores que almacena @epass es el valor 'undef' (indefinido), por lo que salta el error de la línea 64 (avisa de que $epass no está definido). Como la operación binaria que has puesto sí que se activa (porque resulta que la longitud de un valor no definido es lo mismo que un cero, y por lo tanto, par), se entra dentro del if(), y claro, fallan las operaciones siguientes (siguientes errores por estar las variables indefinidas).
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

Re: Búsqueda de parámetros en un archivo

Notapor situ » 2013-01-07 12:08 @547

Gracias por la respuesta, la función la obtuve buscando en Internet. Tenía la necesidad de tener en texto claro estas contraseñas, por eso la agregué.

¿Cómo podría hacer para solucionar eso? Según el código que compartí, para ti está bien el "foreach" que se encarga de obtener los dos valores (usuario,password 7).

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Búsqueda de parámetros en un archivo

Notapor explorer » 2013-01-07 13:02 @584

Pero es que no sabemos qué quieres hacer en la línea 64...

¿Se trata, simplemente, de saber si $epass contiene algo?

Si solo es eso, la solución es sencilla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         if ( length($epass) > 3 ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

He puesto '3', porque en la expresión regular se necesitan al menos 3 caracteres, para que funcione (tampoco sabemos cómo son los datos que estamos tratando).

¿No podrías poner un ejemplo de la entrada?

P.D.: he encontrado otro ejemplo de desempaquetado de las password 7 de Cisco.

P.P.D.: Vale, ya encontré el código original:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. # $Id: cisco.passwords.html 27902 2012-12-10 01:32:13Z fyodor $
  3. #
  4. # Credits for orginal code and description [email protected],
  5. # SPHiXe, .mudge et al. and for John Bashinski <[email protected]>
  6. # for Cisco IOS password encryption facts.
  7. #
  8. # Use for any malice or illegal purposes strictly prohibited!
  9. #
  10.  
  11. @xlat = ( 0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41,
  12.           0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c,
  13.           0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42 );
  14.  
  15. while (<>) {
  16.         if (/(password|md5)\s+7\s+([\da-f]+)/io) {
  17.             if (!(length($2) & 1)) {
  18.                 $ep = $2; $dp = "";
  19.                 ($s, $e) = ($2 =~ /^(..)(.+)/o);
  20.                 for ($i = 0; $i < length($e); $i+=2) {
  21.                     $dp .= sprintf "%c",hex(substr($e,$i,2))^$xlat[$s++];
  22.                 }
  23.                 s/7\s+$ep/$dp/;
  24.             }
  25.         }
  26.         print;
  27. }
  28. # eof
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Ahí sí que está bien puesto el if(), porque está comprobando si es par la cadena que ha capturado en la expresión regular anterior, que es bastante fuerte, y solo se queda con la cadena hexadecimal que sigue al '7'.

Entonces, en tu código: no vemos cómo extraer las contraseñas, pero supongo que será algo parecido. Si te salen errores es porque hay algún valor 'undef' demás en el array. Lo puedes obviar con un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         if ( defined $epass ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y asumimos que en el array has capturado bien todas las contraseñas.
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

Re: Búsqueda de parámetros en un archivo

Notapor situ » 2013-02-08 20:04 @878

situ escribiste:Los molesto para pedirles ayuda, ya que no puedo resolver lo siguiente:

Mediante regex obtengo la siguiente línea, la cual es almacenada en el array "@username".
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. username mi_usuario acceso 1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Ahora lo que necesito es realizar algunas comparaciones, contra mi array "@busername", ya que ésta contiene la lista de usuarios que yo necesito que estén presentes.

El primer "foreach" anda perfecto, ya que me dice qué usuario de los que obtuve mediante regex no se encuentra dentro del array "@busername".

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach $username (@username) {
  2.     if ( $username =~ m/^username\s(.*)\sacceso/ ) {
  3.  
  4.         if ( $1 ~~ @busername ) {
  5.         }
  6.         else {
  7.             print F "<tr><td>Usuario= $1 -> MAL</td></tr>\n";
  8.         }
  9.     }
  10. }
  11.  
  12. # Este segundo bloque no me funciona.
  13.  
  14. foreach $username1 (@busername) {
  15.     foreach $username (@username) {
  16.         if ( $username =~ m/^username\s(.*)\sacceso/ ) {
  17.  
  18.             if ( $username1 ~~ $1 ) {
  19.             }
  20.             else {
  21.                 print F "<tr><td>Usuario= $username1 -> NO SE ENCUENTRA CONFIGURADO</td></tr>\n";
  22.             }
  23.         }
  24.     }
  25. }
  26.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Alguien me puede ayudar a re-armar este bloque de código? Se que el código no es muy bueno pero es lo que pude armar desde lo poco que sé de Perl.

Saludos.

Estoy tratando de hacer un gráfico. Para esto agregué un contador luego de cada línea donde informa qué está mal. Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print F "<tr><td>Usuario= $1 -> MAL</td></tr>\n";
  2. $cont_usuario++;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema que tengo es que esta comprobación del usuario es ejecutada sobre muchos archivos, y yo necesito que el contador sea el total de todos los archivos. Así como lo tengo ahora, se queda con la cantidad del último archivo, no más.

Abro los archivos así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while (my $file = readdir(DIR)) {
  2.     next if not -f $file;             # saltar al siguiente si no es un archivo normal
  3.     open(INPUT, $file) or die "ERROR: No puedo abrir $file: $!\n";
  4.     while (my $linea = <INPUT>)
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Búsqueda de parámetros en un archivo

Notapor explorer » 2013-02-08 20:23 @891

Si sólo se queda con la cifra del último archivo, es que a lo mejor pones a cero la variable, unos momentos antes. Poco se puede decir, sin ver más.

Y ten cuidado con el '>'. Debes poner '&gt;'. Es HTML, recuerda.
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

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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