File "cloud_blocker.php"

Full path: /home/algopkco/public_html/404-NotFounda/cloud_blocker.php
File size: 3.56 B (3.56 KB bytes)
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor &nnbsp; Back

<?php
/**
 * ULTIMATE IP BLOCKER - Fixed version
 * Blocks cloud / VPS / datacenter / hosting / VPN / proxies
 * Allows residential ISPs
 * Multi-API fallback (ipwho.is + ipinfo.io), cached per IP
 */

$CACHE_DIR = __DIR__ . '/ip_cache';
$CACHE_TTL = 86400; // 24h
$API_TIMEOUT = 1; // seconds per API

// Multi-API fallback
$APIS = [
    'https://ipwho.is/%s',       // primary: Azure, VPS, cloud, proxy
    'https://ipinfo.io/%s/json', // fallback: extra coverage, no key required for limited requests
];

if (!is_dir($CACHE_DIR)) {
    @mkdir($CACHE_DIR, 0755, true);
}

// ---------------- GET VISITOR IP ----------------
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
if (!$ip) goto block;
$ipLong = ip2long($ip);
if ($ipLong === false) return;

// ---------------- CACHE FILE ----------------
$cacheFile = $CACHE_DIR . '/' . md5($ip) . '.json';

// ---------------- LOAD CACHE ----------------
if (is_file($cacheFile) && (time() - filemtime($cacheFile)) < $CACHE_TTL) {
    $data = json_decode(file_get_contents($cacheFile), true);
} else {
    $data = null;
    foreach ($APIS as $api) {
        $ctx = stream_context_create([
            'http' => ['timeout' => $API_TIMEOUT, 'user_agent' => 'Mozilla/5.0']
        ]);
        $response = @file_get_contents(sprintf($api, $ip), false, $ctx);
        if ($response) {
            $json = json_decode($response, true);
            if (is_array($json)) {
                $data = $json;
                break; // stop at first successful API
            }
        }
    }
    if (!is_array($data)) return; // fail-open
    file_put_contents($cacheFile, json_encode($data), LOCK_EX);
}

// ---------------- DECISION LOGIC ----------------
$isBlock = false;

// ------------------ SAFE CLOUD/VPS KEYWORDS ------------------
$cloudKeywords = [
    'AWS','Amazon','Google','GCP','Microsoft','Azure','Oracle','IBM','Alibaba','Tencent',
    'DigitalOcean','Fastly','Cloudflare','Vultr','Linode','Hetzner','OVH','Scaleway','GitHub','GitLab',
    'VPS','Datacenter','Hosting','Server','VPN','Proxy','SoftLayer','Rackspace','DreamHost','GoDaddy','LiquidWeb','Hostinger'
];

// -------- ipwho.is detection --------
if (isset($data['connection'])) {
    $conn = $data['connection'];
    foreach ($cloudKeywords as $k) {
        if ((isset($conn['org']) && stripos($conn['org'],$k)!==false)
            || (isset($conn['isp']) && stripos($conn['isp'],$k)!==false)
        ) {
            $isBlock = true;
            break;
        }
    }
}
if (isset($data['hosting']) && $data['hosting'] === true) $isBlock = true;

// -------- ipinfo.io fallback --------
if (isset($data['org']) && !empty($data['org'])) {
    foreach ($cloudKeywords as $k) {
        if (stripos($data['org'],$k)!==false) {
            $isBlock = true;
            break;
        }
    }
}

// ---------------- BLOCK IF CLOUD/VPS/VPN/PROXY ----------------
if ($isBlock) goto block;

return;

// ---------------- FAKE 404 ----------------
block:
http_response_code(404);
header('Content-Type: text/html; charset=UTF-8');
header('Cache-Control: no-store');

echo <<<HTML
<!DOCTYPE html>
<html>
<head>
<title>404 Not Found</title>
<meta name="robots" content="noindex,nofollow">
<style>
body{font-family:Arial,Helvetica,sans-serif;background:#fff;color:#333}
.wrap{max-width:720px;margin:12vh auto;text-align:center}
h1{font-size:72px;margin:0}
p{font-size:18px;margin:16px 0}
</style>
</head>
<body>
<div class="wrap">
<h1>404</h1>
<p>The requested URL was not found on this server.</p>
</div>
</body>
</html>
HTML;
exit;