Advertisement
Guest User

fist.pl

a guest
Jun 20th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.85 KB | None | 0 0
  1. #!/usr/bin/env perl
  2. # FIST - fucking irc spamming tool (public domain)
  3.  
  4. use strict;
  5. use warnings;
  6. use POSIX;
  7. use threads;
  8. use threads::shared;
  9. use IO::Socket::INET;
  10. use IO::Socket::Socks;
  11. $|++;
  12. $0 = "fist";
  13.  
  14. # random proxy from "proxylist"
  15. srand; my $proxy_line;
  16. open FILE, "<proxylist" or die "[-] Could not open filename: $!\n";
  17. rand($.)<1 and ($proxy_line=$_) while <FILE>;
  18. close FILE;
  19. $proxy_line =~ s/[\r\n]+//g;
  20. my ($socks_addr, $socks_port) = split(/:/, $proxy_line, 2);
  21.  
  22. sub random_nick() {
  23.     srand; my $nick_line;
  24.     open FILE, "<nicklist" or die "[-] Could not open filename: $!\n";
  25.     rand($.)<1 and ($nick_line=$_) while <FILE>;
  26.     close FILE;
  27.     $nick_line =~ s/[\r\n]+//g;
  28.     return $nick_line;
  29. }
  30.  
  31. my %irc = (
  32.     # proxy settings
  33.     use_proxy   => 1,
  34.     socks_vers  => 5,
  35.     socks_addr  => $socks_addr,
  36.     socks_port  => $socks_port,
  37.    
  38.     # server
  39.     addr        => 'irc.swiftirc.net',
  40.     port        => 6667,
  41.     timeout     => 3,
  42.     buffer_size => 2048,
  43.    
  44.     # bot settings
  45.     nick        => &random_nick(),
  46.     user        => &random_nick(),
  47.     name        => 'realname',
  48.     version     => 'mIRC v0.1',
  49.     spam        => 'TERRY WANTS YOU TO KNOW ABOUT GLOW IN THE DARK NIGGERS',   
  50.  
  51. );
  52.  
  53.  
  54. print "
  55. ░░░░░░░░░░░░░░░░░░░ fucking irc spamming tool
  56. ░░░▓▓▓█░░░░░█▓▓▓░░░ Server .... $irc{addr}:$irc{port}
  57. ░▓█████▓░░░▓█████▓░
  58. ░▓█████░░▓░░█████▓░ STARTED
  59. ░▓░░░░░░███░░░░░░▓░
  60. ░▓██▓░░░░░░░░░▓██▓░
  61. ░░▓███░█░█░█░███▓░░
  62. ░░░▓██░█░█░█░██▓░░░ ^C to quit
  63. ░░░░░█░░░░░░░█░░░░░ (or `killall fist`)
  64.  
  65. ";
  66.  
  67.  
  68. my $sock;
  69. my (@nicks, @channels) = ();
  70.  
  71.  
  72. if ($irc{use_proxy}) {
  73.     print "[+] Using socks$irc{socks_vers} $irc{socks_addr}:$irc{socks_port}\n";
  74.  
  75.     $sock = new IO::Socket::Socks(
  76.         ProxyAddr    => $irc{socks_addr},
  77.         ProxyPort    => $irc{socks_port},
  78.         ConnectAddr  => $irc{addr},
  79.         ConnectPort  => $irc{port},
  80.         SocksDebug   => 0,
  81.         Timeout      => $irc{timeout},
  82.         SocksVersion => $irc{socks_vers},
  83.     ) or die "[-] $SOCKS_ERROR";
  84.  
  85. } else {
  86.     $sock = new IO::Socket::INET (
  87.         PeerAddr => $irc{addr},
  88.         PeerPort => $irc{port},
  89.         Proto    => 'tcp',
  90.         Timeout  => $irc{timeout}
  91.     ) or die "[-] $!";
  92. }
  93.  
  94.  
  95. print "[+] Connected to $irc{addr}/$irc{port}\n";
  96.  
  97. while($sock->sysread(our $buf, $irc{buffer_size})) {
  98.     $sock->syswrite("NICK $irc{nick}\r\n");
  99.     $sock->syswrite("USER $irc{user} 0 0 :$irc{name}\r\n");
  100.     last;
  101. }
  102.  
  103.  
  104. my $gotlist = 0;
  105. push(@channels);
  106.  
  107. while($sock) {
  108.  
  109.     $sock->recv(our $buf, $irc{buffer_size}, MSG_DONTWAIT);
  110.    
  111.  
  112.     for my $line (split(/^/m, $buf)) {
  113.        
  114.         # ping/pong
  115.         if ($line =~ m/^PING (:[^ ]+)$/) {
  116.             #print "[+] Sent pong\n";
  117.             $sock->syswrite("PONG $1\r\n");
  118.         }
  119.         # ctcp version
  120.         if ($line =~ m/^:(.+)!(.+)@(.+) PRIVMSG ${irc{nick}} :\001VERSION\001/) {
  121.             $sock->syswrite("PRIVMSG $1 \001VERSION ${irc{version}}\001\r\n");
  122.         }
  123.         # end of motd
  124.         if ($line =~ m/^:(.+) (376|422) ${irc{nick}} :(.+)$/) {
  125.             $sock->syswrite("LIST\r\n");
  126.         }
  127.         # channels list
  128.         if ($line =~ m/^:(.+) 322 ${irc{nick}} (#[^ ]+) (.+) :(.+?)$/) {
  129.             push(@channels, $2);
  130.             print "\r[*] Waiting for /LIST (".@channels." channels)";
  131.            
  132.         }
  133.         # check possible ban info
  134.         if ($line =~ m/^:(.+) NOTICE ${irc{nick}} :\*\*\* (.+)$/) {
  135.             print "[!] $2\n";
  136.         }
  137.         # exit when banned
  138.         if ($line =~ m/^ERROR :Closing Link: ${irc{nick}}\[(.+)\] (.+)$/) {
  139.             close($sock);
  140.             exit;
  141.         }
  142.        
  143.         # end of channel list
  144.         if ($line =~ m/^:(.+) 323 ${irc{nick}} :(.+?)$/) {
  145.             $gotlist = 1;
  146.             print "\n";
  147.         }
  148.  
  149.    
  150.         if ((@channels > 0) && $gotlist == 1) {
  151.             my $index = rand(@channels);
  152.             my $chan = $channels[$index]; #set to 0
  153.             $sock->syswrite("JOIN ${chan}\r\n");
  154.        
  155.             if ($line =~ m/^:(.+) 353 ${irc{nick}} = (.+) :${irc{nick}} (.+)$/) {
  156.                 print "[+] JOIN $chan\n";
  157.                 our @n = split(' ', $3);
  158.                 foreach my $nick (@n) {
  159.                     if ($nick =~ m/^(\&|\~|\@|\%|\+)/) {
  160.                         $nick =~ s/^.{1}//s;
  161.                     }
  162.                     push (@nicks, $nick);
  163.                     $sock->syswrite("PRIVMSG $nick ${irc{spam}}\r\n");
  164.                     print "[+] Sent PRIVMSG to $nick\n";
  165.                 }
  166.  
  167.                 $sock->syswrite("PRIVMSG ${chan} ${irc{spam}}\r\n");
  168.                 $sock->syswrite("PART ${chan}\r\n");
  169.                 splice(@channels,$index,1);
  170.                
  171.             }
  172.            
  173.             # end of /names
  174.             if ($line =~ m/^:(.+) 366 ${irc{nick}} $chan :(.+)$/) {
  175.                 $sock->syswrite("PART $chan\r\n");
  176.                 if (@channels < 1) {
  177.                     print "[+] Done!\n";
  178.                     $sock->syswrite("QUIT\r\n");
  179.                     #exit;
  180.                 }
  181.             }
  182.                
  183.             # discard these
  184.             if ($line =~ m/^:(.+) (470|471|473|474|475|476|477|538) (.+)$/) {
  185.                 $sock->syswrite("PART ${chan}\r\n");
  186.                 splice(@channels,$index,1);
  187.             }
  188.            
  189.         }
  190.     }
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement