#!/usr/bin/perl5 -w # Script: trackthis.pl (rg.cgi) # Authour: MAST Communications mast@interlog.com # Modified by: Tom Brown # For: The Roberts Group # Last Modified: February 25, 1998 $| = 1; # set $sendgif to 0 to use server side includes to invoke the script # if $sendgif is set to 1, invoke the script with an IMG tag on the HTML # page to be logged # e.g. my $sendgif = 1; # send gif @gif = qw(47 49 46 38 39 61 01 00 01 00 80 00 00 ff ff ff 00 00 00 21 f9 04 01 00 00 00 00 2c 00 00 00 00 01 00 01 00 00 02 02 44 01 00 3b); if ($sendgif) { print "Content-type: image/gif\n\n", pack("c43", map hex($_), @gif); } # global variables my ($dir,$sec,$min,$hour,$mday,$mon,$year,@garbage,$pages,@junk, @pages,$host,$realhost,$IP,$browser,$page,@fields, $real_page,$real_browser); $recipient1 = 'broberts@interlog.com'; $recipient2 = 'tom@tntt.com'; $max_entries = 500; $dir = '/user/br/broberts'; $error = '/user/br/broberts/public_html/nocache/rgerror.log'; $logfile = '/user/br/broberts/public_html/nocache/rghits.txt'; $bak = '/user/br/broberts/public_html/nocache/rgsummary.txt'; $mailprog = '/usr/sbin/sendmail'; # get the date ($min,$hour,$mday,$year) = (localtime)[1,2,3,5]; ($min < 10) ? $min = "0$min" : $min = $min; $mon = ('01' .. '12')[(localtime)[4]]; $year += 1900; $shortdate = "$mon/$mday/$year $hour:$min"; # stuff to get around Interlog's Cache system $realhost = $ENV{'REMOTE_ADDR'}; $realhost =~ s/\s.*//; # resolve host name from IP address $IP = $realhost; ($a,$b,$c,$d) = split /\./,$IP; $ipadr = pack "C4",$a,$b,$c,$d; ($host,@junk)=(gethostbyaddr("$ipadr", 2)); unless (($IP) && $IP =~ m(199\.212\.155\.202)) { # format the data to be printed in the log $real_browser = $ENV{'HTTP_USER_AGENT'}; @fields = split /\s+/, $real_browser; $browser = "$fields[0] $fields[1] $fields[2]"; $browser =~ s/via.*//g; if ($sendgif) { $real_page = $ENV{'HTTP_REFERER'}; @pages = split /\/+/,$real_page; shift @pages; shift @pages; shift @pages; } else { $real_page = $ENV{'DOCUMENT_URI'}; @pages = split /\//,$real_page; ($x,$y,@pages) = @pages; } $page = join "/",@pages; # add data to log open FILE, ">>$logfile" or &ErrorLog("Can't open $logfile: $!\n"); print FILE "$shortdate\|$real_page\|$browser\|$host\n"; close FILE; open FILE, $logfile; @filetext = ; $log_count = @filetext; close FILE; if ($log_count >= $max_entries) { open MAIL, "|$mailprog -t -oi" or &ErrorLog("Can't fork $mailprog: $!\n"); print MAIL "To: $recipient1\n"; print MAIL "From: $recipient1\n"; print MAIL "Cc: $recipient2\n"; print MAIL "Subject: Log File\n\n"; print MAIL qq(Latest 500 Roberts Group Hits now available at); print MAIL qq(http://www.interlog.com/~broberts/nocache/rgsumpage.cgi\n); close MAIL; open OLDLOG, ">$bak" or &ErrorLog("Can't open $bak: $!\n"); print OLDLOG @filetext; close OLDLOG; open FILE, ">$logfile"; print ""; close FILE; } } sub ErrorLog { local($msg) = @_; open FILE, ">>$error"; print FILE "$shortdate - rg.cgi error: $msg"; close FILE; } exit;