#!/usr/bin/perl -w my $eval = "use threads\;"; eval($eval); die "$0: please rebuild your perl with threads\n" if ($@); use threads::shared; use strict; # Keep me clean use IO::Socket::INET; # Sockets would be nice use Net::HTTP; ## HAL RAEPING PROGRAM: VERSION 1.1 ## ## COPYLULZ 2007 PLASMAFOX ## my $version = 1.1; my $tmp; my @raepurl; my @threads; my $urlstoraep = 0; my $failed : shared = 0; my $bytesdl : shared = 0; my $succeded : shared = 0; sub raeper($); for (;$tmp=shift;) { if ($tmp eq "-h" || $tmp eq "--help") { print "$0: halraep program version $version\n"; print "parameters: $0 ... \n"; } else { push(@raepurl, $tmp); $urlstoraep++; } } print "No URL's specified to raep.\n" if $urlstoraep < 1; die("\n") if $urlstoraep < 1; for ($tmp = 0; $tmp < $urlstoraep; $tmp++) { my $handle = threads->new(\&raeper, $raepurl[$tmp]); push(@threads, $handle); $handle->detach; } while (1337) { # no nada } sub raeper($) { my $self = threads->self(); my $tid = $self->tid(); my $url = shift; $url =~ s/http\:\/\///g; my $time = localtime(time()); my $host = (split(/\//, $url))[0]; my $toget = "/".substr($url, length($host)+1, 8192); my $tmp; my $bytes; my $fail; my $n; my $buf; print "[thr$tid:$time] starting raep on $url\n"; while (1) { my $s = Net::HTTP->new(Host => $host); if (!$s) { $failed++; print "[thr$tid:".localtime(time())."] failed to get $url\n"; } $s->write_request(GET => $toget, 'User-Agent' => "plasmaraepr $version"); my($code, $mess, %h) = $s->read_response_headers; while ($s->read_entity_body($buf, 1024)) { $bytes += length($buf); } $bytesdl += $bytes; $succeded++; print "[thr$tid:".localtime(time())."] ".conv($bytes)."\t$toget\t\t".conv($bytesdl)."\t\t$failed:$succeded\n"; $bytes = 0; } } sub conv { my $bytes = shift; return $bytes."b" if $bytes < 1024; return rtwo($bytes/1024)."KiB" if ($bytes > 1024 && $bytes < (1024**2)); return rtwo($bytes/(1024**2))."MiB" if ($bytes > (1024**2) && $bytes < (1024**3)); return rtwo($bytes/(1024**3))."GiB" if ($bytes > (1024**3) && $bytes < (1024**4)); return rtwo($bytes/(1024**4))."TiB" if ($bytes > (1024**4) && $bytes < (1024**5)); } sub rtwo { my $n=shift;return sprintf("%.2f",$n); }