Import old code, circa 2005
This commit is contained in:
198
logger
Executable file
198
logger
Executable file
@@ -0,0 +1,198 @@
|
||||
#!/usr/bin/perl -w
|
||||
#extract lines in a given date range from an xchat logfile
|
||||
#is a bit too hardcoded to be translated to other clients (gaim, etc)
|
||||
#sorry! Future update will see this more modular.
|
||||
use Getopt::Std;
|
||||
use strict;
|
||||
|
||||
#extractDate(\%hash, $line)
|
||||
#extract the contents of the date in line and put it in a hash
|
||||
#(hash is keyed by month, day, hour, minute, second)
|
||||
sub extractDate;
|
||||
#buildRegex($line)
|
||||
#build a regex from an input string of the form MM HH MM:SS:DD and return it
|
||||
sub buildRegex;
|
||||
|
||||
my %args;
|
||||
my $buffer;
|
||||
|
||||
#regexes for quick and easy pattern matching
|
||||
my $startregex;
|
||||
my $endregex;
|
||||
#start and end date hashes for more complex range matching
|
||||
my %startdate;
|
||||
my %enddate;
|
||||
# additional regex to check for in lines of output
|
||||
my $addlRegex = ".*";
|
||||
|
||||
#Yeah this is a bit hackish. Whaddya want from me? This is, like, my second perl script.
|
||||
my %monthvals = (
|
||||
Jan => 0,
|
||||
Feb => 1,
|
||||
Mar => 2,
|
||||
Apr => 3,
|
||||
May => 4,
|
||||
Jun => 5,
|
||||
Jul => 6,
|
||||
Aug => 7,
|
||||
Sep => 8,
|
||||
Oct => 9,
|
||||
Nov => 10,
|
||||
Dec => 11,
|
||||
jan => 0,
|
||||
feb => 1,
|
||||
mar => 2,
|
||||
apr => 3,
|
||||
may => 4,
|
||||
jun => 5,
|
||||
jul => 6,
|
||||
aug => 7,
|
||||
sep => 8,
|
||||
oct => 9,
|
||||
nov => 10,
|
||||
dec => 11,
|
||||
);
|
||||
|
||||
my $help;
|
||||
|
||||
$help = <<EOT;
|
||||
logger: filter X-Chat 2 log files by date
|
||||
logger <options> inputfile
|
||||
-h : this help
|
||||
-s : Starting date
|
||||
-e : Ending date
|
||||
-r : Further restrict the search to lines matching this regex (search, not replace)
|
||||
|
||||
inputfile defaults to stdin if no file provided
|
||||
|
||||
Dates are expected in "Month Day Hour:Minute:Second" format. Months
|
||||
are abbreviated to 3 letters, non-case sensitive. You must provide
|
||||
AT LEAST one regex. (If one is missing, then it is assumed that both -s
|
||||
and -e are equal.)
|
||||
|
||||
To search for all lines on the 13th of May:
|
||||
logger -s "May 13 *:*:*" xchatlogfile
|
||||
|
||||
To search for all lines between the 13th of May and the 20th of June:
|
||||
logger -s "May 13 *:*:*" -e "Jun 20 *:*:*" xchatlogfile
|
||||
|
||||
To search for all lines written between 5 and 10 pm in the entire log:
|
||||
logger -s "* * 17:*:*" -e "* * 22:*:*" xchatlogfile
|
||||
|
||||
As above, but only match lines containing "somenick"
|
||||
logger -s "* * 17:*:*" -e "* * 22:*:*" -r somenick xchatlogfile
|
||||
|
||||
EOT
|
||||
|
||||
getopt ( "hxs:e:f:r:", \%args );
|
||||
|
||||
# there's quite a bit of redundancy in the argument checking. Sue me.
|
||||
|
||||
if ( $args{h} ) {
|
||||
print $help;
|
||||
exit;
|
||||
}
|
||||
if ( $args{r} ) {
|
||||
$addlRegex = $args{r};
|
||||
}
|
||||
if ( $args{s} ) {
|
||||
$startregex = buildRegex($args{s});
|
||||
extractDate(\%startdate, $args{s});
|
||||
}
|
||||
if ( $args{e} ) {
|
||||
$endregex = buildRegex($args{e});
|
||||
extractDate(\%enddate, $args{e});
|
||||
}
|
||||
|
||||
if ( !$args{e} && !$args{s} ) {
|
||||
print $help;
|
||||
exit;
|
||||
}
|
||||
elsif ( !$args{e} || !$args{s} ) {
|
||||
if ( $args{s} ) {
|
||||
$endregex = $startregex;
|
||||
extractDate(\%enddate, $args{s});
|
||||
}
|
||||
elsif ( $args{e} ) {
|
||||
$startregex = $endregex;
|
||||
extractDate(\%startdate, $args{e});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
while ( <> ) {
|
||||
my $toPrint;
|
||||
if ( $_ =~ m/^\*\*\*\*/i || $_ =~ m/^\s*\n/i ) {
|
||||
# this is a xchat log status line (effectively a comment for our purpose)
|
||||
next;
|
||||
}
|
||||
if ( $_ =~ m/$startregex/i ||
|
||||
$_ =~ m/$endregex/i ) {
|
||||
$toPrint = $_;
|
||||
}
|
||||
else {
|
||||
# not lucky enough for an exact match ... check the date
|
||||
my %linedate;
|
||||
extractDate(\%linedate, $_);
|
||||
# check the dates to see if the date in the line is between startdate
|
||||
# and end date
|
||||
if ( !($enddate{month} eq "*") &&
|
||||
$monthvals{$linedate{month}} <= $monthvals{$enddate{month}} &&
|
||||
$monthvals{$linedate{month}} >= $monthvals{$startdate{month}} ) {
|
||||
|
||||
if ( !($enddate{day} eq "*") &&
|
||||
$linedate{day} <= $enddate{day} &&
|
||||
$linedate{day} >= $startdate{day} ) {
|
||||
|
||||
if ( !($enddate{hour} eq "*") &&
|
||||
$linedate{hour} <= $enddate{hour} &&
|
||||
$linedate{hour} >= $startdate{hour} ) {
|
||||
|
||||
if (!($enddate{minute} eq "*") &&
|
||||
$linedate{minute} <= $enddate{minute} &&
|
||||
$linedate{minute} >= $startdate{minute} ) {
|
||||
|
||||
if (!($enddate{second} eq "*") &&
|
||||
$linedate{second} <= $enddate{second} &&
|
||||
$linedate{second} >= $enddate{second} ) {
|
||||
$toPrint = $_;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $toPrint && ($toPrint =~ m/$addlRegex/) ) {
|
||||
print $toPrint;
|
||||
}
|
||||
}
|
||||
|
||||
sub buildRegex {
|
||||
my $orig = shift;
|
||||
# make sure to not muck up the original
|
||||
my $regex = $orig;
|
||||
|
||||
$regex =~ s/\s/\\s/g;
|
||||
$regex =~ s/\*/\.\*/g;
|
||||
|
||||
return $regex;
|
||||
}
|
||||
|
||||
sub extractDate {
|
||||
my $finalDate = shift; #expects a reference to a hash
|
||||
my $buff = shift; #expects a line of text from the logfile
|
||||
#expects buff in the form MM DD HH:MM:SS
|
||||
my @date = split " ", $buff;
|
||||
my @time = split ":", $buff;
|
||||
|
||||
$time[0] =~ s/$date[0]\s$date[1]\s//;
|
||||
|
||||
$finalDate->{month} = $date[0];
|
||||
$finalDate->{day} = $date[1];
|
||||
$finalDate->{hour} = $time[0];
|
||||
$finalDate->{minute} = $time[1];
|
||||
|
||||
my @splitline = split " ", $time[2];
|
||||
$finalDate->{second} = $splitline[0];
|
||||
}
|
||||
94
portscan.pl
Executable file
94
portscan.pl
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/perl -w
|
||||
#This could really stand to be improved, but it works for basic purposes
|
||||
#right now of identifying open ports on the given host.
|
||||
#The big improvement would be a hash containing basic jibberish to
|
||||
#send to given ports (eg 22, 21, 25, 80, 110) to see if they're
|
||||
#running standard services.
|
||||
|
||||
use IO::Socket;
|
||||
use Getopt::Std;
|
||||
use strict;
|
||||
|
||||
my %args;
|
||||
my $socket;
|
||||
my $host = "127.0.0.1";
|
||||
my $lowport = 0;
|
||||
my $highport = 65535;
|
||||
my $wait = 10;
|
||||
my $outfile;
|
||||
my $jibberish = "\n";
|
||||
my $usage = <<EOT;
|
||||
|
||||
portscan.pl : scan a range of ports on a given host and report active ports
|
||||
-h : this help
|
||||
-t : the target hostname or IP address (defaults to 127.0.0.1)
|
||||
-m : minimum port number (defaults to 1)
|
||||
-M : maximum port number (defaults to 65535)
|
||||
-w : timeout time (wait this long to drop attempt - defaults to
|
||||
10 seconds)
|
||||
-f : write results to specified logfile instead of stdout
|
||||
-v : be particularly verbose
|
||||
-j : specify the jibberish to send to the ports found to elicit
|
||||
a response
|
||||
EOT
|
||||
|
||||
getopts("ht:m:M:w:vf:j:", \%args);
|
||||
|
||||
if ( defined $args{h} ) {
|
||||
print $usage;
|
||||
exit;
|
||||
}
|
||||
if ( defined $args{t} ) {
|
||||
$host = $args{t};
|
||||
}
|
||||
if ( defined $args{m} ) {
|
||||
$lowport = $args{m};
|
||||
}
|
||||
if ( defined $args{M} ) {
|
||||
$highport = $args{M};
|
||||
}
|
||||
if ( defined $args{w} ) {
|
||||
$wait = $args{w};
|
||||
}
|
||||
if ( defined $args{j} ) {
|
||||
$jibberish = $args{j};
|
||||
}
|
||||
if ( !$host ) {
|
||||
print $usage;
|
||||
exit;
|
||||
}
|
||||
if ( defined $args{f} ) {
|
||||
open($outfile, ">$args{f}")
|
||||
or die "Couldn't open output file $args{f}";
|
||||
}
|
||||
|
||||
foreach ( $lowport ... $highport ) {
|
||||
my $response = "";
|
||||
if ( $args{v} ) {
|
||||
$response .= "trying $host port $_\n";
|
||||
}
|
||||
$socket = IO::Socket::INET->new(PeerAddr => $host,
|
||||
PeerPort => $_,
|
||||
Proto => "tcp",
|
||||
Type => SOCK_STREAM,
|
||||
Timeout => $wait)
|
||||
or next;
|
||||
$response .= "Got socket on $host port $_\n";
|
||||
if ( $socket && $args{v} ) {
|
||||
# got a connection, let's throw some jibberish at it and
|
||||
# see what happens!
|
||||
print $socket $jibberish;
|
||||
my $response .= <$socket>;
|
||||
close($socket);
|
||||
}
|
||||
if ( $outfile ) {
|
||||
print $outfile $response;
|
||||
}
|
||||
else {
|
||||
print $response;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $outfile ) {
|
||||
close($outfile);
|
||||
}
|
||||
96
updateHosts.pl
Executable file
96
updateHosts.pl
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/perl -w
|
||||
# updateHosts.pl Andrew Kesterson andrew@aklabs.net
|
||||
# update the system hosts file with Mike's ad blocking file
|
||||
# patch it up to include the newest entries
|
||||
# this obviously needs to run as root if you're working on /etc/hosts
|
||||
|
||||
# I'm still learning perl. Don't harsh me too much.
|
||||
|
||||
use strict;
|
||||
use LWP::Simple;
|
||||
use Socket;
|
||||
use Getopt::Std;
|
||||
use Time::localtime;
|
||||
|
||||
my $URL = "http://everythingisnt.com/hosts";
|
||||
my $hostfile = "/etc/hosts";
|
||||
my $buffer;
|
||||
my %args;
|
||||
my $updating = 0;
|
||||
my $usage = <<EOT;
|
||||
|
||||
updateHosts.pl : update your hosts file from Mike's ad blocking
|
||||
file at http://everythingisnt.com/hosts. New hosts are added,
|
||||
nothing is removed.
|
||||
-h : this help
|
||||
-v : be verbose (default is to stay silent until an error occurs)
|
||||
-u : specify alternate hosts URL. Must be a UNIX /etc/hosts file
|
||||
(defaults to Mike's ad blocking file)
|
||||
-f : specify alternate filename to patch (defaults to /etc/hosts)
|
||||
|
||||
EOT
|
||||
|
||||
getopts("hvu:f:", \%args);
|
||||
|
||||
if ( $args{h} ) {
|
||||
print $usage;
|
||||
exit;
|
||||
}
|
||||
if ( $args{u} ) {
|
||||
$URL = $args{u};
|
||||
}
|
||||
if ( $args{f} ) {
|
||||
$hostfile = $args{f};
|
||||
}
|
||||
|
||||
unless (defined ( $buffer = get $URL ) ) {
|
||||
die "Couldn't grab updated host file from $URL\n";
|
||||
}
|
||||
|
||||
my @newHosts = split /\n/, $buffer;
|
||||
open(hostsFile, ">>$hostfile") or die "Couldn't open $hostfile for writing.";
|
||||
|
||||
if (defined $args{v} ) {
|
||||
print "Beginning update; due to calls to gethostbyname, the program might appear to hang while waiting to resolve.\n";
|
||||
}
|
||||
|
||||
HOSTS: foreach my $host ( @newHosts ) {
|
||||
$host =~ m/(127.0.0.1\s\w.*)/;
|
||||
if ( defined $1 ) {
|
||||
$host = $1;
|
||||
$host =~ s/127.0.0.1\s//;
|
||||
$host =~ s/\s.*//;
|
||||
}
|
||||
else {
|
||||
# this should've returned us a hostname...
|
||||
next;
|
||||
}
|
||||
|
||||
my @addresses = gethostbyname($host);
|
||||
# just checking to see if it already exists in etc-hosts as 127.0.0.1
|
||||
@addresses = map { inet_ntoa($_) } @addresses[ 4 ... $#addresses];
|
||||
foreach my $addr ( @addresses ) {
|
||||
if ( $args{v} ) {
|
||||
print "checking 127.0.0.1 against address for $host : $addr\n";
|
||||
}
|
||||
if ( $addr eq "127.0.0.1" ) {
|
||||
# skip this one.
|
||||
next HOSTS;
|
||||
}
|
||||
else {
|
||||
if ( $args{v} ) {
|
||||
print "adding $host\n";
|
||||
}
|
||||
if ( !$updating ) {
|
||||
# add a comment with the date if this is the first entry
|
||||
my $time = localtime;
|
||||
print hostsFile "\n# Updates from ", $time->year+1900 ,
|
||||
"-", $time->mon+1, "-", $time->mday, "\n";
|
||||
$updating = 1;
|
||||
}
|
||||
print hostsFile "127.0.0.1\t", $host, "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close hostsFile;
|
||||
Reference in New Issue
Block a user