Datenmuell Script: Unterschied zwischen den Versionen

Aus Freiheit statt Angst!
Zur Navigation springen Zur Suche springen
(kat)
Zeile 20: Zeile 20:
 
# it is using lots of memory, nevertheless it's running pretty fast!
 
# it is using lots of memory, nevertheless it's running pretty fast!
 
#
 
#
# REMEMBER THIS: DON'T USE THIS SCRIPT IF YOU DON'T  
+
# REMEMBER THIS: DON'T USE THIS SCRIPT IF YOU DON'T HAVE LOTS OF BANDWIDTH
HAVE LOTS OF BANDWIDTH
 
 
# THIS SCRIPT IS PROVIDED AS-IS, NO RESPONSIBILITIES ARE TAKEN!
 
# THIS SCRIPT IS PROVIDED AS-IS, NO RESPONSIBILITIES ARE TAKEN!
 
#
 
#

Version vom 11. November 2007, 01:21 Uhr

Das Original liegt auf http://www.cuneytyilmaz.com/prog/mtiptrav.pl.txt und ist unter "Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported" Lizenz freigegeben. Der Unterschied zu GPLv2 ist, dass *keine* kommerzielle Nutzung erlaubt ist.

http://creativecommons.org/licenses/by-nc-sa/3.0/

#!/usr/bin/perl -Tw
package multithreadediptraverse;
# cuneytyilmaz.com, December 2005
#
# this script creates random IP numbers and ports
# and tries to connect to these IPs
# aiming to generate as much traffic as possible
# it's meant to be anti-anti-democratic!
#
# if you don't know which human rights *you* have, see:
# http://www.un.org/Overview/rights.html
#
# the script is multithreaded and is a very quick solution,
# probably not the most efficient.
# it is using lots of memory, nevertheless it's running pretty fast!
#
# REMEMBER THIS: DON'T USE THIS SCRIPT IF YOU DON'T HAVE LOTS OF BANDWIDTH
# THIS SCRIPT IS PROVIDED AS-IS, NO RESPONSIBILITIES ARE TAKEN!
#
# this script is distributed under
# "Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported" License
# to see the full-text of the license please see:
# http://creativecommons.org/licenses/by-nc-sa/3.0/
#
# You are free:
#   * to Share — to copy, distribute and transmit the work
#   * to Remix — to adapt the work
#
# Under the following conditions:
# * Attribution. You must attribute the work in the manner specified by the author
#   or licensor (but not in any way that suggests that they endorse you or your use of the work).
# * Noncommercial. You may not use this work for commercial purposes.
# * Share Alike. If you alter, transform, or build upon this work, you may distribute
#   the resulting work only under the same or similar license to this one.
#
# if you have any suggestions or comments mail me at:
# progs-mtiptrav(insertthatmagiccharonemailaddresseshere)cuneytyilmaz.com
#
use strict;

use threads;
use threads::shared;
use Thread::Semaphore;
use IO::Socket;
use Fcntl;

my $threadcnt : shared = 0;
my $sem = new Thread::Semaphore(50);    # number of simultaneous connections

my ($i, $j, $k, $l);

# main loop
# alternatively use
# for my $dummy (1..1000)
while(1)
{
  # generate random IPs and check if they're allowed
  $i = 1 + int rand 253;
  $j = 1 + int rand 253;
  $k = 1 + int rand 253;
  $l = 1 + int rand 253;
  next unless(isValidIP($i, $j, $k, $l));
  # try to create a new thread, and detach it immediately
  $sem->down(1);
  threads->create(\&child, $i, $j, $k, $l)->detach();
}
# wait for all threads to finish (avoid "A thread exited while $n threads were running")
select(undef,undef,undef,rand 1) while($threadcnt>0);


# finds out if an IP number is valid,
# i.e. it should be neither blacklisted nor non-routable
sub isValidIP
{
  my($i,$j,$k,$l) = @_;
  # skip rfc1918 IPs
  if($i==10 || $i==172 && $j>=16 && $j<=31 || $i==192 && $j==168) { return 0 }
  # and other blacklisted IPs maybe...
  # elsif(...)
  else { return 1 }
}


sub child
{
  { lock($threadcnt); ++$threadcnt; }
  my $host = join ('.', @_);
  # unless we have root-rights don't use privileged ports; remember there's no port 0 ;-)
  my $port = ($> == 0 ? 1 + int rand 65534 : 1025 + int rand (65535-1025));
  # alternatively use a limited list of ports
  # my @portlist = qw(21 22 25 53 80 110 443);
  # $port = $portlist[rand @portlist];
  print "thread count: $threadcnt, thread id:".threads->self->tid.", connecting at $host:$port\n";

  my $remote = IO::Socket::INET->new(
    Proto    => 'tcp',
    PeerAddr => $host,
    PeerPort => $port,
    Timeout  => 5,
  );
#  print "Cannot connect to $host:$port\n" if(!$remote);
  print "Connected to $host:$port\n" if($remote);
  undef $remote;
  { lock($threadcnt); --$threadcnt; }
  $sem->up(1);
}