• Publicidad

Timeout en una conexión socket

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Timeout en una conexión socket

Notapor BigBear » 2010-04-28 18:49 @826

Hola.


Quería preguntar si alguien conoce alguna manera de conectarse a un puerto mediante sockets, lo que pasa es que solo quiero que lo verifique por 0.1 segundos para no estar esperando que el socket tarde en responder y así ver otros puertos.

¿Alguien me podría ayudar?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Timeout en una conexión socket

Notapor explorer » 2010-04-29 10:50 @493

¿Eso no es lo que hace el software nmap?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Timeout en una conexión socket

Notapor BigBear » 2010-04-29 16:04 @711

Sí, pero quiero hacer un simple escáner en Perl que vaya rápido usando el timeout a 0.5.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Timeout en una conexión socket

Notapor creating021 » 2010-04-29 16:40 @736

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $sock = IO::Socket::INET->new(
  2.     PeerAddr => 'localhost',
  3.     PeerPort => 80,
  4.     Proto    => 'tcp',
  5.     Timeout  => 0.5
  6. );
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Debería funcionar, o usando Socket (es decir, Socket.pm) y alert.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Timeout en una conexión socket

Notapor BigBear » 2010-04-29 17:16 @761

Gracias, creating021, pero mira este código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use IO::Socket;
  2.  
  3. $port = "0";
  4.  
  5. for (1..9999) {
  6. $port++;
  7.    
  8.  
  9.       my $sock = IO::Socket::INET->new(
  10.  
  11.           PeerAddr => 'localhost',
  12.  
  13.           PeerPort => $port,
  14.    
  15.           Proto    => 'tcp',
  16.  
  17.           Timeout  => 0.5
  18.  
  19.       );
  20.  
  21. if ($sock) { print "ok\n"; } else { print "mal\n";}
  22. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El escáner sigue igual de lento pasando de puerto en puerto a la misma velocidad.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Timeout en una conexión socket

Notapor explorer » 2010-04-29 17:30 @771

Con ese programa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use IO::Socket;
  3.  
  4. for $port (0..9999) {
  5.  
  6.     my $sock = IO::Socket::INET->new(
  7.  
  8.         PeerAddr => 'localhost',
  9.  
  10.         PeerPort => $port,
  11.  
  12.         Proto    => 'tcp',
  13.  
  14.         Timeout  => 0.5
  15.  
  16.     );
  17.  
  18.     if ($sock) { print "$port ok\n"; } # else { print "mal\n"; }
  19. }
  20.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

me tarda exactamente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
dv9210:~ # cat /proc/cpuinfo
processor       : 0          
vendor_id       : AuthenticAMD
cpu family      : 15          
model           : 104        
model name      : AMD Turion(tm) 64 X2 Mobile Technology TL-60
stepping        : 2                                          
cpu MHz         : 800.000                                    
cache size      : 512 KB                                      
physical id     : 0                                          
siblings        : 2                                          
core id         : 0                                          
cpu cores       : 2                                          
apicid          : 0                                          
initial apicid  : 0                                          
fpu             : yes                                        
fpu_exception   : yes                                        
cpuid level     : 1                                          
wp              : yes                                        
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch                                                                                                              
bogomips        : 1607.06                                                                                                
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc 100mhzsteps

processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 104
model name      : AMD Turion(tm) 64 X2 Mobile Technology TL-60
stepping        : 2
cpu MHz         : 800.000
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch
bogomips        : 1607.06
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc 100mhzsteps

dv9210:~ # uname -a
Linux dv9210 2.6.31.12-0.2-desktop #1 SMP PREEMPT 2010-03-16 21:25:39 +0100 x86_64 x86_64 x86_64 GNU/Linux
dv9210:~ # perl -v

This is perl, v5.10.0 built for x86_64-linux-thread-multi

Copyright 1987-2007, Larry Wall
...
dv9210:~ # time /home/explorer/Documentos/Desarrollo/code_21913.pl
25 ok
111 ok
631 ok
8010 ok

real    0m8.156s
user    0m4.012s
sys     0m1.184s
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

8 segundos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Timeout en una conexión socket

Notapor BigBear » 2010-04-29 19:17 @845

¿Cómo puede ser? A mi no tarda todo el código 8 segundos. Yo estoy usando un Windows. ¿Me podes explicar cómo puede ser eso?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Timeout en una conexión socket

Notapor explorer » 2010-04-30 03:20 @181

Hará unos tres años se descubrió que el Perl de ActiveState, para Windows, estaba horriblemente compilado, haciendo que un bucle tan sencillo como este
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for (1 .. 100_000) {
    $x .= (q[x] x 1_000);
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

(generar una cadena de cien millones de 'x', en bloques de mil), tardara 40 centésimas de segundo en un ordenador con Linux, mientras que en un ordenador, idéntico, con Windows, tardara 20 minutos.

Una de las razones fue el compilador usado, que gestionaba de forma fatal la memoria reservada. El jefe lo vio claro y mandamos a todos los Windows por la ventana (redundancia).

Como no uso Windows, no sé decirte si eso está arreglado o no, pero tampoco creo que sea la causa.

Sospecho que el verdadero responsable puede ser Windows, y quizás los permisos de tu usuario para poder acceder a los puertos. Y si tienes instalado el cortafuegos de Windows o o un antivirus con cortafuegos, pues más leña al fuego.

En las páginas de Microsoft puedes encontrar más pistas. Por ejemplo, en ésta se comenta que la relantización se produce al crear sockets en modo bloqueante.

Si esa es la causa, podrías agregar la opción
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     Blocking => 0,
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

para que las conexiones no sean bloqueantes, como sí lo hace IO::Socket::INET, por defecto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 29 invitados