#!/usr/bin/perl require "cookie.lib"; &GetCookies(); print"Content-type: image/x-xbitmap\n"; $alreadyLoaded=0; $new=0; $host1="mama.indstate.edu/users/aphi"; $host2="mama.indstate.edu/users/aphi"; if (($Cookies{'pw'} ne "") && ($Cookies{'login'} eq "")) { dbmopen(USERS,"user_accounts",400); $id=$Cookies{'persID'}; $user=$USERS{"$id"}; ($a,$b,$c,$d)=split(/\|/,$user); if ($Cookies{'pw'} eq $a) { ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($sec < 10) {$sec = "0$sec";} if ($min < 10) {$min = "0$min";} if ($hour < 10) {$hour = "0$hour";} if ($mon < 10) {$mon = "0$mon";} if ($mday < 10) {$mday = "0$mday";} $month = ($mon + 1); $year+=1900; @months = ("January","February","March","April","May","June","July","August","September","October","November","December"); $date = "$hour\:$min\:$sec $month/$mday/$year"; $USERS{"$id"}=$a."\|".$b."\|".$c."\|".$date; $Cookie_Exp_Date=""; &SetCookies("login",$id); &SetCookies("security",$c); &SetCookies("email",$b); } dbmclose(USERS); } if ($Cookies{'IGNORE'} ne "YES") { open(LOCKER,"footprints.dat"); flock(LOCKER,2); $urit = &getDomain($ENV{'HTTP_REFERER'}); ($referer,$screenx,$screencolors,$random,$browser) = split(/\`/,$ENV{'QUERY_STRING'}); $referer=&lowerCaseHost($referer); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $mon++; if ($Cookies{'persID'} eq "") { $newflag=&setIDCookie(); } $tags = ""; if (($Cookies{'today'} eq "")&&($referer!~/$host1/)&&($referer!~/$host2/)) { if (&IsNewSession() == 1) { $tags = "/*Sess*"; &recordunique(); if ($newflag==1) { &recordnew(); $tags = "/*1st*"; $new=1; } } } $ua = $ENV{'HTTP_USER_AGENT'}; &loghit(); flock(LOCKER,4); close(LOCKER); } print "\n"; print<<"EndOfImage"; #define count_width 1 #define count_height 1 static char count_bits[] = {0x00}; EndOfImage sub IsNewSession() { open(IN,"footprints.dat"); @DAT=; close IN; $alreadyLoaded=1; $timenow=$sec+$min*60+$hour*3600+$mday*86400; $newsess=-1; $lineat=scalar(@DAT)-1; do { $line = $DAT[$lineat]; $lineat--; ($lmon,$lmday,$lyear,$lhour,$lmin,$lsec,$luri,$lremaddr,$more)=split(/\|/,$line); $timeline=$lsec+$lmin*60+$lhour*3600+$lmday*86400; if ($timeline+3600 > $timenow) { if ($lremaddr eq $ENV{'REMOTE_ADDR'}) { $newsess=0; } } else { $newsess = 1; } } while (($newsess == -1)&&($linenum>0)); if ($newsess==-1) {$newsess=1;} return $newsess; } sub UniqueHit() { if ($alreadyLoaded == 0) { open(IN,"footprints.dat"); @DAT=; close IN; $alreadyloaded=1; } $timenow=$sec+$min*60+$hour*3600+$mday*86400; $unique=-1; $linenum=scalar(@DAT)-1; do { $line = @DAT[$linenum]; $linenum--; ($lmon,$lmday,$lyear,$lhour,$lmin,$lsec,$luri,$lremaddr,$more)=split(/\|/,$line); $timeline=$lsec+$lmin*60+$lhour*3600+$lmday*86400; if ($timeline+5 > $timenow) { if (($lremaddr eq $ENV{'REMOTE_ADDR'}) && ($luri eq $uri)) { $unique=0; } } else { $unique = 1; } } while (($unique == -1)&&($linenum>0)); if ($unique ==-1) {$unique=1;} return $unique; } sub ReplaceNojsLine() { print FILE "$mon|$mday|$year|$hour|$min|$sec|$uri|$ENV{'REMOTE_ADDR'}|$referer|$gha_host|$who$tags\n"; open(IN,"footprints.dat"); @DAT=; close IN; $timenow=$sec+$min*60+$hour*3600+$mday*86400; $done=-1; $linenum = scalar(@DAT)-1; do { $line = $DAT[$linenum]; ($lmon,$lmday,$lyear,$lhour,$lmin,$lsec,$luri,$lremaddr,$lref,$lhost,$lwho)=split(/\|/,$line); if (($lremaddr eq $ENV{'REMOTE_ADDR'}) && ($luri eq $uri)) { $DAT[$linenum]="$lmon|$lmday|$lyear|$lhour|$lmin|$lsec|$uri|$lremaddr|$referer|$lhost|$lwho"; $done=1; } $linenum--; } while ($done != 1); open(OUT,">footprints.dat"); foreach $line (@DAT) { chomp($line); print OUT "$line\n"; } close OUT; return; } sub setIDCookie { $whoisit=&CheckIDCookie(); $wasitnew=1; if (($whoisit eq "GIVENEW")||($whoisit eq "")) { &writeIDCookie(); } else { $Cookies{'persID'} = $whoisit; $Cookie_Exp_Date = "Fri, 31-Dec-2010 23:59:59 GMT"; &SetCookies('persID', $Cookies{'persID'}); $Cookie_Exp_Date = ''; $wasitnew=0; } return $wasitnew; } sub CheckIDCookie { if ($alreadyLoaded != 1) { open(IN,"footprints.dat"); @DAT=; close IN; $alreadyLoaded=1; } $timenow=$sec+$min*60+$hour*3600+$mday*86400; $newsess=""; $lineat=scalar(@DAT)-1; do { $line = $DAT[$lineat]; $lineat--; ($lmon,$lmday,$lyear,$lhour,$lmin,$lsec,$luri,$lremaddr,$lref,$lhost,$lwho)=split(/\|/,$line); $timeline=$lsec+$lmin*60+$lhour*3600+$lmday*86400; if ($timeline+3600 > $timenow) { if ($lremaddr eq $ENV{'REMOTE_ADDR'}) { $newsess = $lwho; chomp($newsess); if ($newsess=~/\//) {($newsess,$trash)=split(/\//,$lwho);} $newsess=~s/^GUEST-//g; } } else { $newsess = "GIVENEW"; } } while (($newsess eq "")&&($lineat>0)); return $newsess; } sub writeIDCookie { open (FILE, "guestnum.dat"); $num = ; close (FILE); $num += 1; $Cookies{'persID'} = "GUEST".$num; open (FILE,">guestnum.dat"); print FILE "$num\n"; close (FILE); $Cookie_Exp_Date = "Fri, 31-Dec-2010 23:59:59 GMT"; &SetCookies('persID', $Cookies{'persID'}); $Cookie_Exp_Date = ''; } sub recordnew() { &setIDCookie(); dbmopen(%MDY,"newhits",666); $MDY{"$mon|$mday|$year"} += 1; dbmclose(%MDY); } sub recordunique() { $Cookie_Exp_Date = ""; &SetCookies('today',"today"); $Cookie_Exp_Date = "Thu, 31-Dec-2099 23:59:59 GMT"; dbmopen(%MDY,"dailyhits",666); $MDY{"$mon|$mday|$year"} += 1; dbmclose(%MDY); $unique = 1; } sub JSLogs() { dbmopen(%TOT,"totalhits",0600); $TOT{'js'} += 1; dbmclose(%TOT); dbmopen(%SIZE,"screenhits",0600); $SIZE{"$screenx"} += 1; dbmclose(%SIZE); dbmopen(%COLOR,"colorhits",0600); $COLOR{"$screencolors"} +=1; dbmclose(%COLOR); if (($ref ne $urit)&&($tags ne "")&&($unique == 1)) { dbmopen(%REF,"refhits",666); $REF{"$ref"} += 1; dbmclose(%REF); } } sub loghit() { if ($Cookies{'login'} eq "") { $who = "GUEST-" . $Cookies{'persID'};} else{ $who = $Cookies{'login'}; } local($packed_address) = pack("C4",split(/\./,$ENV{'REMOTE_ADDR'})); ($gha_host,$gha_aliases,$gha_type,$gha_length,@gha_addrs) = gethostbyaddr($packed_address,2); $gha_addresses = ""; foreach (@gha_addrs) { $gha_addresses .= join(".",unpack("C4",$_)) . " "; } $uri = $ENV{'HTTP_REFERER'}; $uri=&lowerCaseHost($uri); if ($uri=~/$host1/) { ($a,$uri)=split(/${host1}/,$uri); ($uri,$trash)=split(/\?/,$uri); } if ($uri=~/$host2/) { ($a,$uri)=split(/${host2}/,$uri); ($uri,$trash)=split(/\?/,$uri); } $ua .="`".$browser; if ($referer eq "") {$referer = "(no referer)"; $ref = $referer;} else { $ref = &getDomain($referer); } if (($referer=~/$host1/)||($referer=~/$host2/)) { $referer=~s/$host1//g; $referer=~s/$host2//g; $referer=~s/http\:\/\///g; ($referer,$trash)=split(/\?/,$referer); } if (&UniqueHit() == 1) { if ($tags ne "") { dbmopen(%ENTRY,"entryhits",0600); $ENTRY{$uri} +=1; dbmclose(%ENTRY); } if ($ENV{'QUERY_STRING'} ne "nojs") { &JSLogs(); } else { dbmopen(%TOT,"totalhits",0600); $TOT{'nojs'} += 1; dbmclose(%TOT); } open(FILE, ">>footprints.dat"); print FILE "$mon|$mday|$year|$hour|$min|$sec|$uri|$ENV{'REMOTE_ADDR'}|$referer|$gha_host|$who$tags\n"; close(FILE); dbmopen(%UA,"uahits",0600); $UA{"$ua"} += 1; dbmclose(%UA); dbmopen(%MDY,"mdyhits",666); $MDY{"$mon|$mday|$year"} += 1; dbmclose(%MDY); dbmopen(%HOUR,"hourhits",666); $HOUR{"$hour"} +=1; dbmclose(%HOUR); dbmopen(%URI,"urihits",666); $URI{"$uri"} += 1; dbmclose(%URI); dbmopen(%HOST,"hosthits",666); $HOST{"$gha_host"} += 1; dbmclose(%HOST); ($add,$ref) = split(/\?/,$referer); (@terms) = split(/&/,$ref); foreach $term (@terms) { ($terma,$keys) = split(/=/,$term); if (($terma eq "search")||($terma eq "q")||($terma eq "p")||($terma eq "searchText")||($terma eq "query") ||($terma eq "qt")||($terma eq "keyword")||($terma eq "MT")) { ®isterkeys();} } } else { if ($ENV{'QUERY_STRING'} ne "nojs") { &JSLogs(); dbmopen(%TOT,"totalhits",0600); $TOT{'nojs'} -= 1; dbmclose(%TOT); &ReplaceNojsLine(); } } } sub lowerCaseHost() { $address=@_[0]; if ($address ne "") { ($lcprot,$rest)=split(/\:\/\//,$address); ($lchost,@lcpath)=split(/\//,$rest); $lchost=lc($lchost); $lchost=~s/^www.//g; $address=lc($lcprot)."\:\/\/".lc($lchost); foreach $segment (@lcpath) { $address.="\/".$segment; } } return $address; } sub registerkeys() { (@keyz) = split(/\+/,$keys); dbmopen(%KEYS,"keyhits",666); foreach $key (@keyz) { $KEYS{lc($key)} += 1;} dbmclose(%KEYS); } sub getDomain() { my $url = @_[0]; ($one,$two,$three) = split(/\//,$url); return $one."//".$three; }