diff --git a/Makefile b/Makefile index 10da3c7..af27ec8 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,12 @@ -CMD = blink bsearch histogram upsidedown tracefile timestamp rand rrm goodpasswd gitnext ramusage ramusage +CMD = blink bsearch histogram upsidedown tracefile timestamp rand rrm goodpasswd gitnext puniq ramusage ramusage -all: blink/blink.1 bsearch/bsearch.1 goodpasswd/goodpasswd.1 histogram/histogram.1 rand/rand.1 rrm/rrm.1 timestamp/timestamp.1 tracefile/tracefile.1 upsidedown/upsidedown.1 wssh/wssh.1 +all: blink/blink.1 bsearch/bsearch.1 goodpasswd/goodpasswd.1 histogram/histogram.1 puniq/puniq.1 rand/rand.1 rrm/rrm.1 timestamp/timestamp.1 tracefile/tracefile.1 upsidedown/upsidedown.1 wssh/wssh.1 %.1: % pod2man $< > $@ install: mkdir -p /usr/local/bin - parallel eval ln -sf `pwd`/*/{} /usr/local/bin/{} ::: $(CMD) + parallel -v eval ln -sf `pwd`/*/{} /usr/local/bin/{} ::: $(CMD) mkdir -p /usr/local/share/man/man1 parallel ln -sf `pwd`/{} /usr/local/share/man/man1/{/} ::: */*.1 diff --git a/blockip/blockip b/blockip/blockip new file mode 100755 index 0000000..a997fcf --- /dev/null +++ b/blockip/blockip @@ -0,0 +1,71 @@ +#!/usr/bin/perl + +# blockip i.p.n.r/bits days + +# Block IP-net for some days by routing it to 127.x.y.z + +my $ipnet = shift; +my $days = shift; +my ($yy,$mm,$dd) = (localtime(time+24*60*60*$days))[5,4,3]; + +$yy %=100; # 2 digit year +$mm++; # Perl month from 0..11 + +my ($octets,$bits) = split m:/:, $ipnet; +$bits ||= 31; +my @ipoctets = split /\./,$octets; +my $ip32 = ip_quad_to_ip32(@ipoctets); +my $net32 = $ip32 & ~(2**(32-$bits) - 1); +my @net = ip32_to_ip_quad($net32); +my @ipnet = join(".",@net); + +block($yy,$mm,$dd,$bits,@ipnet); + + +($yy,$mm,$dd) = (localtime(time))[5,4,3]; + +$yy %=100; # 2 digit year +$mm++; # Perl month from 0..11 +unblock($yy,$mm,$dd); + +sub unblock { + my ($yy,$mm,$dd) = @_; + my @routes = `route -n`; + for (@routes) { + my ($net,$gw,$mask,$rest) = split/ +/; + if($gw =~ /^127\.(\d+)\.(\d+)\.(\d+)/) { + # A blackholed route + if("$yy-$mm-$dd" ge "$1-$2-$3") { + # Remove blackhole + print("route del -net $net netmask $mask gw $gw\n"); + system("route del -net $net netmask $mask gw $gw"); + } + } + } +} + +sub block { + my ($yy,$mm,$dd,$bits,@ipnet) = @_; + print("route add -net @ipnet/$bits gw 127.$yy.$mm.$dd\n"); + system("route add -net @ipnet/$bits gw 127.$yy.$mm.$dd"); +} + +sub ip_quad_to_ip32 { + my @ipoctests = @_; + return( + ($ipoctets[0] << 24) + + ($ipoctets[1] << 16) + + ($ipoctets[2] << 8) + + ($ipoctets[3] << 0)); +} + +sub ip32_to_ip_quad { + my $ip32 = shift; + return ( + ($ip32 >> 24) & 255, + ($ip32 >> 16) & 255, + ($ip32 >> 8) & 255, + ($ip32 >> 0) & 255 + ); +} + diff --git a/blockip/greppct b/blockip/greppct new file mode 100755 index 0000000..7f31441 --- /dev/null +++ b/blockip/greppct @@ -0,0 +1,12 @@ +#!/usr/bin/perl + +# www.pi.dk 107.150.59.98 - - [29/Nov/2016:11:29:01 +0100] "GET /test/?16EE2%20%20%E5%AF%8C%E5%B1%B1%E3%83%8B%E3%83%A5%3%83%BC%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9996%E8%B2%A9%E5%A3%B2%E5%BA%97%20%20%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9576%E6%BF%80%E5%AE%89 + +my $antalpcttegn = shift; + +while(<>) { + my @ip = split / /,$_; + my @v = split /"/,$_; + my $c = $v[1]=~y/%/%/; + $c > $antalpcttegn and print $ip[1],"\n"; +} diff --git a/puniq/puniq b/puniq/puniq new file mode 100755 index 0000000..3c1fd78 --- /dev/null +++ b/puniq/puniq @@ -0,0 +1,155 @@ +#!/usr/bin/perl + +=head1 NAME + +puniq - print first unique line + +=head1 SYNOPSIS + +B file +cat file | B + +=head1 DESCRIPTION + +B works similar to B. It prints the line the first time +it is seen. + + + +=head1 EXAMPLES + +=head2 dmesg continously + +forever dmesg | puniq + + +=head1 REPORTING BUGS + +B is part of tangetools. Report bugs to . + + +=head1 AUTHOR + +Copyright (C) 2017 Ole Tange http://ole.tange.dk + + +=head1 LICENSE + +Copyright (C) 2013 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +at your option any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +=head2 Documentation license I + +Permission is granted to copy, distribute and/or modify this documentation +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the file fdl.txt. + +=head2 Documentation license II + +You are free: + +=over 9 + +=item B + +to copy, distribute and transmit the work + +=item B + +to adapt the work + +=back + +Under the following conditions: + +=over 9 + +=item B + +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). + +=item B + +If you alter, transform, or build upon this work, you may distribute +the resulting work only under the same, similar or a compatible +license. + +=back + +With the understanding that: + +=over 9 + +=item B + +Any of the above conditions can be waived if you get permission from +the copyright holder. + +=item B + +Where the work or any of its elements is in the public domain under +applicable law, that status is in no way affected by the license. + +=item B + +In no way are any of the following rights affected by the license: + +=over 9 + +=item * + +Your fair dealing or fair use rights, or other applicable +copyright exceptions and limitations; + +=item * + +The author's moral rights; + +=item * + +Rights other persons may have either in the work itself or in +how the work is used, such as publicity or privacy rights. + +=back + +=item B + +For any reuse or distribution, you must make clear to others the +license terms of this work. + +=back + +A copy of the full license is included in the file as cc-by-sa.txt. + +=head1 DEPENDENCIES + +B uses Perl. + + +=head1 SEE ALSO + +B(1). + +=cut + +use Digest::MD5 qw(md5); + +while(<>) { + $seen{md5($_)}++ or print; +}