<?php require_once __DIR__ . '/../incl/incl.php'; require_once __DIR__ . '/../incl/api.incl.php'; if (!isset($argv[1])) { DebugMessage("Enter IP to ban on command line.\n"); exit(1); } $ip = trim($argv[1]); if ($ip == false) { MCDelete(BANLIST_CACHEKEY); DebugMessage("Cleared banlist from memcache.\n"); exit; } $ret = BanIP($ip); if ($ret) { DebugMessage("{$ip} added to ban list.\n"); } else { if (IPIsBanned($ip)) { DebugMessage("{$ip} already on ban list.\n"); } else { DebugMessage("{$ip} NOT added to ban list.\n"); } }
require_once '../incl/api.incl.php'; $logFileName = isset($argv[1]) ? $argv[1] : '../logs/access.log'; if (!file_exists($logFileName)) { DebugMessage("Can't find log file: {$logFileName}\n"); exit(1); } $ipHits = []; $fh = fopen($logFileName, 'r'); if ($fh) { while (($line = fgets($fh, 4096)) !== false) { if (strpos($line, '"GET /api/') !== false) { //} && (strpos($line, '(X11; Ubuntu; Linux i686; rv:25.0') !== false)) { preg_match('/^\\S+/', $line, $res); if (!isset($ipHits[$res[0]])) { $ipHits[$res[0]] = 0; } $ipHits[$res[0]]++; } } } fclose($fh); arsort($ipHits, SORT_NUMERIC); $x = 0; foreach ($ipHits as $ip => $hits) { if (!IPIsBanned($ip)) { echo "{$ip} - {$hits}\n"; if (++$x > 30) { break; } } }
function BanIP($ip = false) { $exitAfter = false; $addedBan = false; if ($ip === false && PHP_SAPI != 'cli') { $ip = $_SERVER['REMOTE_ADDR']; $exitAfter = true; } if (!$ip) { return false; } $ip = trim(strtolower($ip)); if (!IPIsBanned($ip)) { file_put_contents(BANLIST_FILENAME, "\n{$ip} # " . date('Y-m-d H:i:s'), FILE_APPEND | LOCK_EX); MCDelete(BANLIST_CACHEKEY); MCDelete(BANLIST_CACHEKEY . '_' . $ip); $addedBan = true; } if ($exitAfter) { header('HTTP/1.1 429 Too Many Requests'); exit; } return $addedBan; }