Difference between revisions of "Spam/IP Blocks"

From C4 Wiki
Jump to: navigation, search
m (IP Blocks)
(Replacing page with '= IP Blocks = IP Blocks haben sich als einigermassen effektiv gegen Spammer erwiesen. Folgendes Skript erleichtert die Einrichtung von IP Range Blocks, sipcalc muss installie...')
Line 4: Line 4:
 
Folgendes Skript erleichtert die Einrichtung von IP Range Blocks, sipcalc muss installiert sein.
 
Folgendes Skript erleichtert die Einrichtung von IP Range Blocks, sipcalc muss installiert sein.
  
#!/usr/bin/perl -w
+
http://w8n.koeln.ccc.de/trac/projects/browser/whois2iprange.pl
# Description: generate mediawiki iprange (/16) block entries for whois netnames
 
# Usage:
 
use POSIX qw(strftime);
 
use File::Basename;
 
use Getopt::Std;
 
use Net::Netmask;
 
use Net::XWhois;
 
 
sub usage () {
 
    print "usage: " . basename($0) ." [-s][-u id][-h][-v] ip\n
 
    -s                      output sql statements
 
    -u id                  user id for sql statements
 
    -v                      verbose
 
    -h                      help\n";
 
    print "i.e.:\n";
 
    print "    ". basename($0) ." 221.219.118.4\n";
 
    print "    ". basename($0) ." -s -u 2 221.219.118.4\n";
 
    exit 0;
 
}
 
 
sub output ($$$$) {
 
    my $netname = shift;
 
    my $inet = shift;
 
    my $sql = shift;
 
    my $user = shift;
 
    if (not $sql) {
 
        print "http://wiki.koeln.ccc.de/index.php?title=Special:Blockip&ip=$inet\n";
 
    } else {
 
        my $start = strftime "%Y%m%d%H%M%S", localtime;
 
        print "INSERT INTO ipblocks VALUES ('','$inet', 0, $user, 'SPAMMER $netname','$start',0,''); \n";
 
    }
 
}
 
 
sub range2cidr16 ($) {
 
    my @range = split (' - ', shift);
 
    # get cidr notation
 
    my @blocks = range2cidrlist($range[0], $range[1]);
 
    my @cidrs16;
 
    foreach my $b (@blocks) {
 
        my $cidr = sprintf "%s/%s",$b->base, $b->bits;
 
        print STDERR "got cidr: $cidr\n" if $opts{'v'};
 
        # break down to /16 blocks
 
        if ($b->bits < 16) {
 
            foreach (`sipcalc -s 16 $cidr`) {
 
                if (m/^Network\s*-\s([\.\d]+)\s*-\s([\.\d]+)$/o) {
 
                    my @blocks2 = range2cidrlist($1, $2);
 
                    foreach (@blocks2) {
 
                        push @cidrs16, "$_";
 
                        print STDERR "block $cidr broken down to: $_\n" if $opts{'v'};
 
                    }
 
                }
 
            }
 
        } else { push @cidrs16, $cidr; }
 
    }
 
    return \@cidrs16;
 
}
 
 
my %opts;
 
getopts('hvsu:', \%opts);
 
usage () if ($opts{'h'});
 
my $sql = $opts{'s'} ? 1 : 0;
 
my $user;
 
if ($opts{'u'}) { $user = $opts{'u'}; $sql = 1; } else { $user = 1; }
 
 
my $whois;
 
my $netname;
 
if ($ARGV[0]) {
 
    my $ip = $ARGV[0];
 
    print STDERR "fetching netname for: $ip\n" if $opts{'v'};
 
    $whois = new Net::XWhois Domain => "$ip";
 
    $netname = $whois->netname;
 
    unless ($netname) {
 
        print STDERR "netname not found for ip: $ip \n";
 
        exit 0;
 
    }
 
    print STDERR "fetching inetnum for netname: $netname\n" if $opts{'v'};
 
    $whois->lookup(Domain => "$netname");
 
    if ($whois->inetnum) {
 
        foreach my $inet ($whois->inetnum) {
 
            # break down to /16 blocks
 
            foreach (@{range2cidr16($inet)}) {
 
                print STDERR "found block: $_\n" if $opts{'v'};
 
                output($netname, $_, $sql, $user);
 
            }
 
        }
 
 
    } else {
 
        print STDERR "inetnum(s) not found for: $netname\n";
 
    }
 
} else { usage(); }
 
 
 
Benutzen:
 
perl ~/whois2iprange.pl ip
 
  
 
[[Category:Infos]]
 
[[Category:Infos]]

Revision as of 17:48, 11 July 2007

IP Blocks

IP Blocks haben sich als einigermassen effektiv gegen Spammer erwiesen.

Folgendes Skript erleichtert die Einrichtung von IP Range Blocks, sipcalc muss installiert sein.

http://w8n.koeln.ccc.de/trac/projects/browser/whois2iprange.pl