313 lines
12 KiB
PHP
313 lines
12 KiB
PHP
<?php
|
|
$start = microtime(true);
|
|
$config = parse_ini_file('bin/bancount.cfg');
|
|
echo "<!DOCTYPE html>\n";
|
|
echo "<html lang='en'>\n";
|
|
echo "<head>\n";
|
|
echo "\t<title>", $config['title'], "</title>\n";
|
|
echo "\t<meta http-equiv='content-type' content='text/html; charset=utf-8' />\n";
|
|
echo "\t<meta name='description' content=", $config['title'], " />\n";
|
|
echo "\t<!-- CSS/STYLESHEET -->\n";
|
|
echo "\t<link rel='stylesheet' href='/bancount.css' type='text/css' />\n";
|
|
echo "</head>\n";
|
|
echo "<body>\n";
|
|
echo "<div id='header'>\n";
|
|
// Fail2BanCount - Displays information from the database
|
|
// I won't claim this is all my original code, as it has
|
|
// been borrowed from various places online. Use it as you
|
|
// like.
|
|
// Database connection info
|
|
$db_host = '127.0.0.1';
|
|
$db_user = $config['mysqluser'];
|
|
$db_pwd = $config['mysqlpw'];
|
|
$database = $config['mysqldb'];
|
|
// Page variable
|
|
$page = htmlspecialchars($_GET["page"]);
|
|
$orderby = htmlspecialchars($_GET["orderby"]);
|
|
function n_print($data, $name = '') {
|
|
$aBackTrace = debug_backtrace();
|
|
echo '<h2>', $name, '</h2>';
|
|
echo '<fieldset style="border: 1px solid orange; padding: 5px;color: #333; background-color: #fff;">';
|
|
echo '<legend style="border:1px solid orange;padding: 1px;background-color:#eee;color:orange;">', basename($aBackTrace[0]['file']), ' ligne => ', $aBackTrace[0]['line'], '</legend>';
|
|
echo '<pre>', htmlentities(print_r($data, 1)), '</pre>';
|
|
echo '</fieldset><br />';
|
|
}
|
|
|
|
// Connect to MySQL
|
|
if (!$db = mysqli_connect($db_host, $db_user, $db_pwd)) {
|
|
die("Can't connect to database");
|
|
}
|
|
if (!mysqli_select_db($db, $database)) {
|
|
mysqli_close($db);
|
|
die("Can't select database");
|
|
}
|
|
// Get some information from the database
|
|
// Find IPs banned more than once
|
|
$multiplebans = mysqli_query($db, "SELECT ip,COUNT(*) count,country FROM bans GROUP BY ip HAVING count > 1 ORDER BY count DESC");
|
|
if (!$multiplebans) {
|
|
die("Query failed.");
|
|
}
|
|
// Find the IPs currently banned
|
|
$currentbans = mysqli_query($db, "SELECT service,ip,ban_date,ban_time,country FROM bans WHERE bans.id NOT IN ( SELECT unbans.id FROM unbans WHERE bans.id=unbans.id)");
|
|
if (!$currentbans) {
|
|
die("Query failed.");
|
|
}
|
|
// Find the total number of IPs banned
|
|
$totalbans = mysqli_query($db, "SELECT MAX(id) FROM bans");
|
|
if (!$totalbans) {
|
|
die("Query failed.");
|
|
}
|
|
while ($row = mysqli_fetch_array($totalbans)) {
|
|
$numbans = $row['MAX(id)'];
|
|
}
|
|
// Find the total number of IPs unbanned
|
|
$totalunbans = mysqli_query($db, "SELECT MAX(id) FROM unbans");
|
|
if (!$totalunbans) {
|
|
die("Query failed.");
|
|
}
|
|
while ($row = mysqli_fetch_array($totalunbans)) {
|
|
$numunbans = $row['MAX(id)'];
|
|
}
|
|
// Find multiple country bans
|
|
$countrybans = mysqli_query($db, "SELECT country,COUNT(*) count FROM bans GROUP BY country ORDER BY count DESC LIMIT 10");
|
|
if (!$countrybans) {
|
|
die("Query failed.");
|
|
}
|
|
// Display every IP banned
|
|
// Order by ID
|
|
$allbans = mysqli_query($db, "SELECT id,service,ip,ban_date,ban_time,country FROM bans ORDER BY id");
|
|
if (!$multiplebans) {
|
|
die("Query failed.");
|
|
}
|
|
// Order by IP
|
|
$allbans_ip = mysqli_query($db, "SELECT id,service,ip,ban_date,ban_time,country FROM bans ORDER BY ip, id");
|
|
if (!$multiplebans) {
|
|
die("Query failed.");
|
|
}
|
|
// Order by Date
|
|
$allbans_date = mysqli_query($db, "SELECT id,service,ip,ban_date,ban_time,country FROM bans ORDER BY ban_date, id");
|
|
if (!$multiplebans) {
|
|
die("Query failed.");
|
|
}
|
|
// Order by Time
|
|
$allbans_time = mysqli_query($db, "SELECT id,service,ip,ban_date,ban_time,country FROM bans ORDER BY ban_time, id");
|
|
if (!$multiplebans) {
|
|
die("Query failed.");
|
|
}
|
|
// Order by Country
|
|
$allbans_country = mysqli_query($db, "SELECT id,service,ip,ban_date,ban_time,country FROM bans ORDER BY country, id");
|
|
if (!$multiplebans) {
|
|
die("Query failed.");
|
|
}
|
|
// Order by Service
|
|
$allbans_service = mysqli_query($db, "SELECT id,service,ip,ban_date,ban_time,country FROM bans ORDER BY service, id");
|
|
if (!$multiplebans) {
|
|
die("Query failed.");
|
|
}
|
|
function getLast24hBan($db) {
|
|
$getLast24hBan = mysqli_query($db, "SELECT service,ip,ban_date,ban_time,country FROM bans WHERE concat_ws(' ',ban_date, ban_time) >= now() - INTERVAL 1 DAY ORDER BY id");
|
|
while ($rows = mysqli_fetch_assoc($getLast24hBan)) {
|
|
$lastBan[] = $rows;
|
|
}
|
|
if (empty($lastBan)) {
|
|
$lastBan = array();
|
|
}
|
|
return $lastBan;
|
|
}
|
|
|
|
// Get day with ban
|
|
function getDayWithBan($db) {
|
|
$getDayWithBan = mysqli_query($db, "SELECT DISTINCT ban_date FROM bans ORDER BY ban_date");
|
|
while ($rows = mysqli_fetch_assoc($getDayWithBan)) {
|
|
$allDate[] = $rows['ban_date'];
|
|
}
|
|
if (empty($allDate)) {
|
|
$allDate = array();
|
|
}
|
|
return $allDate;
|
|
}
|
|
|
|
// Find the number of currently banned IP's using subtraction.
|
|
// I'm sure I can do this with a single MySQL query and get
|
|
// rid of the above 2 queries all together.
|
|
$currentlybanned = $numbans - $numunbans;
|
|
// Print some HTML
|
|
echo "\t<h1>", $config['title'], "</h1>\n";
|
|
echo "</div>\n";
|
|
echo "<div id='container'>\n";
|
|
echo "\t<h3>$numbans IPs have been banned.</h3>\n";
|
|
// Menu
|
|
echo "\t<div class='table'>\n";
|
|
echo "\t\t<div class='row'>\n";
|
|
echo "\t\t\t<a href='?page=home' class='menu'>Home</a>\n";
|
|
echo "\t\t\t<a href='?page=allbans' class='menu'>All Bans</a>\n";
|
|
echo "\t\t\t<a href='?page=last' class='menu'>Last 24h ban</a>\n";
|
|
echo "\t\t</div>\n";
|
|
echo "\t</div>\n";
|
|
switch ($page) {
|
|
default :
|
|
// Begin creating the first table of IPs that have been banned
|
|
// more than once.
|
|
echo "\t<h2>Recidivist</h2>\n";
|
|
echo "\t<div class='table'>\n";
|
|
echo "\t\t<div class='row'>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tIP\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tBans\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tCountry\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
// Print the data obtained from the MySQL database
|
|
// Print the first table
|
|
while ($row = mysqli_fetch_row($multiplebans)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
echo "\t</div>\n";
|
|
mysqli_free_result($multiplebans);
|
|
// Use correct grammer
|
|
if ($currentlybanned != 1) {
|
|
$grammer = "IPs are";
|
|
} else {
|
|
$grammer = "IP is";
|
|
}
|
|
echo "\t<h3>Currently $currentlybanned $grammer banned.</h3>\n";
|
|
// Only print the second table if we have an IP
|
|
// currently banned.
|
|
if ($numbans > $numunbans) {
|
|
// Print the data obtained from the MySQL database
|
|
// Table title
|
|
echo "\t<h2>Currently Banned</h2>\n";
|
|
// Create the second table, of currently banned IPs
|
|
echo "\t<div class='table'>\n";
|
|
echo "\t\t<div class='row'>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tService\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tIP\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tDate\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tTime\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tCountry\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
// Print out the second table
|
|
while ($row = mysqli_fetch_row($currentbans)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
echo "\t</div>\n";
|
|
mysqli_free_result($currentbans);
|
|
}
|
|
// Print more HTML
|
|
echo "\t<h2>Top 10 Countries</h2>\n";
|
|
// Begin creating the second table of counrtys that have been banned
|
|
// more than once.
|
|
echo "\t<div class='table'>\n";
|
|
echo "\t\t<div class='row'>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tCountry\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tBans\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
// Print the first table
|
|
while ($row = mysqli_fetch_row($countrybans)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
echo "\t</div>\n";
|
|
mysqli_free_result($countrybans);
|
|
break;
|
|
case "allbans" :
|
|
echo "\t<div class='table'>\n";
|
|
echo "\t\t<div class='row'>\n";
|
|
echo "\t\t\t<a href='?page=allbans&orderby=id' class='cell-header'>\n\t\t\t\t\n\t\t\t</a>\n";
|
|
echo "\t\t\t<a href='?page=allbans&orderby=service' class='cell-header'>\n\t\t\t\t<u>Service</u>\n\t\t\t</a>\n";
|
|
echo "\t\t\t<a href='?page=allbans&orderby=ip' class='cell-header'>\n\t\t\t\t<u>IP</u>\n\t\t\t</a>\n";
|
|
echo "\t\t\t<a href='?page=allbans&orderby=date' class='cell-header'>\n\t\t\t\t<u>Ban Date</u>\n\t\t\t</a>\n";
|
|
echo "\t\t\t<a href='?page=allbans&orderby=time' class='cell-header'>\n\t\t\t\t<u>Ban Time</u>\n\t\t\t</a>\n";
|
|
echo "\t\t\t<a href='?page=allbans&orderby=country' class='cell-header'>\n\t\t\t\t<u>Country</u>\n\t\t\t</a>\n";
|
|
echo "\t\t</div>\n";
|
|
switch ($orderby) {
|
|
default :
|
|
case "id" :
|
|
while ($row = mysqli_fetch_row($allbans)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
case "ip" :
|
|
while ($row = mysqli_fetch_row($allbans_ip)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
break;
|
|
case "date" :
|
|
while ($row = mysqli_fetch_row($allbans_date)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
break;
|
|
case "time" :
|
|
while ($row = mysqli_fetch_row($allbans_time)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
break;
|
|
case "country" :
|
|
while ($row = mysqli_fetch_row($allbans_country)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
break;
|
|
case "service" :
|
|
while ($row = mysqli_fetch_row($allbans_service)) {
|
|
echo "\t\t<div class='row'>\n";
|
|
foreach ($row as $cell)
|
|
echo "\t\t\t<div class='cell'>\n\t\t\t\t$cell\n\t\t\t</div>\n";
|
|
echo "\t\t</div>\n";
|
|
}
|
|
break;
|
|
}
|
|
echo "\t</div>\n";
|
|
break;
|
|
case 'last' :
|
|
//id,service,ip,ban_date,ban_time,country
|
|
$getLast24hBan = getLast24hBan($db);
|
|
echo "\t<div class='table'>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tService\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tIP\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tDate\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tTime\n\t\t\t</div>\n";
|
|
echo "\t\t\t<div class='cell-header'>\n\t\t\t\tCountry\n\t\t\t</div>\n";
|
|
foreach ($getLast24hBan as $value) {
|
|
echo '<div class="row">
|
|
<div class="cell">', $value['service'], '</div>
|
|
<div class="cell">', $value['ip'], '</div>
|
|
<div class="cell">', $value['ban_date'], '</div>
|
|
<div class="cell">', $value['ban_time'], '</div>
|
|
<div class="cell">', $value['country'], '</div>
|
|
</div>';
|
|
}
|
|
echo '</div>';
|
|
break;
|
|
}
|
|
echo "</div>\n";
|
|
echo '<p><a href="#header">Go top</a></p>';
|
|
$stop = microtime(true);
|
|
$total = round($stop - $start, 4);
|
|
echo 'Generate in ', $total, ' secondes</br>';
|
|
echo "<div id='footer'>\n";
|
|
echo "\t©", date("Y"), " released under GNU GPL base on <a href='http://kylefberry.net'>k6b</a> work this version are made by Knah Tsaeb\n";
|
|
echo "</div>\n";
|
|
echo "</body>\n";
|
|
echo "</html>\n";
|
|
?>
|