Right now I private message it to login:* botbot (Botty@rox-AFBE0982) has joined #wtf
Now I go back to the channel:<me> .login 123456 <botbot> Password correct, logged in
I wait about five seconds for it to send the title of google.com back to me, it doesn't send so i just send some random text.<me> .web http://www.google.com <botbot> WEB FUNCTION THREAD STARTED
Here's the full bot<me> ZZZZZZZZZZZZZZZZZZZZ <botbot> Got title: Google <botbot> WEB FUNCTION THREAD FINISHED
#!/usr/bin/perl use strict; use threads; use IO::Socket::INET; use LWP::UserAgent; my $ua = LWP::UserAgent->new(agent => 'Mozilla/5.0 (Windows; U; Window +s NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.5'); push @{$ua->requests_redirectable}, "POST"; my($Sock,$Line,$Nick); my(@IRCUnparsed,@IRCParsed); my(%BossUsers); ############################################ my $Server = $ARGV[0] || "127.0.0.1"; my $Channel = $ARGV[1] || qw(#wtf); my $Port = $ARGV[2] || qw(6667); my $NickName = "botbot"; my $Password = qw(123456); ############################################ $Sock = new IO::Socket::INET(PeerAddr=>"$Server:$Port",Proto=>"tcp"); $Sock->autoflush(); die("Couldn't connect: $!\n") unless $Sock; &SendNick(); &send_raw("USER Botty Bot Bott :Bot bot"); while(1){ $Line = <$Sock>; if(!$Sock){print("[-] Sock died\n");exit(0);} @IRCUnparsed = split(/\r\n/,&tchomp($Line)); @IRCParsed = split(/ /,$IRCUnparsed[0]); print($IRCUnparsed[0] . "\n"); if($IRCParsed[0] eq 'PING'){ &send_raw("PONG " . $IRCParsed[1]); } elsif($IRCParsed[1] eq '001'){ &JoinChan; } elsif(($IRCParsed[1] eq '433') || ($IRCParsed[1] eq "436")){ #&SendNick(); #&JoinChan(); } elsif($IRCParsed[1] eq '475'){ &send_raw("QUIT"); } elsif($IRCParsed[1] eq 'KICK'){ &JoinChan; } if(($IRCUnparsed[0] =~ m/^:(.+)!(.+)\@(.+) PRIVMSG (.+) :(.+)/) || + ($IRCUnparsed[0] =~ m/^:(.+)!~(.+)\@(.+) PRIVMSG (.+) :/)){ my($uNick,$uID,$uHost) = ($1,$2,$3); if($5 =~ m/quit/){ &send_raw("QUIT"); die(); } if($4 eq $Channel){ if($IRCParsed[3] eq ':.web'){ my $URL = $IRCParsed[4]; my $Thr = threads->new(\&Web,$URL); } #chan messages } elsif($4 eq $Nick){ #private messages if($BossUsers{$uNick} == 0){ for(0..@IRCParsed){ #print($_ . " -> " . $IRCParsed[$_] . "\n"); } if($IRCParsed[3] eq ':.login'){ if($IRCParsed[4] eq $Password){ &send_msg($uNick,"Password correct, logged in" +); $BossUsers{$uNick} = 1; } else{ &send_msg($uNick,"Password incorrect"); $BossUsers{$uNick} = 0; } } } elsif($BossUsers{$uNick} => 1){ if($IRCParsed[3] eq ':.logout'){ $BossUsers{$uNick} = 0; &send_msg($uNick,"Logged out"); } elsif($IRCParsed[3] eq ":.quit"){ &SendQuit(); } } } $IRCParsed[0] = $1; } } sub Web($) { &send_msg($Channel,"WEB FUNCTION THREAD STARTED"); my($URL,$Request,$Requested,$Content) = @_; $Request = HTTP::Request->new(GET => $URL); $Requested = $ua->request($Request); if($Requested->is_success){ $Content = $Requested->content; if($Content =~ m/<title>(.+)<\/title>/){ &send_msg($Channel,"Got title: $1"); } else{ &send_msg($Channel,"Didn't get title"); } } else{ print "\n[-] Connection error - " . $Requested->status_line . +"\n"; } &send_msg($Channel,"WEB FUNCTION THREAD FINISHED"); } sub SendQuit() { &send_raw("QUIT"); } sub JoinChan() { &send_raw("JOIN " . $Channel); } sub SendNick() { #$Nick = &randnick($NickPrefix); $Nick = $NickName; &send_raw("NICK " . $Nick); } sub randnick($){ return $_[0] . int(rand(1)*100) . int(rand(1)*200) . int(rand(1)*3 +00); } sub send_raw($){ print "[+] $_[0]\n"; print $Sock "$_[0]\r\n"; } sub send_msg($$){ print "[+] PRIVMSG $_[0] :$_[1]\n"; print $Sock "PRIVMSG $_[0] :$_[1]\r\n"; } sub tchomp { my $text = shift; $text =~ s/^(.*?)(?:\x0D\x0A|\x0A|\x0D|\x0C|\x{2028}|\x{2029})/$1/ +s; return $text; } sub urlencode($){ my $unclean = shift; $unclean =~ s/\?/\%3f/gi; $unclean =~ s/ /\+/gi; $unclean =~ s/:/\%3A/gi; $unclean =~ s/\//\%2F/gi; $unclean =~ s/&/\%26/gi; $unclean =~ s/\"/\%22/gi; $unclean =~ s/\'/\%27/gi; $unclean =~ s/,/\%2C/gi; $unclean =~ s/\\/\%5C/gi; return $unclean; } sub urldecode($){ my $clean = shift; $clean =~ s/\%3f/\?/gi; $clean =~ s/\+/ /gi; $clean =~ s/\%3A/:/gi; $clean =~ s/\%2F/\//gi; $clean =~ s/\%26/&/gi; $clean =~ s/\%22/\"/gi; $clean =~ s/\%27/\'/gi; $clean =~ s/\%2C/,/gi; $clean =~ s/\%5C/\\/gi; return $clean; }
In reply to Re^4: Thread weirdness
by j0nny
in thread Thread weirdness
by j0nny
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |