• Publicidad

IO::Socket::INET Ayuda

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

IO::Socket::INET Ayuda

Notapor novatito » 2006-03-08 01:52 @119

Que tal? soy nuevo en el mundo de perl y me surgio un problema haciendo un script para que lea un archivo de ips y verifique si tiene un puerto X abierto, es una especie de scanner, que al crear el socket "$sock = IO::Socket::INET->new(PeerAddr => "$IP[$a]" , PeerPort => 80, Proto => "tcp", Timeout => 1)" y ponerle un || $a++; para que vaya incrementado tengo un problema al llegar a una ip cuyo puerto esta cerrado y me devuelve connection refused el script se queda trabado en esa ip y no puedo hacer mas nada, alguien por favor me podria decir un metodo para chequear que una ip X al tener el puerto completamente cerrado la pase de largo y siga con las demas ya que el || $a++; no funciona con ese tipo de casos, realmente busque en todos lados y no encontre nada de gran ayuda.

Gracias de antemano.
novatito
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-03-08 01:32 @106

Publicidad

Re: IO::Socket::INET Ayuda

Notapor explorer » 2006-03-08 13:12 @592

Hecha un vistazo a este código.
Código: Seleccionar todo
foreach (; $port<=$maxport; $port++)
{
        $socket= new IO::Socket::INET (
                PeerAddr=>"$target:$port",
                Proto=>'tcp',
                Timeout=>'1' ); # Timeout.

        if ($socket) {  # Port listening.
                $openport++;
                print "\tPort $port ";
                # ...
       }
}
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor novatito » 2006-03-08 18:44 @822

Ok, explorer, muchas gracias. Voy a echarle un vistazo.
novatito
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-03-08 01:32 @106

Notapor novatito » 2006-03-08 19:46 @865

humm... funcionó pero ahora tengo otro problema: resulta que cuando entro a un servidor que tiene el puerto 80 abierto y telneteo y hago un GET y no obtengo respuesta alguna. Se traba el script en esa IP y no puedo hacer que cierre la conexión y siga con la IP siguiente. ¿Alguna idea?
novatito
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-03-08 01:32 @106

Notapor Perl user » 2006-03-09 02:28 @145

explorer escribiste:Hecha un vistazo a este código.
Código: Seleccionar todo
foreach (; $port<=$maxport; $port++)
{
        $socket= new IO::Socket::INET (
                PeerAddr=>"$target:$port",
                Proto=>'tcp',
                Timeout=>'1' ); # Timeout.

        if ($socket) {  # Port listening.
                $openport++;
                print "\tPort $port ";
                # ...
       }
}


Supongo que el código no es tuyo, y lo pusiste con fines de ejemplificar, sin embargo está feamente escrito y con muy muy malas prácticas, en lo personal no lo recomendaría.

Sin embargo volviendo al problema principal, si tus necesidades son "pequeñas" y rápidas en cuanto al port scanner que quieres, haciendo un telnet a X puerto con Net::Telnet funcionaría. Si tus necesidades son mas "específicas" en cuanto a que tan verídicos quieres los resultados, te recomiendo echarle un vistazo a Nmap::Scanner ( requiere de nmap ).

Escribir el port scanner a mano no está mal, simplemente ya hay herramientas que te permiten hacerlo de manera aun mas sencilla, si no se adaptan a lo que requieres entonces adelante, IO::Socket::INET o en su defecto Socket te dá la mano.

Para tu problema final, intenta estableciendo timeouts mas pequeños, para uqe la conexión la cierre en ese tiempo y puedas continuar.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Re: IO::Socket::INET Ayuda

Notapor explorer » 2006-03-09 13:46 @615

novatito escribiste:mm funciono pero ahora tengo otro problema resulta que cuando entro a un servidor que tiene el puerto 80 abierto y telneteo y hago un GET y no obtengo respuesta alguna se traba el script en esa ip y no puedo hacer que cierre la conexion y siga con la ip siguiente, alguna idea?
Para eso están los timeouts. Repasa la documentación del módulo que estás usando, en lo referente a timeout.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados