elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11
91  Programación / Scripting / Re: problema con switch en perl en: 16 Junio 2014, 03:57 am
Ya que estás aprendiendo Perl, te recomiendo que no uses el módulo Switch.

Siempre ha tenido errores. En estos momentos, marca que sólo tiene 4 errores denunciados, pero seguro que tiene más.

Fíjate lo que dice en su descripción:

Switch - A switch statement for Perl, do not use if you can use given/when

"No lo uses si puedes usar given/when".

given/when forma parte de los nuevos intérpretes de Perl, desde la versión v5.10. Para hacer uso de él (si tienes un Perl moderno), te vale con poner al principio del programa

use v5.10;

o también

use feature 'switch';

(Tienes más información sobre esto en perldoc perlsyn. Busca por la sección Switch statements)


La comparación de caracteres, efectivamente se hace con 'eq', pero... no te funciona porque en la línea 59, al leer desde el teclado, estás incluyendo el carácter de nueva línea (cuando el usuario pulsa la tecla de Entrar o Retorno).

Antes de hacer la comparación, debes asegurarte de que has eliminado esos caracteres, y sólo te quedas con la opción que el usuario ha elegido. Para ello, usa la función chomp(). Quedaría así:

Código
  1. $opcion = <stdin>;
  2.                                 chomp $opcion; # quitar caracteres de nueva línea

92  Programación / Scripting / Re: [PERL]script corrompe archivo en: 23 Junio 2013, 14:34 pm
Los caracteres '0D' podrían ser los caracteres de Retorno de carro, en el sistema operativo Windows, o Nueva línea, en los Mac OS.

El programa hace una copia literal del archivo, así que los caracteres '0D' deberías verles también en el archivo original.

Si solo quieres eliminar los caracteres '0D', lo que puedes hacer es filtrarles:

Código
  1. $file_contents =~ s/\0x0D//g;

Pero lo mejor sería saber el formato del archivo de origen, para hacer una conversión más correcta.

Saludos desde Perl en Español.
93  Programación / Scripting / Re: ayuda con un intento de bruteforce en PERL en: 4 Septiembre 2012, 21:55 pm
¡Ah!, quizás el problema sea

if($fondo ne "Login failed"){


Es casi seguro que $fondo contengo algo más que "Login failed".

Quizás con una expresión regular...

Código
  1. if ($fondo !~  /Login failed/) {

Otro detalle: mueve el $i++ a la primera parte del if(), no al else{}.
94  Programación / Scripting / Re: ayuda con un intento de bruteforce en PERL en: 3 Septiembre 2012, 11:37 am
Después del $i++; pon un

last;
95  Programación / Scripting / Re: [Perl] Buscador de sueños 0.1 en: 4 Abril 2012, 22:13 pm
¡Buen aporte!

Esta es otra versión, un poco más corta...

Código
  1. #!/usr/bin/perl
  2. use Mojo::UserAgent;         # Nuestro agente
  3. use utf8::all;               # Las salidas y entradas serán en utf-8
  4.  
  5. $ua = Mojo::UserAgent->new(name => 'Mozilla/5.0', request_timeout => 5);
  6.  
  7. print "\n\n-- == Buscador de sueños == --\n\n";
  8. print '[+] Palabra : '; $_ = <>; chomp;
  9.  
  10. print $ua->get("http://www.mis-suenos.org/interpretaciones/buscar?text=$_")->res->dom("li")->first->text;
  11.  
  12. print "\n\n(C) Doddy Hackman 2012\n\n"; <>;
  13.  
96  Seguridad Informática / Wireless en Linux / Re: generador claves en perl en: 28 Marzo 2012, 01:44 am
El segundo código, si solo consiste en recorrer los valores numéricos entre 00000 y el 99999, vale ponerlo como
Código
  1. #!/usr/bin/perl
  2. open my $FILEHANDLE, ">>", "wpakey-jazztel.txt"  or  die 'cannot open file!';
  3.  
  4. for my $WAP_KEY ( "00000" .. "99999" ) {
  5.    print $FILEHANDLE $WAP_KEY , "\n";
  6. }
  7.  
  8. close $FILEHANDLE;
Además, dejamos fuera del bucle las sentencias open() y close(), por lo que se ejecutará mucho más rápido.

En el primer código hay un error: falta la 'P'. Y es demasiado largo para lo que se quiere hacer.

Esta es una versión un poco más corta:
Código
  1. #!/usr/bin/perl
  2. use Modern::Perl '2012';
  3. use autodie;
  4. use Algorithm::Combinatorics 'variations_with_repetition';
  5.  
  6. my @data = ( 'A' .. 'Z', '0' .. '9');
  7.  
  8. my $iterador = variations_with_repetition(\@data, 16);
  9.  
  10. open $fh, '>', 'fichero_wpakey.txt';
  11.  
  12. while (my $v = $iterador->next) {
  13.    say $fh @{$v};
  14. }
  15.  
  16. close $fh;
  17.  
P.D.: El fichero resultante es realmente grande... 36^16 = 7,95866111 × 1024. Ocho cuatrillones de claves... Dudo mucho que se pueda generar un archivo de 135 yottabytes, en un ordenador casero...  ;D
97  Programación / Scripting / Re: Es dificil o imposible? en: 22 Marzo 2012, 00:21 am
Ahora estoy un poco dormido, pero creo que la solución es esta:
Código
  1. my $visto;
  2.  
  3. for my $a1 (1 .. 20) {
  4.    for my $a2 (1 .. 20) {
  5.        for my $a3 (1 .. 20) {
  6.            for my $a4 (1 .. 20) {
  7.  
  8.                my @ordenados = sort { $a <=> $b } $a1, $a2, $a3, $a4;
  9.  
  10.                # salimos si hay coincidencia
  11.                next if $ordenados[0] == $ordenados[1]
  12.                     or $ordenados[0] == $ordenados[2]
  13.                     or $ordenados[0] == $ordenados[3]
  14.                     or $ordenados[1] == $ordenados[2]
  15.                     or $ordenados[1] == $ordenados[3]
  16.                     or $ordenados[2] == $ordenados[3]
  17.                ;
  18.  
  19.                # salimos si hay coincidencia por pares
  20.                next if $visto{"$ordenados[0]-$ordenados[1]"}
  21.                     or $visto{"$ordenados[0]-$ordenados[2]"}
  22.                     or $visto{"$ordenados[0]-$ordenados[3]"}
  23.                     or $visto{"$ordenados[1]-$ordenados[2]"}
  24.                     or $visto{"$ordenados[1]-$ordenados[3]"}
  25.                     or $visto{"$ordenados[2]-$ordenados[3]"}
  26.                ;
  27.  
  28.                # recordamos todos los pares nuevos
  29.                $visto{"$ordenados[0]-$ordenados[1]"} =
  30.                $visto{"$ordenados[0]-$ordenados[2]"} =
  31.                $visto{"$ordenados[0]-$ordenados[3]"} =
  32.                $visto{"$ordenados[1]-$ordenados[2]"} =
  33.                $visto{"$ordenados[1]-$ordenados[3]"} =
  34.                $visto{"$ordenados[2]-$ordenados[3]"} = 1;
  35.  
  36.                # Impresión
  37.                print "[", join('-', @ordenados), "]\n";
  38.            }
  39.        }
  40.    }
  41. }
La salida es algo corta:
[1-2-3-4]
[1-5-6-7]
[1-8-9-10]
[1-11-12-13]
[1-14-15-16]
[1-17-18-19]
[2-5-8-11]
[2-6-9-12]
[2-7-10-13]
[2-14-17-20]
[3-5-9-13]
[3-6-8-14]
[3-7-11-15]
[3-10-12-16]
[4-5-10-14]
[4-6-11-16]
[4-7-8-12]
[4-9-15-17]
[4-13-18-20]
[5-12-15-18]
[5-16-19-20]
[6-10-15-19]
[7-9-14-18]
[8-13-16-17]


Curiosamente, el alumno 1 nunca estará con el número 20. ¿Por qué?
Supongamos que queremos la combinación [1-a-b-20]. ¿Qué valores serían a o b?. Pues cualquiera entre 2 y 19... pero eso no es posible, porque todos los números entre 2 y 19 ya han salido con el 1 antes (mirar las 6 primeras combinaciones). Y se cumpliría la condición de que el 1 ya se ha visto con cualquiera de esos números.

Me temo que esto no es lo que quieres...

Según las condiciones que has puesto, la segunda es la que limita la salida de todas las combinaciones: «tampoco me valdría otra donde volvieran a coincidir dos variables o más...». Como los grupos son de 4, eso quiere decir que habrá alumnos que estarán en más combinaciones (el 1, seis veces), pero otras, menos (el 20, tres veces) por la razón explicada antes.
98  Programación / Scripting / Re: Es dificil o imposible? en: 20 Marzo 2012, 18:47 pm
Ya que lo vas a ejecutar en Codepad, prueba esta versión:
Código
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my $alumnos = 20;                    # Número de alumnos
  6. my $grupos  = 4;                     # Tamaño de los grupos
  7.  
  8. my @alumnos = 1 .. $alumnos;
  9. my $n_grupo = 1;
  10.  
  11. while (@alumnos >= $grupos) {
  12.  
  13.    # Creamos un @nuevo_grupo compuesto de tantos alumnos como de grande
  14.    # sean los $grupos, elegidos al azar de los @alumnos restantes
  15.    my @nuevo_grupo = map { splice @alumnos, rand(@alumnos), 1 } 1 .. $grupos;
  16.  
  17.    print "Grupo $n_grupo: [@nuevo_grupo]\n";
  18.  
  19.    $n_grupo++;
  20. }
  21.  
  22. # Resto que ha quedado sin asignar
  23. if (@alumnos) {
  24.    print "Grupo $n_grupo: [@alumnos]\n";
  25. }
  26.  
99  Programación / Scripting / Re: Es dificil o imposible? en: 20 Marzo 2012, 17:45 pm
Ya está cambiado para los Perl antiguos.
100  Programación / Scripting / Re: Es dificil o imposible? en: 20 Marzo 2012, 16:47 pm
Esta es mi versión:

Código
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. print "Número de alumnos: ";
  6. my $alumnos = <>;
  7.  
  8. print "Tamaño de los grupos: ";
  9. my $grupos  = <>;
  10.  
  11. my @alumnos = 1 .. $alumnos;
  12. my $n_grupo = 1;
  13.  
  14. while (@alumnos >= $grupos) {
  15.  
  16.    # Creamos un @nuevo_grupo compuesto de tantos alumnos como de grande
  17.    # sean los $grupos, elegidos al azar de los @alumnos restantes
  18.    my @nuevo_grupo = map { splice @alumnos, rand(@alumnos), 1 } 1 .. $grupos;
  19.  
  20.    print "Grupo $n_grupo: [@nuevo_grupo]\n";
  21.  
  22.    $n_grupo++;
  23. }
  24.  
  25. # Resto que ha quedado sin asignar
  26. if (@alumnos) {
  27.    print "Grupo $n_grupo: [@alumnos]\n";
  28. }
  29.  
  30. __END__
  31. Número de alumnos: 23
  32. Tamaño de los grupos: 4
  33. Grupo 1: [23 1 3 7]
  34. Grupo 2: [14 20 13 22]
  35. Grupo 3: [15 8 10 6]
  36. Grupo 4: [4 12 18 11]
  37. Grupo 5: [21 17 5 2]
  38. Grupo 6: [9 16 19]
Páginas: 1 2 3 4 5 6 7 8 9 [10] 11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines