puniq: man page
This commit is contained in:
parent
90946afc5b
commit
c4ebb7aae2
6
Makefile
6
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
|
||||
|
|
71
blockip/blockip
Executable file
71
blockip/blockip
Executable file
|
@ -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
|
||||
);
|
||||
}
|
||||
|
12
blockip/greppct
Executable file
12
blockip/greppct
Executable file
|
@ -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";
|
||||
}
|
155
puniq/puniq
Executable file
155
puniq/puniq
Executable file
|
@ -0,0 +1,155 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
=head1 NAME
|
||||
|
||||
puniq - print first unique line
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
B<puniq> file
|
||||
cat file | B<puniq>
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
B<puniq> works similar to B<uniq>. It prints the line the first time
|
||||
it is seen.
|
||||
|
||||
|
||||
|
||||
=head1 EXAMPLES
|
||||
|
||||
=head2 dmesg continously
|
||||
|
||||
forever dmesg | puniq
|
||||
|
||||
|
||||
=head1 REPORTING BUGS
|
||||
|
||||
B<puniq> is part of tangetools. Report bugs to <tools@tange.dk>.
|
||||
|
||||
|
||||
=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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
=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 Share>
|
||||
|
||||
to copy, distribute and transmit the work
|
||||
|
||||
=item B<to Remix>
|
||||
|
||||
to adapt the work
|
||||
|
||||
=back
|
||||
|
||||
Under the following conditions:
|
||||
|
||||
=over 9
|
||||
|
||||
=item B<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).
|
||||
|
||||
=item B<Share Alike>
|
||||
|
||||
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<Waiver>
|
||||
|
||||
Any of the above conditions can be waived if you get permission from
|
||||
the copyright holder.
|
||||
|
||||
=item B<Public Domain>
|
||||
|
||||
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<Other Rights>
|
||||
|
||||
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<Notice>
|
||||
|
||||
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<puniq> uses Perl.
|
||||
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
B<uniq>(1).
|
||||
|
||||
=cut
|
||||
|
||||
use Digest::MD5 qw(md5);
|
||||
|
||||
while(<>) {
|
||||
$seen{md5($_)}++ or print;
|
||||
}
|
Loading…
Reference in a new issue