#!/usr/local/bin/perl # logcheck $version ="0.56 ALPHA"; $logfile ="accesslog.txt"; require 'domain.pl'; @pairs = split(/&/, $ENV{'QUERY_STRING'}); foreach $pair (@pairs) { ($key, $value) = split(/=/, $pair); $key =~ tr/+/ /; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("c",hex($1))/ge; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("c",hex($1))/ge; $FORM{$key} = $value; $value =~ s/([\\\'])/\\$1/g; eval("\$$key = \'$value\'"); } print "Content-type: text/html\n\n"; &header; unless ($type ne "" || $callday ne "" || $calluri ne "") { &main; } else{ open (DATA,"$logfile"); if ($type == 11){ while(){ @data = split(/\t/,$_); &timing1; } &data_close; &timing_write1; } elsif ($type == 14){ while(){ @data = split(/\t/,$_); &timing2; } &data_close; &timing_write4; } elsif ($type == 21){ while(){ @data = split(/\t/,$_); &host1; } &data_close; &host_written; } elsif ($type == 22){ while(){ @data = split(/\t/,$_); &host2; } &data_close; &host_written; } elsif ($type == 24){ while(){ @data = split(/\t/,$_); &host3; } &data_close; &host_written3; } elsif ($type == 31){ while(){ @data = split(/\t/,$_); &agent1; } &data_close; &agent_written; } elsif ($type == 32){ while(){ @data = split(/\t/,$_); &agent2; } &data_close; &agent_written; } elsif ($type == 33){ while(){ @data = split(/\t/,$_); &agent3; } &data_close; &agent_written; } elsif ($type == 41){ while(){ @data = split(/\t/,$_); &referer1; } &data_close; &referer_written1; } elsif ($type == 42){ while(){ @data = split(/\t/,$_); &referer2; } &data_close; &referer_written2; } elsif ($type == 43){ while(){ @data = split(/\t/,$_); &referer3; } &data_close; &referer_written2; } elsif ($type == 51){ while(){ @data = split(/\t/,$_); &uri1; } &data_close; &uri_written1; } elsif ($callday ne ""){ if ($calluri ne "" && $calluri ne "total") { while(){ @data = split(/\t/,$_); &uri_referer2; } &data_close; &uri_referer_written1; } elsif ($calluri eq "total") { while(){ @data = split(/\t/,$_); &uri_referer3; } &data_close; &uri_referer_written2; } else { while(){ @data = split(/\t/,$_); &uri3; } close(DATA); &uri_written3; } } elsif ($calluri ne ""){ while(){ @data = split(/\t/,$_); &uri_referer1; } &data_close; &uri_referer_written1; } } &footer; exit; ## end sub data_close { $number =$.; close(DATA); } sub main{ print "

logcheck

\n"; print "
    \n"; print "
  • TIME\n"; print "\n"; print "
  • REMOTE_HOST\n"; print "\n"; print "
  • HTTP_USER_AGENT\n"; print "\n"; print "
  • HTTP_REFERER\n"; print "\n"; print "
  • DOCUMENT_URI\n"; print "
\n"; print "\n"; } sub header { print "\n"; print "\n"; print "logcheck\n"; print "\n"; print "\n"; print "\n"; } sub footer { $time =times; print "
$time"; print "
version : $version
"; print "
\n"; print "\n"; print "\n"; exit; } sub timing1{ ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($data[1]); $mon++; $hour =sprintf("%.2d",$hour); $mday =sprintf("%.2d",$mday); $mon =sprintf("%.2d",$mon); $year += 1900; $week{$wday} = ++$week{$wday}; $hours{$hour} = ++$hours{$hour}; $days{"$year\/$mon\/$mday"} = ++$days{"$year\/$mon\/$mday"}; $week{"$year\/$mon\/$mday"} = $wday if $days{"$year\/$mon\/$mday"} == 1; } sub timing_write1{ local($wday,$i,$data,$persent); local(@sortedweek, @sortedhours, @sorteddays, @week); print "

week

\n"; @week =('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); @sortedweek = sort keys(%week); for($i = 0 ; $i < 7 ; $i++){ $persent = &persent($week{$i}, $number); print "$week[$i]\n - $week{$i} ($persent \%)
\n"; } print "
\n"; print "

hours

\n"; @sortedhours = sort keys(%hours); foreach(@sortedhours){ $persent = &persent($hours{$_}, $number); print "$_ - $hours{$_} ($persent \%)
\n"; } print "
\n"; print "

day

\n"; @sorteddays = sort keys(%days); foreach (@sorteddays){ print "$_ $week[$week{$_}] $days{$_}
\n"; } print "
\n"; print "total:$number"; } sub timing2 { ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($data[1]); $mon++; $mday = sprintf("%.2d",$mday); $mon = sprintf("%.2d",$mon); $year += 1900; @week =('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $wday = $week[$wday]; $days{"$year\/$mon\/$mday"} = ++$days{"$year\/$mon\/$mday"}; $week{"$year\/$mon\/$mday"} = $wday if $days{"$year\/$mon\/$mday"} == 1; } sub timing_write4 { local(@sorteddays, @week); print "

day

\n"; @sorteddays = sort keys(%days); foreach(@sorteddays){ print "$_ $week{$_} $days{$_}
\n"; } print "
\ntotal:$number"; } sub host1{ $host{$data[2]} = ++$host{$data[2]}; } sub host2{ local($hostend, @hostdata); if($data[2] =~ /jp$/) { @hostdata = split(/\./, $data[2]); @hostdata = splice(@hostdata, $#hostdata - 2); $hostend = join(".", @hostdata); } elsif ($data[2] =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/) { $hostend = "ip_adress"; } else { $hostend = &domain'host($data[2]); } $host{"\L$hostend\E"} = ++$host{"\L$hostend\E"}; } sub host3{ local($jp_hostend, @hostdata); if($data[2] !~/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/){ @hostdata = split(/\./, $data[2]); $host{"\L$hostdata[$#hostdata]\E"} = ++$host{"\L$hostdata[$#hostdata]\E"}; if($data[2] =~ /jp$/) { @jp_hostend = splice(@hostdata, $#hostdata - 1); $jp_host{"\L$jp_hostend[0]\E"} = ++$jp_host{"\L$jp_hostend[0]\E"}; } } else{ $host{ip_adress} = ++$host{ip_adress}; } } sub host_written{ local($persent); local(@sortedhost); @sortedhost = sort by_host keys(%host); foreach (@sortedhost){ $persent = &persent($host{$_}, $number); print "$host{$_} ($persent \%) : $_
\n"; } print "
\n"; print "total:$number"; } sub host_written3 { local($persent); local(@sortedhost, @sortedjp_host, @jp_domain, @domainjp, @domain); @sortedhost = sort by_host keys(%host); @domain = &domain'top_domain(@sortedhost); $i = 0; $j = 0; foreach (@sortedhost){ $persent = &persent($host{$_}, $number); print "$host{$_} ($persent \%) : $_"; print " - $domain[$i]" if $domain[$i] ne "0"; print "
"; $i++; if ($_ eq "jp") { @sortedjp_host = sort by_jp_host keys(%jp_host); @domainjp = &domain'jpsecond_domain(@sortedjp_host); print "
\n"; foreach(@sortedjp_host) { $persent = &persent($jp_host{$_}, $number); @jp_domain = split(/\./, $_); print "$jp_host{$_} ($persent \%) : $_\.jp"; print " - $domainjp[$j]" if $domainjp[$j] ne "0"; print "
\n"; $j++; } print "
\n"; } } print "
total:$number\n\n"; } sub by_host{ if($host{$a} != $host{$b}){ $host{$b} <=> $host{$a}; } else{ $a cmp $b; } } sub by_jp_host{ if($jp_host{$a} != $jp_host{$b}){ $jp_host{$b} <=> $jp_host{$a}; } else{ $a cmp $b; } } sub agent1{ $agent{$data[3]} = ++$agent{$data[3]}; } sub agent2{ local(@agent); if($data[3] =~ /MSIE/){ $data[3] =~ s/Mozilla\/[0-9]\.[0-9]+\s?\(compatible\;\s?//i; $data[3] =~ s/\..+//; } elsif($data[3] =~ /compatible/){ @agent = split(/ /,$_); $data[3] = $agent[2]; $data[3] =~ s/\..+//; } elsif($data[3] =~/DreamPassport/){ @agent = split(/[\(\)]/,$_); $data[3] = $agent[1]; } elsif($data[3] =~ /WebAuto/ || $data[3] =~ /JustView/){ $data[3] =~ s/\..+//; } elsif($data[3] =~ /WWWC/){ $data[3] =~ s/\/.+//; } elsif($data[3] =~ /sharp wd browser/){ $data[3] =~ s/\(.+//; } elsif($data[3] =~ /[Mm]ozilla/){ $data[3] =~ s/mozilla/Mozilla/g if $data[3] =~ /mozilla/; $data[3] =~ s/\..+//; } $agent{$data[3]} = ++$agent{$data[3]}; } sub agent3{ if($data[3] =~ /compatible/ || $data[3] =~ /Microsoft Internet Explorer/){ $data[3] ="MSIE"; } elsif($data[3] =~/DreamPassport/){ @agent = split(/[\(\)]/,$_); $data[3] = $agent[1]; $data[3] =~ s/\/.+//; } elsif($data[3] =~ /GetYou!/){ $data[3] =~ s/\s.+//; } elsif($data[3] =~ /mozilla/i){ $data[3] ="Mozilla"; } else{ $data[3] =~ s/\/.+//; } $agent{$data[3]} = ++$agent{$data[3]}; } sub agent_written{ local($persent); local(@sortedagent); @sortedagent = sort by_agent keys(%agent); foreach(@sortedagent){ $persent = &persent($agent{$_}, $number); print "$agent{$_} ($persent \%) : "; if ($_ ne ""){ print "$_"; } print "
\n"; } print "
\ntotal:$number"; } sub by_agent{ if($agent{$a} != $agent{$b}){ $agent{$b} <=> $agent{$a}; } else{ $a cmp $b; } } sub referer1{ $referer{$data[4]} = ++$referer{$data[4]}; } sub referer2{ $data[4] =~ s/\#.+//; $data[4] =~ s/\?.+/\*/; $data[4] =~ s/%7E/\~/i; $data[4] =~ s/:[0-9]+//; $referer{$data[4]} = ++$referer{$data[4]}; } sub referer3{ $data[4] =~ s/\#.+//; $data[4] =~ s/\?.+/\*/; $data[4] =~ s/%7E/\~/i; $data[4] =~ s/:[0-9]+//; if($data[4] =~ /yahoo.co.jp/i){ $data[4] = 'http://www.yahoo.co.jp/*'; } elsif($data[4] =~ /goo.ne.jp/i){ $data[4] = 'http://www.goo.ne.jp/*'; } elsif($data[4] =~ /navi.ntt.co.jp/i){ $data[4] = 'http://navi.ntt.co.jp/*'; } elsif($data[4] =~ /www.acara.com/i || $data[4] =~ /www.achara.com/i || $data[4] =~ /webdew.rnet.or.jp/){ $data[4] = 'http://www.acara.com/*'; } elsif($data[4] =~ /csj.co.jp\/csjindex/i || $data[4] =~ /csj.co.jp\/search/i){ $data[4] = 'http://csj.co.jp/csjindex/*'; } elsif($data[4] =~ /www.infoseek.co.jp/i){ $data[4] = 'http://www.infoseek.co.jp/*'; } elsif($data[4] =~ /www.lycos.co.jp/i){ $data[4] = 'http://www.lycos.co.jp/*'; } elsif($data[4] =~ /www.dragon.co.jp/i){ $data[4] = 'http://www.dragon.co.jp/*'; } elsif($data[4] =~ /file:/i){ $data[4] = 'file'; } $referer{$data[4]} = ++$referer{$data[4]}; } sub referer_written1{ local($persent); local(@sortedreferer); @sortedreferer = sort by_referer keys(%referer); foreach(@sortedreferer){ $persent = &persent($referer{$_}, $number); print "$referer{$_} ($persent \%) : "; if ($_ ne ""){ print "$_"; } print "
\n"; } print "
total:$number"; } sub referer_written2{ local($persent, $url); local(@sortedreferer); @sortedreferer = sort by_referer keys(%referer); foreach(@sortedreferer){ $persent = &persent($referer{$_}, $number); print "$referer{$_} ($persent \%) : "; if ($_ ne ""){ $url = $_; $url =~ s/\*//g if $_ =~ /\*/; print "$_"; } print "
\n"; } print "
total:$number"; } sub by_referer{ if($referer{$a} != $referer{$b}){ $referer{$b} <=> $referer{$a}; } else{ $a cmp $b; } } sub uri1{ $uri{$data[5]} = ++$uri{$data[5]}; ++$numbers; } sub uri3{ ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($data[1]); $mon++; $mday =sprintf("%.2d",$mday); $mon =sprintf("%.2d",$mon); $year += 1900; if ($callday eq "$year\/$mon\/$mday") { $uri{$data[5]} = ++$uri{$data[5]}; $hour =sprintf("%.2d",$hour); $hours{$hour} = ++$hours{$hour}; $days{"$year\/$mon\/$mday"} = ++$days{"$year\/$mon\/$mday"}; ++$number; } } sub uri_written1{ local($persent); local(@sorteduri); @sorteduri = sort by_uri keys(%uri); foreach(@sorteduri){ $persent = &persent($uri{$_}, $number); print "$uri{$_} ($persent \%) : $_
\n"; } print "total:$number\n"; } sub uri_written3 { local($persent); local(@sortedreferer, @sortedhours); print "$callday
\n"; print "

hours

\n"; @sortedhours = sort keys(%hours); foreach(@sortedhours){ $persent = &persent($hours{$_}, $number); print "$_ - $hours{$_} ($persent \%)
\n"; } print "
\n"; print "

access source

\n"; @sorteduri = sort by_uri keys(%uri); foreach(@sorteduri){ $persent = &persent($uri{$_}, $number); print "$uri{$_} ($persent \%) - $_
\n"; } print "total:$number\n"; } sub by_uri{ if($uri{$a} != $uri{$b}){ $uri{$b} <=> $uri{$a}; } else{ $a cmp $b; } } sub uri_referer1{ if ($data[5] eq "$calluri\n") { $data[4] =~ s/\#.+//; $data[4] =~ s/%7E/\~/i; $uri_referer{$data[4]} = ++$uri_referer{$data[4]}; ++$numbers; } } sub uri_referer2{ ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($data[1]); $mon++; $mday =sprintf("%.2d",$mday); $mon =sprintf("%.2d",$mon); $year += 1900; if ($data[5] eq "$calluri\n" && $callday eq "$year\/$mon\/$mday") { $data[4] =~ s/\#.+//; $data[4] =~ s/%7E/\~/i; $uri_referer{$data[4]} = ++$uri_referer{$data[4]}; ++$numbers; } } sub uri_referer3{ ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($data[1]); $mon++; $mday =sprintf("%.2d",$mday); $mon =sprintf("%.2d",$mon); $year += 1900; if ($callday eq "$year\/$mon\/$mday") { $data[4] =~ s/\#.+//; $data[4] =~ s/%7E/\~/i; $uri_referer{$data[4]} = ++$uri_referer{$data[4]}; ++$numbers; } } sub uri_referer_written1{ local($persent); local(@sorteduri_referer); print "$calluri
\n"; @sorteduri_referer = sort by_uri_referer keys(%uri_referer); foreach(@sorteduri_referer){ $persent = &persent($uri_referer{$_}, $numbers); print "$uri_referer{$_} ($persent \%) : $_
\n"; } print "total:$numbers\n"; } sub uri_referer_written2{ local($persent); local(@sorteduri_referer); @sorteduri_referer = sort by_uri_referer keys(%uri_referer); print "$callday
\n"; foreach(@sorteduri_referer){ $persent = &persent($uri_referer{$_}, $numbers); print "$uri_referer{$_} ($persent \%) : $_
\n"; } print "total:$numbers\n"; } sub by_uri_referer{ if($uri_referer{$a} != $uri_referer{$b}){ $uri_referer{$b} <=> $uri_referer{$a}; } else{ $a cmp $b; } } sub persent { local($group, $number) = @_; if ($number == 0) { 0; } else { int(($group / $number) * 10000) / 100; } }