#!/usr/bin/perl
use DB_File;
#---------------------------------------------------------#
# Copyright January 18, 1999 by David Sontag #
# of web-page-services.com #
#---------------------------------------------------------#
# This file may not be modified and/or distributed #
# for sale in any way without the permission of #
# web-page-services.com. Send all comments, questions, #
# or requests, to webmaster@web-page-services.com #
#---------------------------------------------------------#
# Other than that, you are free to use this program #
# for your own personal use. This header and the #
# copyright information on the program's output must #
# remain in all redistributions. Full credit must be #
# given to web-page-services.com #
#---------------------------------------------------------#
print "Content-type: text/html\n\n";
print "\n\n
\nResults \n\n\n\n\n";
print "\n";
#---------------Checks files for parameters to program----------------#
#------Location of Host Name DBM file (will be created)---#
$host = "hosts.dbm";
#---------------------------------------------------------#
open(HOST, "hostnames");
print "\n";
print "excluded hostnames: ";
while()
{
chomp;
if($_ ne "")
{
print $_." ";
push(@badHosts, $_);
}
}
close(FILE);
open(FILE, "filenames");
print " excluded filenames: ";
while()
{
chomp;
if($_ ne "")
{
print $_." ";
push(@badFiles, $_);
}
}
close(FILE);
print "
\n\n";
open(LOG, "location");
while()
{
chomp;
if($_ ne "")
{
$logFile = $_;
last;
}
}
close(LOG);
open(TIME, "time");
while()
{
chomp;
if($_ ne "")
{
$fromTime = $_;
use Time::Local;
%months = ( "Jan" => 0,
"Feb" => 1,
"Mar" => 2,
"Apr" => 3,
"May" => 4,
"Jun" => 5,
"Jul" => 6,
"Aug" => 7,
"Sep" => 8,
"Oct" => 9,
"Nov" => 10,
"Dec" => 11
);
last;
}
}
close(TIME);
$wasZipped = 0;
if($logFile =~ /.gz/)
{
`gunzip $logFile`;
$wasZipped = 1;
($logFile, $garbage) = split(/\./, $logFile);
}
#---------------------------------------------------------------------#
dbmopen %hosts, $host, 0666;
open(LOG, $logFile);
while()
{
($ip, $g1, $g2, $time, $g3, $g4, $file, $g5, $okay, $g6) = split(/ /, $_);
$time = substr($time, 1, 20);
($date, $hour, $minute, $second) = split(/:/, $time);
$badF = 0;
if($fromTime) {
($mday, $mon, $year) = split(/\//, $date);
$time = timelocal(0, 0, 0, $mday, $months{$mon}, $year);
if($time < $fromTime) { $badF = 1; }
}
for($i=0; $i <= $#badFiles; $i++)
{
if($file =~ /$badFiles[$i]/)
{
$badF = 1;
}
}
if(!$badF)
{
if(!exists $hosts{$ip}) {
if($ip !~ /[a-zA-Z]/)
{
@bytes = split(/\./, $ip);
$packaddr = pack("C4",@bytes);
$hostname = gethostbyaddr($packaddr, 2);
if($hostname eq "") { $hosts{$ip} = $ip; }
else { $hosts{$ip} = $hostname; }
}
else {
$hosts{$ip} = $ip;
}
}
$bad = 0;
for($i=0; $i <= $#badHosts; $i++)
{
if($hosts{$ip} =~ /$badHosts[$i]/)
{
$bad = 1;
}
}
if(!$bad)
{
if($hour > 12) { $hour -= 12; $day="PM"; }
elsif($hour == 12) { $day="PM"; }
else { $day="AM"; }
$time = $date." \;- \;".$hour.":".$minute." ".$day;
$user{$ip} .= $file." ".$time." ".$okay."\n";
$page{$file} .= $ip." ".$time." ".$okay."\n";
}
}
}
close(LOG);
$numbOfIp=0;
$count=0;
while(($ip, $param) = each %user)
{
$numbOfIp++;
$b4 = $count;
(@lines) = split(/\n/, $param);
foreach $line (@lines)
{
($file, $time, $ok) = split(/ /, $line);
$row2[$count] = $file;
$row3[$count] = $time;
$row4[$count] = $ok;
$count++;
}
$rows = $count - $b4;
$row1[$b4] = $hosts{$ip}."=".$rows;
}
print "\n";
print " ";
print " \n\n";
print " \n";
print "User File Date/Time Ok \n";
for($i=0; $i < $count; $i++)
{
print "\n";
if($row1[$i] ne "")
{
($row1, $height) = split(/=/, $row1[$i]);
print "$row1 \n";
}
print "$row2[$i] \n$row3[$i] \n$row4[$i] \n \n";
}
print "
\n \n\n";
#----------------------------------------------------------------
$numbOfFiles=0;
$numbOfFilesR=0;
$count=0;
while(($file, $param) = each %page)
{
$numbOfFiles++;
$b4 = $count;
(@lines) = split(/\n/, $param);
foreach $line (@lines)
{
$numbOfFilesR++;
($ip, $time, $ok) = split(/ /, $line);
$row2[$count] = $hosts{$ip};
$row3[$count] = $time;
$row4[$count] = $ok;
$count++;
}
$rows = $count - $b4;
$row1F[$b4] = $file."=".$rows;
}
print "\n";
print " ";
print " \n\n";
print " \n";
print "File User Date/Time Ok \n";
for($i=0; $i < $count; $i++)
{
print "\n";
if($row1F[$i] ne "")
{
($row1, $height) = split(/=/, $row1F[$i]);
print "$row1 ";
if($height > 3) { print " (# of page views - $height)"; }
print " \n";
}
print "$row2[$i] \n$row3[$i] \n$row4[$i] \n \n";
}
print "\n
\n";
print "\n";
print " ";
print "\n\n \nSummary: \n";
print "Number of unique users (domains) - $numbOfIp \n";
print "Number of unique files hit - $numbOfFiles \n";
print "Total number of files requested - $numbOfFilesR \n";
print "
\n\n";
print " \n\n\n\n\n";
print "\n\n \n";
dbmclose %hosts;
#---------------------------------------------------------------------#
if($wasZipped)
{
`gzip $logFile`;
}