<?php
$admin=isset($admin)?$admin:false;
$server=isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:(isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:"");
//if (isset($_GET['testdbg'])) ipdbg();
/*if (!function_exists('ipdbg')){
function ipdbg(){
global $_SERVER,$_COOKIE,$_SESSION, $ip, $host, $proxy, $ips, $prefix;
//todo: ip spam blacklist check, add optional vars (limit check-only, etc.)
$msg="[".date("Y-m-d H:i:s")."] ".((isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && !empty($_SERVER["HTTP_X_FORWARDED_FOR"]) && strcasecmp($_SERVER["HTTP_X_FORWARDED_FOR"], "unknown"))?("\$_SERVER[\"HTTP_X_FORWARDED_FOR\"]=\"".$_SERVER["HTTP_X_FORWARDED_FOR"]."\"; "):"").
((isset($_SERVER['HTTP_VIA']) && !empty($_SERVER["HTTP_VIA"]) && strcasecmp($_SERVER["HTTP_VIA"], "unknown"))?("\$_SERVER[\"HTTP_VIA\"]=\"".$_SERVER["HTTP_VIA"]."\"; "):"").
((isset($_SERVER["HTTP_CLIENT_IP"]) && !empty($_SERVER["HTTP_CLIENT_IP"]) && strcasecmp($_SERVER["HTTP_CLIENT_IP"], "unknown"))?("\$_SERVER[\"HTTP_CLIENT_IP\"]=\"".$_SERVER["HTTP_CLIENT_IP"]."\"; "):"").
((isset($_SERVER["REMOTE_ADDR"]) && !empty($_SERVER["REMOTE_ADDR"]) && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown"))?("\$_SERVER[\"REMOTE_ADDR\"]=\"".$_SERVER["REMOTE_ADDR"]."\"; "):"").
((isset($_SERVER["HTTP_REFERER"]) && !empty($_SERVER["HTTP_REFERER"]))?("\$_SERVER[\"HTTP_REFERER\"]=\"".$_SERVER["HTTP_REFERER"]."\"; "):"").
"\$ip=\"$ip\"; "."\$host=\"$host\"; ".
(isset($proxy)?("\$proxy=\"".$proxy."\"; "):"").
(isset($ips)?("\$ips=".printVal($ips)."; "):"")."\n".
"\$_SERVER=".printVal($_SERVER).";\n".
(!empty($_COOKIE)?("\$_COOKIE=".printVal($_COOKIE).";\n"):"").
(!empty($_SESSION)?("\$_SESSION=".printVal($_SESSION).";\n"):"");
$file=fopen("$prefix/logs/ipdbg.txt", "a");
if ($file !== false) {
fwrite($file, $msg);
fclose($file);
}
}
}*/
if (isset($_GET['debug'])) {
$timing[]=Array("IPLog Header",microtime(true));
}
if (file_exists("$prefix/include/db.php")){
include "db.php";
if (isset($_GET['debug'])) {
$timing[]=Array("IPLog DB Connect",microtime(true));
}
if($db_link){
mysqli_select_db($db_link,$db);
$table="accesslog";
if(isset($_GET['clean']) && ($_GET['clean']=="log") && $admin) {
$days=isset($_GET['days'])?$_GET['days']:"";
if(!is_numeric($days)) {
mysqli_query($db_link,"drop table if exists $table") or die(mysqli_error($db_link));
} else {
mysqli_query($db_link,"delete from $table where date<=".(time() - (60 * 60 * 24 * mysqli_real_escape_string($db_link,$days)))) or die(mysqli_error($db_link));
}
if (isset($_GET['debug'])) {
$timing[]=Array("IPLog Cleanup",microtime(true));
}
}
if(!mysqli_query($db_link,"desc $table")){
mysqli_query($db_link,"create table $table (id int not null auto_increment primary key, ip varchar (48) not null default '', host varchar (128) not null default '', proxy varchar (48) not null default '', agent varchar (256) not null default '', method varchar(8) not null default '', protocol varchar(8) not null default '',server varchar (256) not null default '', url varchar (2048) not null default '', referer varchar (2048) not null default '', result int not null default 200, date int not null default 0) Engine=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin") or die(mysqli_error($db_link));
if (isset($_GET['debug'])) {
$timing[]=Array("IPLog DB Setup",microtime(true));
}
}
//insert/update data
$result=mysqli_query($db_link,"delete from $table where date <= ".(time()-14*24*60*60)) or die(mysqli_error($db_link));
if (isset($_GET['debug'])) {
$timing[]=Array("IPLog DelOld",microtime(true));
}
$agent=isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:"";
$protocol=(isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']))?"https":"http";
if(!isset($method)) $method=isset($_SERVER['REDIRECT_REDIRECT_REQUEST_METHOD'])?$_SERVER['REDIRECT_REDIRECT_REQUEST_METHOD']:(isset($_SERVER['REDIRECT_REQUEST_METHOD'])?$_SERVER['REDIRECT_REQUEST_METHOD']:(isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:false));
/*if (isset($chkref) && $chkref !==false) {
//if (!isset($_SESSION['ref'])
if (!empty($_SESSION['ref']) && !empty($_SERVER['HTTP_REFERER']) && preg_match("/^".preg_quote("$protocol://".$_SERVER['HTTP_HOST'],"/")."/i",$_SERVER['HTTP_REFERER'])) {
if($_SESSION['ref'] == $_SERVER['HTTP_REFERER']) {
$_SESSION['ref']="$protocol://".$_SERVER['HTTP_HOST'].trim($_SERVER['REQUEST_URI']);
} else {
die ("Invalid Referer");
}
} else $_SESSION['ref']="$protocol://".$_SERVER['HTTP_HOST'].trim($_SERVER['REQUEST_URI']);
}*/
/*$result=mysqli_query($db_link,"select max(date) as date, min(date) as date2 from $table where ip='$ip'") or die(mysqli_error($db_link));
if(mysqli_num_rows($result) > 0) {
if ($arr = mysqli_fetch_assoc($result)) {
if ($arr['date'] < time() - 7*24*60*60) {
ipdbg(); //todo: adjust ip dbg freq. (for blacklist checking)
} //elseif ($admin){
// echo ((($arr['date'] - $arr['date2'])/(24*60*60))%7==0 && ($arr['date'] < time() - 24*60*60))?"true":"false";
// //$arr['date'] < time() - 24*60*60
//}
}
unset ($arr);
} else {
ipdbg();
}*/
$result=mysqli_query($db_link,"select * from $table where url='".mysqli_real_escape_string($db_link,(isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:""))."' and method='".(($method !== false)?$method:"")."' and protocol='$protocol' and server='$server' and referer='".(isset($_SERVER['HTTP_REFERER'])?mysqli_real_escape_string($db_link,$_SERVER['HTTP_REFERER']):"")."' and agent='$agent' and ip='$ip' and result='".(isset($evt)?mysqli_real_escape_string($db_link,$evt):200)."'") or die(mysqli_error($db_link));
if(mysqli_num_rows($result) > 0) {
mysqli_query($db_link,"update $table set date='".time()."',host='$host',proxy='".(isset($proxy)?$proxy:"")."' where ip='$ip' and agent='$agent' and protocol='$protocol' and server='$server' and url='".mysqli_real_escape_string($db_link,(isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:""))."' and method='".(($method !== false)?$method:"")."' and referer='".(isset($_SERVER['HTTP_REFERER'])?mysqli_real_escape_string($db_link,$_SERVER['HTTP_REFERER']):"")."' and result='".(isset($evt)?mysqli_real_escape_string($db_link,$evt):200)."'") or die(mysqli_error($db_link));
} else {
mysqli_query($db_link,"insert into $table (ip, host, proxy, agent, method, protocol, server, url, referer, date, result) values ('$ip','$host','".(isset($proxy)?$proxy:"")."','$agent','".(($method !== false)?$method:"")."','$protocol','$server','".mysqli_real_escape_string($db_link,$_SERVER['REQUEST_URI'])."','".(isset($_SERVER['HTTP_REFERER'])?mysqli_real_escape_string($db_link,$_SERVER['HTTP_REFERER']):"")."','".time()."', '".(isset($evt)?mysqli_real_escape_string($db_link,$evt):200)."')") or die(mysqli_error($db_link));
}
if (isset($_GET['debug'])) {
$timing[]=Array("IPLog LogSave",microtime(true));
}
if($admin && ($action=="showlog") && !isset($evt)) {
if (!isset($_SESSION['iplog']) || isset($_POST['reset'])) $_SESSION['iplog']=Array();
if (isset($_POST['fld'])){ $fld=$_POST['fld']; $_SESSION['iplog']['fld']=$fld; }
elseif (!empty($_SESSION['iplog']['fld'])) $fld=$_SESSION['iplog']['fld'];
else $fld=Array();
if(isset($_POST['opr'])){ $opr=$_POST['opr']; $_SESSION['iplog']['opr']=$opr; }
elseif (!empty($_SESSION['iplog']['opr'])) $opr=$_SESSION['iplog']['opr'];
else $opr=Array();
if(isset($_POST['val'])){ $val=$_POST['val']; $_SESSION['iplog']['val']=$val; }
elseif (!empty($_SESSION['iplog']['val'])) $val=$_SESSION['iplog']['val'];
else $val=Array();
if(isset($_POST['and'])){ $and=$_POST['and']; $_SESSION['iplog']['and']=$and; }
elseif (!empty($_SESSION['iplog']['and'])) $and=$_SESSION['iplog']['and'];
else $and=Array();
if(isset($_POST['grp'])){ $grp=$_POST['grp']; $_SESSION['iplog']['grp']=$grp; }
elseif (!empty($_SESSION['iplog']['grp'])) $grp=$_SESSION['iplog']['grp'];
else $grp=Array();
if(!empty($fld) && !empty($opr) && !empty($val)) {
$fList=Array();
$i=0; foreach($fld as $value) $fList[$i++][0]=$value;
$i=0; foreach($opr as $value) $fList[$i++][1]=$value;
$i=0; foreach($val as $value) $fList[$i++][2]=$value;
if (!empty($and)) foreach($and as $value) $fList[$value][3]="on";
if (!empty($grp)) foreach($grp as $value) $fList[$value][4]="on";
} else $fList=array();
echo "<script>var cnt=0;</script><form method=\"post\" action=\"$PHP_SELF?action=showlog".(isset($_GET['ip'])?("&ip=".$_GET['ip']):"")."\"><h3>Filter results</h3><input type=\"hidden\" name=\"reset\"><div id=\"list\">";
$first=true; $i=0;
foreach($fList as $item) {
echo "<div>";
if (!$first)
echo "<input name=\"and[]\" value=\"".$i."\" id=\"ch$i\" type=\"checkbox\" ".((isset($item[3]) && ($item[3] == "on"))?" checked":"").">And ";
echo "<input name=\"grp[]\" value=\"".$i."\" id=\"gr$i\" type=\"checkbox\" ".((isset($item[4]) && ($item[4] == "on"))?" checked":"").">Group ";
echo "<select name=\"fld[]\">
<option value=\"ip\"".((isset($item[0]) && ($item[0] == "ip"))?" selected":"").">IP Address</option>
<option value=\"host\"".((isset($item[0]) && ($item[0] == "host"))?" selected":"").">IP Host</option>
<option value=\"url\"".((isset($item[0]) && ($item[0] == "url"))?" selected":"").">Requrest URL</option>
<option value=\"method\"".((isset($item[0]) && ($item[0] == "method"))?" selected":"").">Requrest Method</option>
<option value=\"protocol\"".((isset($item[0]) && ($item[0] == "protocol"))?" selected":"").">Requrest Protocol</option>
<option value=\"server\"".((isset($item[0]) && ($item[0] == "server"))?" selected":"").">Server Name</option>
<option value=\"result\"".((isset($item[0]) && ($item[0] == "result"))?" selected":"").">Result</option>
<option value=\"agent\"".((isset($item[0]) && ($item[0] == "agent"))?" selected":"").">User Agent</option>
<option value=\"proxy\"".((isset($item[0]) && ($item[0] == "proxy"))?" selected":"").">Proxy IP</option>
<option value=\"referer\"".((isset($item[0]) && ($item[0] == "referer"))?" selected":"").">Referer</option>
</select><select name=\"opr[]\">
<option value=\"=\"".((isset($item[1]) && ($item[1] == "="))?" selected":"").">=</option>
<option value=\"!=\"".((isset($item[1]) && ($item[1] == "!="))?" selected":"").">!=</option>
<option value=\"like\"".((isset($item[1]) && ($item[1] == "like"))?" selected":"").">Like</option>
<option value=\"not like\"".((isset($item[1]) && ($item[1] == "not like"))?" selected":"").">Not Like</option>
<option value=\"regexp\"".((isset($item[1]) && ($item[1] == "regexp"))?" selected":"").">Regexp</option>
<option value=\"not regexp\"".((isset($item[1]) && ($item[1] == "not regexp"))?" selected":"").">Not Regexp</option>
</select><input name=\"val[]\" type=\"text\" value=\"".(isset($item[2])?htmlspecialchars($item[2]):"")."\"><input type=\"button\" onclick=\"this.parentNode.parentNode.removeChild(this.parentNode); cnt--;\" value=\"Remove\"></div>";
$first=false; $i++;
}
$out= "<select name=\"fld[]\">
<option value=\"ip\">IP Address</option>
<option value=\"host\">IP Host</option>
<option value=\"url\">Requrest URL</option>
<option value=\"method\">Requrest Method</option>
<option value=\"protocol\">Requrest Protocol</option>
<option value=\"server\">Server Name</option>
<option value=\"result\">Result</option>
<option value=\"agent\">User Agent</option>
<option value=\"proxy\">Proxy IP</option>
<option value=\"referer\">Referer</option>
</select><select name=\"opr[]\">
<option value=\"=\">=</option>
<option value=\"!=\">!=</option>
<option value=\"like\">Like</option>
<option value=\"not like\">Not Like</option>
<option value=\"regexp\">Regexp</option>
<option value=\"not regexp\">Not Regexp</option>
</select><input name=\"val[]\" type=\"text\"><input type=\"button\" onclick=\"this.parentNode.parentNode.removeChild(this.parentNode); cnt--;\" value=\"Remove\">";
echo "</div>
<script>
cnt = $i;
function addInput() {
var input=".json_encode("<input name=\"grp[]\" value=\"")." + cnt + ".json_encode("\" id=\"gr")." + cnt + ".json_encode("\" type=\"checkbox\">Group $out").";
var div=document.createElement('div');
if (document.getElementById('list').innerHTML != \"\") {
div.innerHTML = ".json_encode("<input name=\"and[]\" value=\"")." + cnt + ".json_encode("\" id=\"ch")." + cnt++ + ".json_encode("\" type=\"checkbox\" checked>And ")." +input;
} else {
div.innerHTML=input; cnt++;
}
document.getElementById('list').appendChild(div);
}
//alert(document.getElementById('list').innerHTML);
</script>
<input type=\"button\" onclick=\"addInput()\" value=\"Add Filter\">
<input type=\"submit\" value=\"Submit\"></form>";
$sta=(isset($_GET['sta']) && is_numeric($_GET['sta']))?$_GET['sta']:0;
if(isset($_GET['ip'])) {
$step=500;
$next=$end=$sta+$step;
$prev=$sta-$step;
$target=mysqli_real_escape_string($db_link,$_GET['ip']);
if($target!="all") {
$query="select * from $table where ip='$target'";
} else {
$query="select * from $table";
}
unset($arr);
$first=true;
$prev_grp=false;
foreach($fList as $item) {
if(!empty($item[0]) && isset ($item[1])) {
$field = $item[0];
$oper = $item[1];
$val=isset($item[2])?mysqli_real_escape_string($db_link,$item[2]):"";
if($target!="all") {
$query .= " ".($first?
"and (":
(
(isset($item[3])?"and":"or").
((!$prev_grp && isset($item[4]) && ($prev_grp = true))?" (":"")
)
)." $field $oper '$val'".
(($prev_grp && !isset($item[4]) && (($prev_grp = false) == false))?" )":"");
}
else $query .= " ".($first?"where":(isset($item[3])?"and":"or")).
((!$prev_grp && isset($item[4]) && ($prev_grp = true))?" (":"").
" $field $oper '$val'".
(($prev_grp && !isset($item[4]) && (($prev_grp = false) == false))?" )":"");
$first=false;
}
}
if ($prev_grp) {
$query .=" )";
}
if($target!="all" && $first != true) $query.=")";
$query .= " order by date desc, id desc limit $sta,$step";
echo "<h3>SQL Queries</h3>";
echo "<pre>".htmlspecialchars($query)."</pre>";
$result=mysqli_query($db_link,$query) or die(mysqli_error($db_link));
$count = mysqli_num_rows($result);
if ($count > 0) {
$mylinks[]=Array("Clean Access Log","$PHP_SELF?action=$action&clean=log&lang=$lang");
if($target!="all") {
$query="select count(*) as count, max(date) as maxdate, min(date) as mindate from $table where ip='$target'";
$first=true;
$prev_grp=false;
foreach($fList as $item) {
if(!empty($item[0]) && isset ($item[1])) {
$field = $item[0];
$oper = $item[1];
$val=isset($item[2])?mysqli_real_escape_string($db_link,$item[2]):"";
$query .= " ".($first?"and (":(isset($item[3])?"and":"or")).
((!$prev_grp && isset($item[4]) && ($prev_grp = true))?" (":"").
" $field $oper '$val'".
(($prev_grp && !isset($item[4]) && (($prev_grp = false) == false))?" )":"");
$first=false;
}
}
if ($prev_grp) {
$query .=" )";
}
if($first != true) $query.=" )";
echo "<pre>".htmlspecialchars($query)."</pre>";
$res2=mysqli_query($db_link,$query) or die(mysqli_error($db_link));
if($arr = mysqli_fetch_assoc($res2)) {
$mindate = date("Y-m-d H:i:s", $arr['mindate']);
$t = $arr['maxdate']-$arr['mindate'];
$days = floor($t/60/60/24);
$hours = floor($t/60/60)-$days*24;
$minutes = floor($t/60)-$hours*60-$days*24*60;
$seconds = $t-$minutes*60-$hours*60*60-$days*24*60*60;
if ($t > 0) {
echo "<h3>Statistics for ip $target".(!empty($fList)?" matching filters above":"")."</h3>";
echo "Logs begin at $mindate, total ";
$vps=$arr['count']/$t;
$vpm=$vps*60;
$vph=$vpm*60;
$vpd=$vph*24;
$vpw=$vpd*7;
$vpt=$vpd*30;
$vpy=$vpd*365;
if ($vps >= 1) echo floor($vps)." queries per second";
else if ($vpm >= 1) echo floor($vpm)." queries per minute";
else if ($vph >= 1) echo floor($vph)." queries per hour";
else if ($vpd >= 1) echo floor($vpd)." queries per day";
else if ($vpw >= 1) echo floor($vpw)." queries per week";
else if ($vpt >= 1) echo floor($vpt)." queries per month";
else if ($vpy >= 1) echo floor($vpy)." queries per year";
echo " (".$arr['count']." visits in ";
echo ($days>0)?($days." days "):"";
echo ($hours>0)?($hours." hours "):"";
echo ($minutes>0)?($minutes." minutes "):"";
echo ($seconds>0)?($seconds." seconds"):"";
echo ")";
}
}
echo "<h3>Showing Logs for IP: $target</h3>";
} else {
$query="select count(*) as count, max(date) as maxdate, min(date) as mindate from $table";
$first=true;
$prev_grp=false;
foreach($fList as $item) {
if(!empty($item[0]) && isset ($item[1])) {
$field = $item[0];
$oper = $item[1];
$val=isset($item[2])?mysqli_real_escape_string($db_link,$item[2]):"";
$query .= " ".($first?"where":(isset($item[3])?"and":"or")).
((!$prev_grp && isset($item[4]) && ($prev_grp = true))?" (":"").
" $field $oper '$val'".
(($prev_grp && !isset($item[4]) && (($prev_grp = false) == false))?" )":"");
$first=false;
}
}
if ($prev_grp) {
$query .=" )";
}
echo "<pre>".htmlspecialchars($query)."</pre>";
$res2=mysqli_query($db_link,$query) or die(mysqli_error($db_link));
if($arr = mysqli_fetch_assoc($res2)) {
$mindate = date("Y-m-d H:i:s", $arr['mindate']);
$t = $arr['maxdate']-$arr['mindate'];
$days = floor($t/60/60/24);
$hours = floor($t/60/60)-$days*24;
$minutes = floor($t/60)-$hours*60-$days*24*60;
$seconds = $t-$minutes*60-$hours*60*60-$days*24*60*60;
if ($t > 0) {
echo "<h3>Statistics".(!empty($fList)?" matching filters above":" for all ip's")."</h3>";
echo "Logs begin at $mindate, total ";
$vps=$arr['count']/$t;
$vpm=$vps*60;
$vph=$vpm*60;
$vpd=$vph*24;
$vpw=$vpd*7;
$vpt=$vpd*30;
$vpy=$vpd*365;
if ($vps >= 1) echo floor($vps)." queries per second";
else if ($vpm >= 1) echo floor($vpm)." queries per minute";
else if ($vph >= 1) echo floor($vph)." queries per hour";
else if ($vpd >= 1) echo floor($vpd)." queries per day";
else if ($vpw >= 1) echo floor($vpw)." queries per week";
else if ($vpt >= 1) echo floor($vpt)." queries per month";
else if ($vpy >= 1) echo floor($vpy)." queries per year";
echo " (".$arr['count']." visits in ";
echo ($days>0)?($days." days "):"";
echo ($hours>0)?($hours." hours "):"";
echo ($minutes>0)?($minutes." minutes "):"";
echo ($seconds>0)?($seconds." seconds"):"";
echo ")";
}
}
echo "<h3>Showing All IP Logs</h3>";
}
if ($prev >= 0) {
if ($prev >= $step) echo "<a href=\"$PHP_SELF?action=showlog&ip=".$_GET['ip']."&sta=$prev\">[Prev Page]</a> ";
else echo "<a href=\"$PHP_SELF?action=showlog&ip=".$_GET['ip']."\">[Prev Page]</a> ";
echo "<a href=\"$PHP_SELF?action=showlog&ip=".$_GET['ip']."\">[Index]</a> ";
} else {
echo "[Prev Page] [Index] ";
}
if ($step <= $count) echo "<a href=\"$PHP_SELF?action=showlog&ip=".$_GET['ip']."&sta=$next\">[Next Page]</a> ";
else echo "[Next Page] ";
echo "<style>
.nowrap {
white-space: nowrap;
}
</style>";
echo "<div style=\"width: 960px; height:330px; overflow:auto\">";
echo "<table class=\"form expand\" id=\"log\">";
echo "<tr><th>IP</th><th>Host</th><th>Proxy</th><th>Method</th><th>Protocol</th><th>Server</th><th>Url</th><th>Referer</th><th>Result</th><th>Last access date</th><th>User Agent</th></tr>";
if (!mysqli_query($db_link,"desc bans"))
$nobans=true;
else
$nobans=false;
while ($item=mysqli_fetch_assoc($result)) {
if (!$nobans) {
$res2=mysqli_query($db_link,"select * from bans where ip='".$item['ip']."'") or die(mysqli_error($db_link));
if (mysqli_num_rows($res2) > 0) $banned_ip=true;
else $banned_ip=false;
$res2=mysqli_query($db_link,"select * from bans where ip='".$item['proxy']."'") or die(mysqli_error($db_link));
if (mysqli_num_rows($res2) > 0) $banned_proxy=true;
else $banned_proxy=false;
} else {
$banned_ip= false;
$banned_proxy = false;
}
echo "<tr><td><a href=\"http://www.google.com/search?q=".$item['ip']."\" target=\"_blank\">";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"<i>":"");
if ($item['referer'] == "$protocol://".$server.$item['url']) echo "<font color=#FFc0c0>";
echo $item['ip'];
if ($item['referer'] == "$protocol://".$server.$item['url']) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"</i>":"");
echo "</a> ";
echo "<td class=\"nowrap\">";
if ($target=="all" && ($banned_ip || $banned_proxy)) echo "<b>".($banned_proxy?"<i>":"");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "<font color=#FFc0c0>";
echo (!empty($item['host'])?$item['host']:"N/A");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"</i>":"");
echo "<td>";
if (!empty($item['proxy'])) echo "<a href=\"http://www.google.com/search?q=".$item['proxy']."\" target=\"_blank\">";
if ($target=="all" && ($banned_ip || $banned_proxy)) echo "<b>".($banned_proxy?"<i>":"");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "<font color=#FFc0c0>";
echo (!empty($item['proxy'])?$item['proxy']:"");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"</i>":"");
if (!empty($item['proxy'])) echo "</a>";
echo "<td>".$item['method'];
echo "<td>".$item['protocol'];
echo "<td>".$item['server'];
echo "<td class=\"nowrap\">";
if ($target=="all" && ($banned_ip || $banned_proxy)) echo "<b>".($banned_proxy?"<i>":"");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "<font color=#FFc0c0>";
echo htmlspecialchars($item['url']);
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"</i>":"");
echo "<td class=\"nowrap\">";
if ($target=="all" && ($banned_ip || $banned_proxy)) echo "<b>".($banned_proxy?"<i>":"");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "<font color=#FFc0c0>";
echo htmlspecialchars($item['referer']);
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"</i>":"");
echo "<td>";
if ($target=="all" && ($banned_ip || $banned_proxy)) echo "<b>".($banned_proxy?"<i>":"");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "<font color=#FFc0c0>";
echo $item['result'];
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"</i>":"");
echo "<td class=\"nowrap\">";
if ($target=="all" && ($banned_ip || $banned_proxy)) echo "<b>".($banned_proxy?"<i>":"");
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "<font color=#FFc0c0>";
echo date("Y-m-d H:i:s", $item['date']);
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"").($banned_proxy?"</i>":"");
echo "<td class=\"nowrap\">";
if (!empty($item['agent'])) echo "<a href=\"http://www.google.com/search?q="".urlencode($item['agent']).""\" target=\"_blank\">";
if ($target=="all" && ($banned_ip || $banned_proxy)) echo "<b>";
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "<font color=#FFc0c0>";
echo htmlspecialchars($item['agent']);
if ($item['referer'] == ("$protocol://".$server.$item['url'])) echo "</font>";
if ($target=="all") echo (($banned_ip || $banned_proxy)?"<b>":"");
if (!empty($item['agent'])) echo "</a>";
echo "</tr>";
}
echo "</table>";
echo "</div>";
echo "<hr><a href=\"$PHP_SELF?action=showlog\">Show IP List</a>";
} else {
if($target!="all") echo "No entries for ".stripslashes($target);
else echo "No entries available.";
}
} else {
$step=100;
$next=$end=$sta+$step;
//$next=$sta+$step;
$prev=$sta-$step;
$query = "select distinct ip, host, proxy, count(*) as count, max(date) as maxdate, min(date) as mindate from $table";
$first=true;
$prev_grp=false;
foreach($fList as $item) {
if(!empty($item[0]) && isset ($item[1])) {
$field = $item[0];
$oper = $item[1];
$val=isset($item[2])?mysqli_real_escape_string($db_link,$item[2]):"";
//if (!empty($val)) {
$query .= " ".($first?"where":(isset($item[3])?"and":"or")).
((!$prev_grp && isset($item[4]) && ($prev_grp = true))?" (":"").
" $field $oper '$val'".
(($prev_grp && !isset($item[4]) && (($prev_grp = false) == false))?" )":"");
$first=false;
//}
}
}
if ($prev_grp) {
$query .=" )";
}
$query .= " group by ip order by maxdate desc";
$query .= " limit $sta,$step";
echo "<h3>SQL Queries</h3>";
echo "<pre>$query</pre>";
$result=mysqli_query($db_link,$query) or die(mysqli_error($db_link));
$count = mysqli_num_rows($result);
if($count > 0) {
$mylinks[]=Array("Clean Access Log","$PHP_SELF?action=$action&clean=log&lang=$lang");
$query="select count(*) as count, max(date) as maxdate, min(date) as mindate from $table";
$first=true;
$prev_grp=false;
foreach($fList as $item) {
if(!empty($item[0]) && isset ($item[1])) {
$field = $item[0];
$oper = $item[1];
$val=isset($item[2])?mysqli_real_escape_string($db_link,$item[2]):"";
$query .= " ".($first?"where":(isset($item[3])?"and":"or")).
((!$prev_grp && isset($item[4]) && ($prev_grp = true))?" (":"").
" $field $oper '$val'".
(($prev_grp && !isset($item[4]) && (($prev_grp = false) == false))?" )":"");
$first=false;
}
}
if ($prev_grp) {
$query .=" )";
}
echo "<pre>".htmlspecialchars($query)."</pre>";
$res2=mysqli_query($db_link,$query) or die(mysqli_error($db_link));
if($arr = mysqli_fetch_assoc($res2)) {
$mindate = date("Y-m-d H:i:s", $arr['mindate']);
$t = $arr['maxdate']-$arr['mindate'];
$days = floor($t/60/60/24);
$hours = floor($t/60/60)-$days*24;
$minutes = floor($t/60)-$hours*60-$days*24*60;
$seconds = $t-$minutes*60-$hours*60*60-$days*24*60*60;
if ($t > 0) {
echo "<h3>Statistics".(!empty($fList)?" matching filters above":" for all ip's")."</h3>";
echo "Logs begin at $mindate, total ";
$vps=$arr['count']/$t;
$vpm=$vps*60;
$vph=$vpm*60;
$vpd=$vph*24;
$vpw=$vpd*7;
$vpt=$vpd*30;
$vpy=$vpd*365;
if ($vps >= 1) echo floor($vps)." queries per second";
else if ($vpm >= 1) echo floor($vpm)." queries per minute";
else if ($vph >= 1) echo floor($vph)." queries per hour";
else if ($vpd >= 1) echo floor($vpd)." queries per day";
else if ($vpw >= 1) echo floor($vpw)." queries per week";
else if ($vpt >= 1) echo floor($vpt)." queries per month";
else if ($vpy >= 1) echo floor($vpy)." queries per year";
echo " (".$arr['count']." visits in ";
echo ($days>0)?($days." days "):"";
echo ($hours>0)?($hours." hours "):"";
echo ($minutes>0)?($minutes." minutes "):"";
echo ($seconds>0)?($seconds." seconds"):"";
echo ")";
}
}
echo "<h3>Logged IP Adresses</h3>";
//echo "<tr><th>Host or IP<th>Last Access</tr>";
$out="<table width=\"400\">";
$out.="<tr><td style=\"text-align:center\">";
if ($prev >= 0) {
if ($prev >= $step) $out.= "<a href=\"$PHP_SELF?action=showlog&sta=$prev\">[Prev Page]</a> ";
else $out.= "<a href=\"$PHP_SELF?action=showlog\">[Prev Page]</a> ";
$out.= "<a href=\"$PHP_SELF?action=showlog\">[Index]</a> ";
} else {
$out.="[Prev Page] [Index] ";
}
if ($step <= $count) $out.= "<a href=\"$PHP_SELF?action=showlog&sta=$next\">[Next Page]</a> ";
else $out.="[Next Page] ";
$out.= "</tr></table><div style=\"width: 960px; height:330px; overflow:auto\"><table class=\"form expand\" style=\"white-space: nowrap;\"><tr>";
if (!mysqli_query($db_link,"desc bans"))
$nobans=true;
else
$nobans=false;
while($item=mysqli_fetch_assoc($result)) {
if (!$nobans) {
$res2=mysqli_query($db_link,"select * from bans where ip='".$item['ip']."'") or die(mysqli_error($db_link));
if (mysqli_num_rows($res2) > 0) $banned_ip=true;
else $banned_ip=false;
$res2=mysqli_query($db_link,"select * from bans where ip='".$item['proxy']."'") or die(mysqli_error($db_link));
if (mysqli_num_rows($res2) > 0) $banned_proxy=true;
else $banned_proxy=false;
} else {
$banned_ip = false;
$banned_proxy = false;
}
$out.="<tr><td>";
$out.="[<a href=\"http://www.google.com/search?q=".$item['ip']."\" target=\"_blank\">Google</a>
<a href=\"https://www.abuseipdb.com/check/".$item['ip']."\" target=\"_blank\">AbuseIPDB</a>
<a href=\"http://www.projecthoneypot.org/ip_".$item['ip']."\" target=\"_blank\">ProjectHoneyPot</a>
<a href=\"http://www.stopforumspam.com/ipcheck/".$item['ip']."\" target=\"_blank\">StopForumSpam</a>] ";
if ($banned_ip) $out.="<b>";
else if ($banned_proxy) $out.="<b><i>";
$out.="<a href=\"$PHP_SELF?action=showlog&ip=".$item['ip']."\">".(!empty($item['host'])?$item['host']:$item['ip'])."</a>";
if ($banned_proxy) $out.= "</i></b>";
else if ($banned_ip) $out.= "</b>";
$out.="<td>".date("Y-m-d H:i:s",$item['maxdate']);
$out.="<td>";
$t = $item['maxdate']-$item['mindate'];
$days = floor($t/60/60/24);
$hours = floor($t/60/60)-$days*24;
$minutes = floor($t/60)-$hours*60-$days*24*60;
$seconds = $t-$minutes*60-$hours*60*60-$days*24*60*60;
if ($t > 0) {
$vps=$item['count']/$t;
$vpm=$vps*60;
$vph=$vpm*60;
$vpd=$vph*24;
$vpw=$vpd*7;
$vpt=$vpd*30;
$vpy=$vpd*365;
$out.= "<a title=\"";
$out.= ($days>0)?($days." days "):"";
$out.= ($hours>0)?($hours." hours "):"";
$out.= ($minutes>0)?($minutes." minutes "):"";
$out.= ($seconds>0)?($seconds." seconds"):"";
$out.= "\">";
}
$out.= $item['count']." visits";
if ($t > 0) {
if ($vps >= 1) $out.= ", ".floor($vps)." queries per second";
else if ($vpm >= 1) $out.= ", ".floor($vpm)." queries per minute";
else if ($vph >= 1) $out.= ", ".floor($vph)." queries per hour";
else if ($vpd >= 1) $out.= ", ".floor($vpd)." queries per day";
else if ($vpw >= 1) $out.= ", ".floor($vpw)." queries per week";
else if ($vpt >= 1) $out.= ", ".floor($vpt)." queries per month";
else if ($vpy >= 1) $out.= ", ".floor($vpy)." queries per year";
$out.= "</a>";
}
$out.="</tr>\n";
}
$out.="</table></div>";
echo $out;
echo "<hr><a href=\"$PHP_SELF?action=showlog&ip=all\">Show All Entries</a>";
} else echo "No entries found jet.";
}
}
}
}
if (isset($_GET['debug'])) {
$timing[]=Array("IPLog End",microtime(true));
}
?>