#!/usr/bin/perl
use strict;
# tallylog.pl
# by Nicholas Keene, September 2012
# this script takes the
# name of a log file and the name of a service then processes a log file to print summary information
# based on the inputs.
my ($logfile, $service) = @ARGV;
if (!-e $logfile) {
print "Specified logfile does not exist.\n";
} elsif (-d $logfile) {
print "Specified logfile must be a file, not a Directory.\n";
} else {
TallyLogFile($logfile, $service);
}
# TallyLogFile
# Takes the name of a logfile and the name of a service
# Prints how many times each user accessed the log file from an IP address
# Note: only counts authorized access, not denied access
# Note: does not sort output; output order is unspecified
sub TallyLogFile {
my $logfile = shift;
my $service = shift;
my %users = ();
open LOGFILE, "<", $logfile;
while () {
if( $_ =~ m/^.*Authorized User \((.*)\) for service "$service" from (.*).$/) {
#print "Found: $1, $2, $3\n";
if(!defined $users{$1} or !defined $users{$1}{$2}) {
$users{$1}{$2} = 1;
} else {
$users{$1}{$2}++;
}
}
}
foreach my $user (keys %users) {
print "$user\n";
foreach my $ip (keys %{ $users{$user} } ) {
my $count = $users{$user}{$ip};
printf "%17s: %s\n", $ip, $count;
}
}
}
I don't have a lot to say, but this is my little bit.
Monday, October 29, 2012
tallylog.pl - Find Matching Log Entries
This is a bit of perl code which finds and prints only logfile entries matching desired variables.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment