• Publicidad

Ayuda para recuperar canales en IRC

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

Ayuda para recuperar canales en IRC

Notapor BigBear » 2014-11-02 18:30 @812

Hola. Tengo el siguiente código

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use IO::Socket;
  2.  
  3. my $hostname = "localhost";
  4. my $port = "6667";
  5. my $nombre = "dsadsa";
  6.  
  7.         if (
  8.             my $socket = new IO::Socket::INET(
  9.                 PeerAddr => $hostname,
  10.                 PeerPort => $port,
  11.                 Proto    => "tcp"
  12.             )
  13.           )
  14.         {
  15.  
  16.             print $socket "NICK $nombre\r\n";
  17.             print $socket "USER $nombre 1 1 1 1\r\n";
  18.             print $socket "LIST\r\n";
  19.  
  20.             print "[+] Spammer Online\n\n";
  21.  
  22.             while ( my $log = <$socket> ) {
  23.                 print $log;
  24.             }
  25.  
  26. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Lo que hago es poder capturar el nombre de todos los canales y cantidad de usuarios, pero el tema es que no quiero que sea un bucle infinito sino que quiero usarlo en una función que solo busque los canales y corte ahí. ¿Cómo puedo hacerlo ?
Última edición por explorer el 2014-11-02 19:27 @852, editado 1 vez en total
Razón: codigo => código; funcion => función; ahi => ahí; como => ¿Cómo;
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Ayuda para recuperar canales en IRC

Notapor Aceitunas » 2014-11-04 09:30 @437

Filtrando el contenido que recibes después de enviar el comando...
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: Ayuda para recuperar canales en IRC

Notapor BigBear » 2014-11-04 11:36 @525

Ya había encontrado una forma mejor: uso last() para cortar el while() cuando detecto el "List End" de la conexión.
Última edición por explorer el 2014-11-04 13:38 @609, editado 1 vez en total
Razón: habia => había; conexion => conexión;
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Ayuda para recuperar canales en IRC

Notapor BigBear » 2014-11-04 15:59 @707

explorer, ya que estas por ahí corrigiendo las tildes me podrías decir por qué se me deforma la tabla cuando printf y Color::Output al mismo tiempo me devuelve algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ChannelsUsers
  2. #locos
  3. #locos2
  4. #locos1
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Todo amontonado...

El código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2. #!usr/bin/perl
  3. #Coded By Doddy H
  4.  
  5. use IO::Socket;
  6. use Color::Output;
  7. Color::Output::Init;
  8.  
  9. print "[+] Serching ...\n\n";
  10.  
  11. my @encontrados = buscar_canales("localhost","6667","testar_now");
  12.  
  13. printf("%-32s %s\n",printear_titulo("Channels"),printear_titulo("Users"));
  14. for my $encontrado(@encontrados) {
  15. if($encontrado=~/(.*)-soy_un_limite-(.*)/) {
  16. my $canal = $1;
  17. my $cantidad = $2;
  18. printf("%-32s  %s\n",printear($canal),printear($cantidad));
  19. }
  20. }
  21.  
  22. sub buscar_canales {
  23.  
  24. my @resultado;
  25.  
  26. my $hostname = $_[0];
  27. my $port = $_[1];
  28. my $nombre = $_[2];
  29.  
  30. if (
  31. my $socket = new IO::Socket::INET(
  32. PeerAddr => $hostname,
  33. PeerPort => $port,
  34. Proto    => "tcp"))
  35. {
  36.  
  37. print $socket "NICK $nombre\r\n";
  38. print $socket "USER $nombre 1 1 1 1\r\n";
  39. print $socket "LIST\r\n";
  40.  
  41. while ( my $log = <$socket> ) {
  42.  
  43. if($log=~/322 (.*?) (.*?) (.*?) :/) {
  44. my $canal= $2;
  45. my $cantidad = $3;
  46. push(@resultado,$canal."-soy_un_limite-".$cantidad);
  47. }
  48.  
  49. if($log=~/:End of \/LIST/) {
  50. last;
  51. }
  52.  
  53. }
  54.  
  55. $socket->close;
  56.  
  57. return @resultado;
  58.  
  59. }
  60.  
  61. }
  62.  
  63. # Functions
  64.  
  65. sub printear {
  66.     cprint( "\x036" . $_[0] . "\x030" );
  67.     return "";
  68. }
  69.  
  70. sub printear_logo {
  71.     cprint( "\x037" . $_[0] . "\x030" );
  72.     return ""
  73.  
  74. }
  75.  
  76. sub printear_titulo {
  77.     cprint( "\x0310" . $_[0] . "\x030" );
  78.     return ""
  79. }
  80.  
  81.  
  82. # The End ?
  83.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2014-11-04 21:16 @927, editado 3 veces en total
Razón: Explorer => explorer; estas => estás; ahi => ahí; corregiendo => corrigiendo; podrias => podrías; porque => por qué; asi => así; codigo => código; color output => Color::Output; puntos suspensivos; espacios excesivos
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Ayuda para recuperar canales en IRC

Notapor explorer » 2014-11-04 21:21 @931

Creo que es por tema de los búfer de escritura: cuando llamas a cprint() le estás diciendo que saque cosas en pantalla. Luego llamas a return para que no devuelva nada ("") y ese nada se lo pasas a printf().

Te aconsejo que uses solamente cprintf(), del propio módulo.
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

Re: Ayuda para recuperar canales en IRC

Notapor BigBear » 2014-11-05 10:33 @481

Hecho, gracias por la ayuda, explorer (y por corregir las tildes, también xD)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub printearf_titulo {
  2. cprintf("\x0310" ."%-32s  %s". "\x030\n",$_[0],$_[1]);
  3. }
  4.  
  5. sub printearf {
  6. cprintf("\x036" ."%-32s  %s". "\x030\n",$_[0],$_[1]);
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2014-11-05 11:11 @507, editado 1 vez en total
Razón: tambien => también;
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Básico

¿Quién está conectado?

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

cron