Mostrando las entradas con la etiqueta scriptperl. Mostrar todas las entradas
Mostrando las entradas con la etiqueta scriptperl. Mostrar todas las entradas

sábado, 20 de julio de 2013

Como usar MongoDB con Perl

Tutorial Perl MongoDB scripting


Como prometí en un comentario,aquí un tutorial de como usar MongoDB desde un script en Perl,el cual luego podemos usar en GUI,Diseño Web,etc en otra ocasión lo haré en python pero de momento en Perl.

Primero que nada se supone que ya debemos tener instalado MongoDB,si no es así consulta lo documentación o busca si ya esta en tu distribución de Linux(Si usas Linux):

Por ejemplo en Ubuntu/Debian:

aptitude search mongo

Gentoo:

emerge –search mongo
Y luego lo instalamos :

sudo apt-get install mongodb

etc


Bueno,también necesitamos el modulo MongoDB de Perl,así que lo instalamos desde CPAN:

En terminal:

sudo cpan install MongoDB


SI usan Windows,pueden instalar desde la GUI que traen las versiones de Perl,dependiendo cual usen,con el nombre MongoDB.

Ahora vamos a crear el script para Shell:

Con su editor favorito:

vim mongo.pl

Y metemos:

 #!/usr/bin/env perl # <-Hashbang  
   
 use MongoDB; # <- Modulo  
 use MongoDB::Database; <- Submodulo  
 use strict;  
   
 use warnings; # <- Para desarrollo  
   
 # Definimos algunas variable para conectarnos a la Base de Datos  
 # Como el nombre de la base de datos   
 # El puerto,etc  
   
 my $database = "test";  
   
 my $puerto = 27017;  
   
 my $host = "localhost";  
   
 # Iniciamos la conexion  
   
 $host = sprintf("%s:%s",$host,$puerto);  
   
 my $cliente = MongoDB::MongoClient->new("host" => $host );  
   
 # Nos conectamos a la base de datos  
   
 my $base_datos = $cliente->get_database( $database );  

Esa es la plantilla basica de conexion,ahora vamos a ver algunas cosas que se pueden hacer:

Listar las collections:

Para ello usamos un array

 my @collections = $base_datos->collection_names;  
   
 for (my $i = 0; $i < scalar(@collections); $i++)  
 {  
   print $collections[$i],"\n";  
 }  

Definir una collection:

 my $collections = {};  
   
 my @collections = $base_datos->collection_names;  
   
 for (my $i = 0; $i < scalar(@collections); $i++)  
 {  
   print $i,":",$collections[$i],"\n";  
 }  
   
 my $coll = {};  
   
 print "Elige una base de datos : ";  
   
 my $R_c = <STDIN>;  
   
 chop($R_c);  
   
 $coll->{$collections[$R_c]} = $base_datos->get_collection($collections[$R_c]);  



Eso se hace mas simple pero yo use una referencia para acceder a barias collections,ahora ya estamos en una collection adentro de la referencia:

$coll;

También podemos hacer algo mas simple manualmente como;

 my $coll = $base_datos->get_collection('collection');

Buscar un objeto:

Para buscar un objeto solo basta con asignar una variable al objeto,ya que solo es uno:

Pero aunque nos devuelva un solo valor covertira la variable a un hashref,ya que al usar formato estilo JSON debemos iterar sobre un valor de tipo diccionario,si usan,usaban MySQL no hay problema se hace lo mismo para recorrer los valores:

 my $object = $coll->{$collections[$R_c]}->find_one();  
   
 foreach my $keys(keys $object)  
  # Con un foreach basta  
 {  
   print $object->{$keys},"\n";  
 }  

Buscar todos los datos de una collection:

Si no queremos buscar uno y queremos ver todos los datos podemos usar un bucle foreach anidado en un while desde la funcion find del modulo MongoDB:

 my $all = $coll->{$collections[$R_c]}->find;  
   
 while (my $doc = $all->next) {  
   foreach my $keys (keys $doc)  
   {  
     print $doc->{$keys}," ";  
   }  
   print "\n";  
 }  

Insertar datos:

Para insertar datos debemos estar en la collection,así que el código iría debajo del anterior o en vez:

 $coll->{$collections[$R_c]}->insert({  
     "_id" => 2,  
     "value" => "Hola Mundo desde Perl y MongoDB"  
   });  


Les dejo un script con todo lo que hicimos:

Enlace

Bueno y eso es lo básico,conexión,consulta y insertar,para mas información visiten el tutorial de CPAN:

http://search.cpan.org/~friedo/MongoDB-0.701.4/lib/MongoDB/Tutorial.pod
Leer más...

jueves, 10 de enero de 2013

Simpleperlbrowser 4.5

Bien,le hice otra pequeña actualización al programa de una vez,ya que voy ha estar ocupado los próximos días,no es una versión completa,ya que puede que haga 4.5.1,4.5.2,etc para corregir errores de esta,asi que lo que le he añadido es lo siguiente:

1.Cambie algunas cosas de la interfaz para que se vea mejor:

4.5:


4.antes

2.También añadí los conocidos accel's

Que son lo que se conoce como

ctrl+o = abrir

ctrl+s = salvar

ect

(Ya estaban listos en el código anterior pero no los había activado)

Porque?

Porque había tenido un problema con los botones de mi pc y otras cuestiones,pero bueno ya están añadidos,o mejor dicho activados.

Y en otra pequeña versión añadiré los tooltips,que son lo que se muestra al pasar el puntero sobre alguna herramienta del programa,como por ejemplo lo que se muestra en el sidebar de la derecha de Tiempo de Tux en la foto de perl,python,etc(si están leyendo la versión web de itimetux).


3. Corregí un error que al estar cargando una url/pagina,no podíamos usar el entry hasta que terminara,ya corregido.

4. Agregue configuración de motores de búsqueda,por defecto duckduckgo y otras cosas:

Versión 4.antes


Versión 4.5



(Esto buscara lo que indiques, en donde la entry )



Eso es todo,le deje un icon.xpm de duckduckgo,pero añádanle otro(ya que necesita uno de mayor calidad)

Bien,como he dicho es un ejemplo,que servirá para comprender un poco la programación Perl/Gtk3 ademas de que como navegador es muy bueno(para cosas sencillas),ya que no quiero competir con los grandes navegadores,seria absurdo,de momento quiero competir con los minimalistas :P.

No,ya mas en serio espero que en la versión 5,ya tenga multipestañas y funciones de la API de webkit,y en la 6 gestor de descargas,ya que estoy trabajando en los algoritmos necesarios,solo que se lleva su tiempo y no voy a tener mucho en los próximos días/semanas, también por eso el nombre de Tiempo de Tux:

Darse tiempo para usar Linux,para aprender Linux

Como por ejemplo,tengo tiempo libre es tiempo de tux :D

Ademas de muchas otras cosas,por el cual tiene este nombre el sitio.

Como usar:



Instalamos los módulos necesarios:

En terminal:

 su

 cpan

 install Gtk3

 install JSON


 install Gtk3::WebKit

Ahora creamos un archivo de texto con extensión .pl y metemos el código fuente:

Enlace


Ahora creamos la configuración JSON

Creamos un archivo de texto con extensión .json y metemos el código:

Enlace


Ahora abrimos con la terminal el script:

 chmod +x perlbrowser.pl

y

 ./perlbrowser.pl

Y listo:


Y aquí el compilado listo para usarse


 Enlace
Leer más...

martes, 1 de enero de 2013

Tutorial sub rutinas Perl

Este es el primer tutorial del año y comenzamos fuerte :P

En esta ocacion vamos a ver algo mas avanzado en Perl, que son las sub rutinas o funciones como son llamadas en otros lenguajes de programación no se si en concreto sea lo mismo que una función de otros lenguajes de programación ya que les llaman funciones,por ejemplo:

en python:

def mi_funcion():
     comandos

O en javascript:

var mi_funcion = function(){
      comandos
}

O bash:

function mi_funcion() {
comandos
}

Pero da los mismos resultados y podemos hacer funciones re-cursivas :D

Definición:

Vamos a comenzar,primero que nada las sub rutinas se definen con el parámetro sub y debe seguir por el nombre de la sub rutina y sus comandos encerrados en {}

Ejemplo:

sub hola {
print "Hola :D";
}

Esa es la forma de definición

Llamado:

Estas sub  rutinas, no son usadas hasta que las llamemos,queda aclarar que aunque no las llamemos deben estar bien definidas y con buena sintaxis,ya que perl lee todo el código antes de ejecutarlo y aunque no lo llamemos perl lo vera y no podremos ejecutar el programa hasta que este bien hecho,aunque en el mismo no usemos dicha sub rutina.

La forma de llamar nuestra sub rutina es la siguiente(hay varias):

Nota:Mas adelante hablare de parametros.

Sin parámetros:
&mi_sub_rutina;
Con parametros; pero sin ellos:

mi_sub_rutina();
Con parametros:

&mi_sub_rutina(parametro1,parametro2);

Esas son las maneras en las cuales podemos llamar nuestra funcion/sub rutina.

Parametros: 

Los parámetros son argumentos que toma nuestra función al igual que en otro lenguaje de programación solo que aquí no es tan sencillo,con por ejemplo en javascript,tenemos que pasarle el valor de los argumentos a la subrutina y devolverlos con lo que hagamos en la sub rutina:

Ejemplo 1:

Sin argumentos:

#!/usr/bin/env perl

use warnings;
use strict;

&hola; # Como ven las rutinas van abajo


sub hola {

print "Hola :D";
}


Algoritmo:

Imaginemos que tenemos que comprar un iphone,cada cierto tiempo :P y este sube de precio para saber cuanto dinero hemos dado a apple gastado ,lo que tenemos que hacer es poner el precio y el año,como sabemos podemos usar varios print, o podemos usar una función pero necesitamos pasarle los parametros:

Para eso usamos este comando @_ en una definicion de cada variable:

Esto lo podemos hacer dual de una vez:

my ($año,$costo) = @_;

Esto va dentro de la sub rutina y es lo que pide los parametros:


sub iph {

my ($año,$costo) = @_;

print "Tiempo: $año Costo: $costo\n"; 
        
       # ^ vamos a imprimir las variables
}


Y adivinen donde va a ir el año y el costo:


&iph("2007","300");

Y así queda nuestro script:



#!/usr/bin/env perl

use warnings;
use strict;



&iph("2007","300"); # Los costos son un ejemplo
&iph("2008","310"); # No reales
&iph("2009","320");
&iph("2010","330");


# ^ Llamaos la rutina las veces que queramos con nuevo valor

sub iph {

my ($año,$costo) = @_;

print "Tiempo: $año Costo: $costo\n"; 
        
       # ^ vamos a imprimir las variables
}


Ese no es todo el poder de las sub rutinas,ya que las subrutinas son fundamentales en la programación perl,pero es lo que se puede enseñar,lo demás son solo soluciones a lo que necesiten,por ejemplo en el mundo del pentest se usa mucho perl y en esto va las sub rutinas:

Hice un script de cracking brute force(fake) para que vean la estructura que se usa en perl para usar lo que serian exploits, esto si usáramos módulos reales y hiciéramos unos ajustes al código que les voy a dejar:

Bueno eso es todo:

Enlace

O pueden ver el navegador web que estoy haciendo,usa sub rutinas un poco mas avanzadas

Versión 4.1 no terminada:

Enlace



Feliz 2013


Leer más...

miércoles, 5 de diciembre de 2012

Simpleperlbrowser 4 (navegador web en Perl) actualizado

Bueno,como he venido actualizando este pequeño navegador basado en webkit escrito en perl,lo he actualizado de nuevo :D



La verdad es que me gusta actualizar mis projectos y ponerle nuevas cosas,aunque sean pequeños,bueno como saben este navegador a tenido tres versiones, y esta es la cuarta,lo que pasa es que he ido añadiendo algoritmos/funciones que hagan que sea cada vez mas usable ,por ejemplo demos un repaso a las versiones anteriores.

SimplePerlBrowser1: Definíamos la url desde consola y solo podíamos visitar esa pagina




SimplePerlBrowser2: Añadí un  box para que puedan ingresar la url desde el programa ya en si.

También añadí un botón de salida,no muy eficaz porque se puede salir con la X,pero lo añadí.

También un botón de retroceso y uno de adelanto.



SimplePerBrowser3: 


1.Algoritmo de búsqueda:

He añadido un algoritmo que se da cuenta si es una url,si es una url pero sin http,se la añade,si tiene http la carga normalmente,pero si no es una url busca lo que escribas en google.


2.Etiqueta de carga:

He redirigido el estado de carga de Webkit,para que se muestre en una etiqueta y sepamos cuanto ha cargado y falta por cargar.

3.Botón de recargar:

Añadí un botón que recarga la pagina web actual que estemos viendo,por si no se cargo bien,etc.

3. Botón de detención:

También un botón para detener la carga de la pagina,por si no la quieres cargar en el ultimo momento.

4. Icono de búsqueda y salida:

Todas las ordenes ahora tienen iconos,y el de buscar y salir ya no son texto ahora se ven mas amigable.

5.Botones de zoom:

Haci es,he añadido dos botones uno para zoom in y otro para zoom out,esto hará que veas mejor la pagina que este visualizando

 Titulo en la ventana:

He implementado otro algoritmo que recoge la información de la ventana actual y la coloca como titulo de la ventana,como le hacen los navegadores web de alto nivel

SimplePerBrowser4:

1:Ahora el bar esta arriba

2.Añade la url de la pagina en la que estamos al entry,en vez de quedarse en blanco

3.Botones de carga y detención unificados :D

Esto fue lo que mas me quebro la cabeza,ya que lo que hace es detectar si ya cargo al 100% la pagina y si es así cambia el botón para que recargue o si no es así,lo podemos detener con la función de ese botón,mas que nada el algoritmo que detectaba esto,porque como lo vimos antes ya habia hablado del boton Notebook,que es el que use en esta ocasion.

Asi que como no sabia como hacer esto le pregunte a @Daniela  y me sugirió que usara un bucle,el cual espero que lo haya implementado bien XD:


for ( $ctitulo < 100 ) {
   my $ctitul = sprintf ("%2d%%", 100 * $carga);
   $ctitulo = chop($ctitul);
   $label->set_markup("$ctitul%");   
   if ($ctitul == 100) {
   $botones->set_current_page(0); 
}
}

Así que gracias :D

Bueno solo eso añadí pero bueno,vamos a ver que mas le pongo en el futuro,ya que si se me dificulto el algoritmo que detecta la carga de la web,no quiero ver como se me va a dificultar para implementar multipestañas.

Tambien cambie google,por DuckDuckGo,aunque el (entry aun esta configurado para google) ya que un navegador en Perl mereze un buscador en Perl 



Cargando:


Termina de cargar:

Bueno aquí el código:

Enlace
Necesitan instalar Gtk3 y Webkit

En terminal

  su


  cpan


  install Gtk3

  install Gtk3::WebKit
Y lo ejecutan como un script

Eso es todo :D


Leer más...

viernes, 16 de noviembre de 2012

Manejo de archivos de texto con Perl

Algunas veces necesitamos abrir archivos con perl desde Unix o sistemas Windows,mas que nada yo en Unix,y esto lo podemos hacer de muy buena manera usando el comando open y un filehandle, después de ahí ya podremos partir para lo que queramos usarlo.

En perl podemos hacer las cosas de muchas maneras y les voy a mostrar algunas funcionalidades que le podemos dar a open.

Primero que nada esta es la sintaxis que se usa:

open(filehandle, "Archivo" )

Que es filehandle???

Indicador exclusivo asignado a un fichero que permite dirigirse hacia él

Osea que le vamos a dar un indicador a nuestro archivo para poder usarlo en el script


Bien vamos a inicar con los ejemplos

Abran una terminal

Y escriban

echo "Esta es una prueba de perl hecha por tiempo de tux" >> tiemtux.txt
Eso que hicimos fue crear un archivo llamado tiemtux.txt y que contiene:

Esta es una prueba de perl hecha por tiempo de tux
Ahora creamos un script en perl para abrir el archivo


vim abrir-prueba.pl
Y escribimos

#!/usr/bin/env perl


use strict;
use warnings;
use utf8;

open (PRUEBA, "tiemtux.txt");

while (<PRUEBA>) {

chomp;

print "$_\n";

}

Después ejecuten

perl abrir-prueba.pl

y vean el resultado




Lo explico:

#!/usr/bin/env perl

Es el hashbang o shebang

use strict;        use warnings;  use utf8;         

Esto mas que nada es para realizar una buena programación, sin fallo alguno

open (PRUEBA, "tiemtux.txt");

open es el comando que abre el archivo

PRUEBA es el filehandle que le pasamos al archivo(debe ir con mayúscula)

tiemtux.txt es el archivo que vamos a abrir

while (<PRUEBA>) {

Es un bucle que leerá todo el archivo,de principio a fin

chomp;

Este comando limpia la lectura,parecido a chop

print "$_\n";

Imprime el valor del ciclo que a tomado,que es la ultima entrada,osea el archivo en si.

}

Todo lo que empieza tiene que acabar y este símbolo cierra el bucle a igual que lo abre el que esta en el bucle.

Y así se abren los archivos

Vamos a hacer algo mas interesante

Vamos a vitaminar el scirpt :D

Editamos nuestro script que quede así:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

if ($ARGV[0]) {

open (PRUEBA, $ARGV[0]) || die "$!\n";

while (<PRUEBA>) {

chomp;

print "$_\n";

                 }
}

else {
print "\n[+] Sintax : $0 <archivo>\n";
}



Como les he dicho Unix funciona con distintos lenguajes de programacion y perl no es la diferencia

Por ejemplo alien,si alien el programa para manejo de paquetes es un script mutante en perl

Ver paquete
Y no hay mucha sertesa de cuantos programas de unix usan perl para funcionar,por ejemplo el script que les deje arriba seria el equivalente de cat

Ya que se dice que cat,si cat el comando para concatenar en los sistemas tipo Unix usa este algoritmo

while(<>){print}
Que lo use en el script de arriba,pues bien vamos a hacer un clon de cat

No se ciertamente si es un clon, porque si queremos ver cat esta ofuscado y nos sale algo como esto



Y tampoco he visto el código fuente,pero debe ser algo muy grande,el clon que vamos a realizar es solo para lo que se usa mas,que es para husmear en archivos de texto.

Bueno vamos a empezar

Primero necesitamos que nuestro script abrir-prueba.pl este así:



Pueden remplazar $0 por catp: así


#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

if ($ARGV[0]) {

open (PRUEBA, $ARGV[0]) || die "$!\n";

while (<PRUEBA>) {

chomp;

print "$_\n";

                 }
}

else {
print "\n[+] Sintax : catp <archivo>\n";
}



Ahora lo copiamos a /usr/bin/


sudo cp abrir-prueba.pl /usr/bin/catp
Ahora le damos permisos de ejecución


sudo chmod +x /usr/bin/catp
Y listo ya tenemos catp(cat perl) en nuestro directorio de programas,ahora ejecuten:

Ahora si cualquier archivo de texto que quieran:

con la sintaxis

catp archivo_texto

Por ejemplo 

Con cat:



Con catp:


Identico?

En este caso si,ya que como dije cat tiene una enorme potencia y
muchas otras funciones,pero si se dan cuenta también sirven los pipes:



Bueno eso es todo,si ya saben usar join,split,etc sabrán que se pueden hacer muchasssssss cosas con perl,pero si no es asi esperen próximos tutoriales.

A y me falto explicar el codigo:



#!/usr/bin/env perl

use strict;        #
use warnings; # Buena programación
use utf8;          #

if ($ARGV[0]) { # Verificamos si existe ARGV,(ya lo habíamos visto)

open (PRUEBA, $ARGV[0]) || die "$!\n"; # Abre el archivo,que sera   # ARGV[0],y si no lo puede abrir ira a la función die

while (<PRUEBA>) { # Iniciamos bucle para que lo abra

chomp; # Limpiamos codigo

print "$_\n"; # Imprimimos el texto

                 }
} # Todas las llaves son para abrir y cerrar, así que llevan               # compañero,analizar el código para saber cual es de cual

else {
print "\n[+] Sintax : catp <archivo>\n"; # Si no hay ARGV imprime   # esto
}




Leer más...

martes, 13 de noviembre de 2012

Tutorial perl desde Unix variables hash

Vamos a ver otro tipo de variable en nuestro lenguaje que estamos viendo estos días,perl mi lenguaje interpretado favorito,en este caso veremos nos concentraremos en los hashes ya que como he dicho exsiten ditintos tipos de variables en Perl.


Que son los hashes?




Los hashes o también llamados hash como se describe %hash son variables de arreglo asociativo,esto quiere decir que asocia los valores que se encuentren dentro del hash con un valor y salida y retorna la salida

Si han visto los ejemplos de programas que he escrito en perl abran visto esto:

valor => salida
Pues asi es como se define un has

my %hash (

'valor' => 'salida'

) ;

Como pueden ver es una variable muy propia de perl que no es muy vista en otros lenguajes de programación

Y se llama de esta forma

my $variable = $hash{'valor'};

Ahora vamos a ver un ejemplo de script para que entiendan un poco mejor:


#!/usr/bin/env perl 

use strict;
use warnings;
use utf8;

# (Los sistemas que uso yo)

my %sistemas = (
'Ubuntu' => 'Linux',
'iOS' => 'Darwin',
'FreeBSD' => 'FreeBSD'
);

my $OSmobile = $sistemas{'iOS'};
my $OSdesktop = $sistemas{'FreeBSD'};
my $OSnetbook = $sistemas{'Ubuntu'};

print "\nLos nucleos de los sistemas operativos que uso son $OSmobile, $OSdesktop y $OSnetbook\n\n"


Usando While

Si queremos recorrer todos los valores de nuestro %hash con el sentido (valor,salida) para poder ver ambos al mismo tiempo podemos usar each que nos hace posible hacer esto.

Veamos un ejemplo



#!/usr/bin/env perl 

#===============================================

use strict;
use warnings;
use utf8;

my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
'Gentoo' => 'Linux',
);

while ( my ($sitem, $nucleo) = each(%sistemas)) {
   print "Sistema: " . $sitem . " Nucleo: " . $nucleo . "\n";
    print "Basado en la salida del comando uname de Unix\n"

};

Y obtendrán esta salida:



Saber cuantos elementos tenemos en un hash


Como saber cuantos hash tengo:

Para eso se usa el comando keys con la sintaxis

.keys(%hash).
Dentro de un bucle

Veamos un ejemplo:


#!/usr/bin/env perl 

#===============================================

use strict;
use warnings;
use utf8;

my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
'Gentoo' => 'Linux',
);


 print "Tamaño del hash:  " . keys( %sistemas ) . "\n";


Y devolverá cuantos valores hay en el %hash

Usando for

De igual manera que con while podemos recorrer nuestro hash usando el bucle for,la sintaxis es un poco distinta pero si nos damos cuenta se obtiene el mismo resultado

Ejemplo:


#!/usr/bin/env perl 

#===============================================




use strict;
use warnings;
use utf8;

my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
      );

for my $key ( keys %sistemas ) {
my $nucleo = $sistemas{$key};
print "Sistema $key => Nucleo $nucleo\n"; 
};


Y se obtiene un resultado similar con for o mejor dicho keys que al usar while o mejor dicho each

Borrar elementos del hash

Al igual que agregar podemos borrar elementos que estén en nuestro hash,en esta ocasión borrar:

Para ello solo se usa el comando delete con la sintaxis:


delete( $hash{'elemento'});
Veamos un ejemplo:




#!/usr/bin/env perl 

#===============================================





use strict;
use warnings;
use utf8;

my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
);

print "Elementos en el hash:  " . keys( %sistemas ) . "\n";

for my $key ( keys %sistemas ) {
my $nucleo = $sistemas{$key};
print "Sistema $key => Nucleo $nucleo\n"; 
};

print "Borrando iOS...\n";

delete( $sistemas{'iOS'});

print "Ahora hay :  " . keys( %sistemas ) . " elementos en el hash\n";



Como pueden ver no es muy difícil el manejo de %hash en perl :D

Agregar elementos al hash

Al igual que borrar podemos agregar elementos que estén en nuestro hash,en esta ahora agreagar:

Solo basta usar esta sintaxis:

$hash{'valor'} = 'salida';
Que seria como poner adentro del hash

'valor' => 'salida'
Veamos un ejemplo

Agregue dos subrutinas y el comando sleep para que se vea mas amigable y no tenga que repetir los comandos,pero aquí a lo que tienen que darle atención es a lo que esta de rojo:

#!/usr/bin/env perl 

#===============================================

use strict;
use warnings;
use utf8;

my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
);
cargar();

visor();
sleep 1;

print "Agregando un nuevo sistema..\n";
sleep 2;

$sistemas{'Debian'} = 'Linux';

cargar();

visor();

sub visor {
for my $key ( keys %sistemas ) {
my $nucleo = $sistemas{$key};
print "Sistema $key => Nucleo $nucleo\n"; 
};
}

sub cargar {

print "Ahora hay :  " . keys( %sistemas ) . " elementos en el hash\n";
sleep 1;
print "Cargando...\n";
sleep 2;

}

Así de fácil y eficiente puede ser hash,hay muchas cosas mas que se pueden hacer con %hash pero yo solo quiero poner en la mesa lo mas básico ya que no he enseñado rutinas,abrir archivos,bucles,modulos,etc.

Espero que te sirva de algo este pequeño tutorial en el mundo de la programación Perl y claro desde Unix.

Leer más...

sábado, 10 de noviembre de 2012

Implementa ARGV en tus script's Perl Unix

Como han visto si son seguidores o lectores de Tiempo de Tux,de unas semanas para acá he estado enseñando un poco de lo que se puede hacer con Perl en sistemas tipo Unix,perl sirve para muchas cosas algunas de ellas son

Aplicaciones web con CGI

Rebotica(programación claro)

Pentest(exploits)

Programas(con interfaz Gtk,Qt,Tk,etc)

Y muchasssss cosas mas!!!

Así que perl esta al nivel de muchos otros lenguajes de programación :D

Bien,vamos a hablar un poco de ARGV

ARGV es un argumento que se le pasa a nuestro script,antes de ejecutarlo

Como que antes???

Esto mas que nada se ve en el mundo de los exploits,para ejemplo Slowloris

Enlace
La sintaxis que usa Slowloris es:

Por ejemplo

perl slowloris -dns www.itimetux.com
Y ha esto es a lo que me refiero

perl slowloris -dns parametro
incluso si han usado sistemas como Backtrack se darán cuenta que muchos de los programas que se usan en el se basan en la sintaxis

programa argumento
También mas que nada en Unix,pero también hay que tener en cuenta que también hay bastantes scripts en python,lua,bash,etc

En el caso de slowloris usa algo mas elegante ya que incluso se señala con -dns,pero ARGV es el principio básico de esto.


ARGV se define en parámetros, por ejemplo:

Primer parámetro:

$ARGV[0];


Primer parámetro:

$ARGV[1];

Y como es de costumbre, iniciando del cero hacia adelante

Ahora como implementarlo?

Vamos a hacer el clásico Hola Mundo con ARGV desde Teminal

Abran su editor de texto favorito y peguen esto

#!/usr/bin/env perl

use strict;

use utf8;

my $texto = $ARGV[0];

print "$texto\n";

Y ahora ejecuten el script así


perl script.pl HolaMundo
 También se puede así:


chmod +x  script.pl  


./script.pl 

Y obtendrán este resultado



Ese es un ejemplo del uso de ARGV

Para dos parámetros es igual solo hay que pensar un poco como acomodar nuestro script:

Por ejemplo



#!/usr/bin/env perl

use strict;

use utf8;

my $texto = $ARGV[0];

my $texto2 = $ARGV[1];

print "$texto $texto2";

Y ejecuten así

perl script.pl Hola Mundo



Esto se puede usar también
así

#!/usr/bin/env perl

use strict;

use utf8;

foreach (@ARGV) {
        print "$_\n";
}

De hecho como todo en perl se puede usar de muchísimas maneras ;)

Mas ejemplos

Yo mas que nada uso esto,para abrir archivos desde la linea de comandos,por ejemplo:

Abrir una imagen con el modulo Gtk3::Image desde linea de comandos

Es un ejemplo,esta programado muy simple,no vayas a cargar imágenes de mas de 1mb que se cae la interfaz gráfica, este es el script:

Enlace

Lo pueden mejorar ya que yo lo hice muy rapido y tiene bugs 

Leer más...

miércoles, 7 de noviembre de 2012

simple Perl browser 3 navegador web perl

Nuevamente le hice una "actualización" al navegador web que he venido demostrando de unos días para acá,si no han leído de que se trata esto,les explico:

Es un navegador web impulsado por Webkit con interfaz Gtk3 y escrito totalmente en Perl.

En la primera versión solo era una pagina y teníamos que poner la url desde terminal,pero solo pidamos ver una pagina.

En la segunda versión añadí un textbox,para poder introducir la url desde la ventana y dos botones uno de regreso y uno de adelanto. También dos botones mas,uno de salir y uno de ir.

En esta versión he añadido mas cosas

1.Algoritmo de búsqueda:

He añadido un algoritmo que se da cuenta si es una url,si es una url pero sin http,se la añade,si tiene http la carga normalmente,pero si no es una url busca lo que escribas en google.


2.Etiqueta de carga:

He redirigido el estado de carga de Webkit,para que se muestre en una etiqueta y sepamos cuanto ha cargado y falta por cargar.

3.Botón de recargar:

Añadí un botón que recarga la pagina web actual que estemos viendo,por si no se cargo bien,etc.

3. Botón de detención:

También un botón para detener la carga de la pagina,por si no la quieres cargar en el ultimo momento.

4. Icono de búsqueda y salida:

Todas las ordenes ahora tienen iconos,y el de buscar y salir ya no son texto ahora se ven mas amigable.

5.Botones de zoom:

Hacia es,he añadido dos botones uno para zoom in y otro para zoom out,esto hará que veas mejor la pagina que este visualizando

 Titulo en la ventana:

He implementado otro algoritmo que recoge la información de la ventana actual y la coloca como titulo de la ventana,como le hacen los navegadores web de alto nivel

Eso es todo :D

Véanlo ustedes mismos :





El código:

Antes que nada necesitan Gtk3 y Gtk3::WebKit


Instala lo necesario

Nota:Si sabes usar cpan sigue los comandos de abajo,si no date una vuelta por el tutorial

 Enlace

Instalar

 su


 cpan


 install Gtk3

 install Gtk3::WebKit

Listo

Ahora si el código

Enlace
O pueden descargar todos las versiones en .tag.gz ya hechos archivos .pl

Enlace

Leer más...

Invertir texto con Perl en Unix Gtk3

Como dije y sigo diciendo mientras realice los tutoriales de perl, haré algunos programas o scripts para que vean el funcionamiento de perl en Unix y en este caso Gtk,recuerdan que hice un script para invertir texto usando la terminal

Enlace

Bueno, decidí crearle una GUI en Gtk3,para que vean un ejemplo de lo que aprendemos al principio,solo en la terminal lo podemos implementar en algo mas visible.

Sin GUI

Igual que el script pasado, no puede invertir mucho texto,solo palabras pero ya lo he preparado para que voltee un gran numero de palabras,ya que esta usando


use strict;
use warnings;
use diagnostics;

Y esto quiere decir que esta bien programado,y checa si hay peligro,de todas formas no intenten voltear mucho texto o se les cae la interfaz gráfica (por unos momentos)

Necesitan el modulo Gtk3

Lo instalan por CPAN

Tutorial

cpan


su


install Gtk3



Bueno aquí el código


Enlace

Para ejecutar:



1.Crea un documento de texto en blanco

2.Renombralo comoquieras.pl

3.Dale permisos de ejecución

4.Ejecuta

perl comoquieras.pl

 Eso es todo

Lo puedes modificar a tu gusto,que te diviertas :D

Leer más...