• Publicidad

Duda con conexión con IRC

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

Duda con conexión con IRC

Notapor BigBear » 2014-01-06 16:00 @708

Hola, estoy haciendo un script en Perl que se conecta a un canal IRC por socket, el tema es que todo anda bien pero cuando quiero leer las líneas del canal cuando se habla es cuando me da problemas. El tema es que la expresión regular funciona pero es como si deformara la variable; simplemente se muestra doblada o en blanco. El código es este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  print $soquete "NICK $nick\r\n";
  2.     print $soquete "USER $nick 1 1 1 1\r\n";
  3.     print $soquete "JOIN $canal\r\n";
  4.  
  5.     print "[+] Online\n\n";
  6.  
  7.     while ( my $log = <$soquete> ) {
  8.      chomp($log);
  9.  
  10.      if ( $log =~ m/:!crackit (.*)$/g ) {
  11.      my $pagina = $1;
  12.      print $pagina;
  13.      }
  14.  
  15.     }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Como ven, solo leo un comando pero el argumento tiene espacios raros que no sé cómo eliminar. Probé con chomp y reemplacé los \r\n de la variable $pagina, pero sigue dando errores.

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

Publicidad

Re: Duda con conexión con IRC

Notapor Aceitunas » 2014-01-06 17:55 @788

Hola Doddy, yo he hecho algunas cosas para IRC y lo más fácil es usar POE::Component::IRC que te gestiona todo.

Aquí te dejo el enlace por si te interesa:

http://search.cpan.org/~bingos/POE-Comp ... ent/IRC.pm
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Duda con conexión con IRC

Notapor BigBear » 2014-01-06 18:03 @794

Gracias por la ayuda pero ya tengo todo hecho. No puedo empezar todo de nuevo por este pequeño detalle.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con conexión con IRC

Notapor Aceitunas » 2014-01-06 20:27 @893

En realidad está mal la expresión regular, fíjate lo que recibes cuando escribe alguien en el canal:

:nick!533c49e@gateway/web/freenode/ip.X.X.X.X PRIVMSG #canal :mensaje

Pequeño script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use IO::Socket;
  3.  
  4. my $sock = IO::Socket::INET->new(
  5.         PeerAddr => 'irc.freenode.net',
  6.         PeerPort => '6667',
  7.         Proto => 'tcp'
  8. ) or die "No se ha podido conectar con el servidor.";
  9.  
  10.  
  11. print $sock "NICK Aceitunas\r\n";
  12. print $sock "USER Aceitunas 1 1 1 1\r\n";
  13. print $sock "JOIN #canal \r\n";
  14.  
  15. while (<$sock>)
  16. {
  17.         if (m/PRIVMSG/)
  18.         {
  19.                 /:(.*)!(.*)\sPRIVMSG(.*)\s:(.*)/;
  20.                 print "$1 en canal $3 dice: $4\n";
  21.         }
  22. }
  23.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Probado en Freenode.net
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Duda con conexión con IRC

Notapor BigBear » 2014-01-07 09:25 @434

Mira esta porción de código. El tema es que crackit tiene que recibir un hash md5 y el segundo una URL pero por más que intente, crackit nunca recibe nada. Probé usando \/ como lo hice con panel y también con $ al final, pero no funciona.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.             if ( $log =~ m/:!crackit (.*)$/) {
  2.  
  3.                 my $hash = $1;
  4.  
  5.                 print $soquete "PRIVMSG $canal : [+] Working ...\r\n";
  6.  
  7.                 my $re = crackit($hash);
  8.                 unless ( $re =~ /false01/ ) {
  9.                     print $soquete "PRIVMSG $canal : [+] MD5 : $re\r\n";
  10.                 }
  11.                 else {
  12.                     print $soquete "PRIVMSG $canal : [-] Hash not Found\r\n";
  13.                 }
  14.  
  15.  
  16.             }
  17.  
  18.             if ( $log =~ m/:!panel (.*)\// ) {
  19.  
  20.                 my $page = $1;
  21.                 chomp $page;
  22.                 print $soquete "PRIVMSG $canal : [+] Working ...\r\n";
  23.                 scan($page);
  24.                 print $soquete "PRIVMSG $canal : [+] Scan Finished\r\n";
  25.                
  26.             }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿ Como lo arreglo ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con conexión con IRC

Notapor explorer » 2014-01-07 10:05 @462

¿Puedes poner un ejemplo de lo que contiene $log?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Duda con conexión con IRC

Notapor BigBear » 2014-01-07 10:19 @471

Ya lo revisé un montón de veces y debería funcionar según el ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
:Doddy!Doddy@localhost PRIVMSG #locos :!help
:Doddy!Doddy@localhost PRIVMSG #locos :!crackit 098f6bcd4621d373cade4e832627b4f6
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con conexión con IRC

Notapor Aceitunas » 2014-01-07 10:39 @485

Es muy parecido a lo que te deje arriba...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2.  
  3. my $var = ":[email protected] PRIVMSG #canal :!crackit XXX www.google.es";
  4.  
  5. $var =~ /:(.*)!(.*)\sPRIVMSG\s(.*)\s:(.*)\s(.*)\s(.*)/;
  6.  
  7. if ($4 == "!crackit") # $4 = comando enviado
  8. {
  9.     print "param1: $5\nparam2: $6\n"; # parametros pasados
  10. }
  11.  
  12. exit;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: Duda con conexión con IRC

Notapor BigBear » 2014-01-07 10:56 @497

Genial, ahora anda. Gracias, aceitunas.

Hablando de una conexión IRC tengo otra duda: tengo pensado usar un thread cada 60 segundos para que manda un mensaje al canal. El tema es que la función de thread va a perder la variable $soquete para la conexión y si lo hago en el while() mismo del código mostrado voy a atrasar todo el programa 60 segundos.

¿ Qué tendría que hacer ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con conexión con IRC

Notapor Aceitunas » 2014-01-07 11:48 @533

¿Y por qué se va a perder la variable $sockete?

Yo haría algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # creo un hilo que cada 60 segundo envíe el mensaje
  2. while (<$sockete>) # while que comprueba la conexión
  3. {
  4.     # Aquí compruebo que el socket esté conectado; si no, cierro el hilo que...
  5.     # ...envía los mensajes y reconecto al canal irc
  6. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es solo una idea.
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron