{"id":69,"date":"2026-03-16T06:15:09","date_gmt":"2026-03-16T06:15:09","guid":{"rendered":"https:\/\/tools.sanepo.com\/?post_type=tool&#038;p=69"},"modified":"2026-03-16T06:15:10","modified_gmt":"2026-03-16T06:15:10","slug":"ip-domain-blacklist-checker","status":"publish","type":"tool","link":"https:\/\/tools.sanepo.com\/es\/features\/ip-domain-blacklist-checker\/","title":{"rendered":"Free IP &amp; Domain Blacklist Checker"},"content":{"rendered":"\n<div id=\"wpnt-ip-blacklist\">\n    <style>\n        @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&display=swap');\n\n        \/* CSS Variables Default (Sesuai Referensi) *\/\n        #wpnt-ip-blacklist {\n            --bg-primary: #ffffff;\n            --bg-secondary: #f8fafc;\n            --border-color: #e2e8f0;\n            --accent-color: #4361ee;\n            --accent-hover: #3a56d4;\n            --glass-bg: rgba(255, 255, 255, 0.85);\n            --card-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n            --transition: all 0.3s ease;\n            \n            \/* Tool Specific Variables *\/\n            --wpnt-success: #10b981;\n            --wpnt-danger: #ef4444;\n            --wpnt-warning: #f59e0b;\n            --wpnt-pending: #64748b;\n            --wpnt-text-main: #1e293b; \/* Variabel warna teks baru *\/\n            --wpnt-radius-lg: 16px;\n            --wpnt-radius-md: 12px;\n            --wpnt-radius-sm: 8px;\n            \n            font-family: 'Inter', sans-serif;\n            color: var(--wpnt-text-main);\n            width: 100%;\n            margin: 30px auto;\n            background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-secondary) 100%);\n            border: 1px solid var(--border-color);\n            border-radius: var(--wpnt-radius-lg);\n            box-shadow: var(--card-shadow);\n            padding: 32px;\n            box-sizing: border-box;\n            line-height: 1.5;\n            backdrop-filter: blur(10px);\n            -webkit-backdrop-filter: blur(10px);\n        }\n\n        #wpnt-ip-blacklist * {\n            box-sizing: border-box;\n            transition: var(--transition);\n        }\n\n        \/* FIX 1: Mengunci warna teks agar tidak kalah dari CSS tema web *\/\n        #wpnt-ip-blacklist h3,\n        #wpnt-ip-blacklist h4,\n        #wpnt-ip-blacklist p,\n        #wpnt-ip-blacklist .dnsbl-name,\n        #wpnt-ip-blacklist .progress-text,\n        #wpnt-ip-blacklist .wpnt-score {\n            color: var(--wpnt-text-main);\n        }\n\n        \/* Dark Mode Adaptability (Otomatis mengikuti preferensi OS\/Tema) *\/\n        @media (prefers-color-scheme: dark) {\n            #wpnt-ip-blacklist {\n                --bg-primary: #0f172a;\n                --bg-secondary: #1e293b;\n                --border-color: #334155;\n                --glass-bg: rgba(15, 23, 42, 0.7);\n                --wpnt-text-main: #f1f5f9;\n                --wpnt-pending: #94a3b8;\n            }\n        }\n\n        \/* FIX 2: Sinkronisasi Light\/Dark mode dengan switch toggle tema website Anda *\/\n        \/* Jika website mode Light *\/\n        html.light #wpnt-ip-blacklist,\n        body.light #wpnt-ip-blacklist,\n        [data-theme=\"light\"] #wpnt-ip-blacklist {\n            --bg-primary: #ffffff !important;\n            --bg-secondary: #f8fafc !important;\n            --border-color: #e2e8f0 !important;\n            --glass-bg: rgba(255, 255, 255, 0.85) !important;\n            --wpnt-text-main: #1e293b !important;\n            --wpnt-pending: #64748b !important;\n        }\n\n        \/* Jika website mode Dark *\/\n        html.dark #wpnt-ip-blacklist,\n        body.dark #wpnt-ip-blacklist,\n        [data-theme=\"dark\"] #wpnt-ip-blacklist {\n            --bg-primary: #0f172a !important;\n            --bg-secondary: #1e293b !important;\n            --border-color: #334155 !important;\n            --glass-bg: rgba(15, 23, 42, 0.7) !important;\n            --wpnt-text-main: #f1f5f9 !important;\n            --wpnt-pending: #94a3b8 !important;\n        }\n\n        \/* Header *\/\n        #wpnt-ip-blacklist .wpnt-header {\n            text-align: center;\n            margin-bottom: 32px;\n        }\n\n        #wpnt-ip-blacklist h3 {\n            margin: 0 0 8px 0;\n            font-size: 1.8rem;\n            font-weight: 700;\n            letter-spacing: -0.025em;\n        }\n\n        #wpnt-ip-blacklist p {\n            margin: 0;\n            font-size: 0.95rem;\n            opacity: 0.8;\n        }\n\n        \/* Main Scan Box *\/\n        #wpnt-ip-blacklist .wpnt-scan-box {\n            background: var(--glass-bg);\n            border: 1px solid var(--border-color);\n            border-radius: var(--wpnt-radius-md);\n            padding: 24px;\n            margin-bottom: 24px;\n            box-shadow: var(--card-shadow);\n        }\n\n        \/* Input Group *\/\n        #wpnt-ip-blacklist .wpnt-input-group {\n            display: flex;\n            gap: 12px;\n            flex-wrap: wrap;\n        }\n\n        #wpnt-ip-blacklist .wpnt-input-wrapper {\n            flex: 1;\n            min-width: 250px;\n            position: relative;\n        }\n\n        #wpnt-ip-blacklist input[type=\"text\"] {\n            width: 100%;\n            padding: 14px 16px 14px 40px;\n            border-radius: var(--wpnt-radius-sm);\n            border: 1px solid var(--border-color);\n            background-color: var(--bg-primary);\n            color: var(--wpnt-text-main);\n            font-family: inherit;\n            font-size: 1rem;\n            outline: none;\n        }\n\n        #wpnt-ip-blacklist input[type=\"text\"]:focus {\n            border-color: var(--accent-color);\n            box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.15);\n        }\n\n        #wpnt-ip-blacklist .wpnt-input-icon {\n            position: absolute;\n            left: 14px;\n            top: 50%;\n            transform: translateY(-50%);\n            color: inherit;\n            opacity: 0.5;\n            width: 18px;\n            height: 18px;\n        }\n\n        \/* Buttons *\/\n        #wpnt-ip-blacklist .wpnt-btn {\n            background: var(--accent-color);\n            color: #ffffff;\n            border: none;\n            padding: 14px 24px;\n            border-radius: var(--wpnt-radius-sm);\n            cursor: pointer;\n            font-weight: 600;\n            font-size: 0.95rem;\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            gap: 8px;\n            white-space: nowrap;\n        }\n\n        #wpnt-ip-blacklist .wpnt-btn.secondary {\n            background: transparent;\n            color: var(--accent-color);\n            border: 1px solid var(--border-color);\n        }\n\n        #wpnt-ip-blacklist .wpnt-btn:hover:not(:disabled) {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 12px rgba(67, 97, 238, 0.25);\n        }\n        \n        #wpnt-ip-blacklist .wpnt-btn.secondary:hover:not(:disabled) {\n            border-color: var(--accent-color);\n            background: rgba(67, 97, 238, 0.05);\n            box-shadow: none;\n        }\n\n        #wpnt-ip-blacklist .wpnt-btn:disabled {\n            opacity: 0.6;\n            cursor: not-allowed;\n            transform: none;\n        }\n\n        \/* Summary Panel *\/\n        #wpnt-ip-blacklist .wpnt-summary {\n            display: none;\n            text-align: center;\n            margin-top: 32px;\n            padding-top: 24px;\n            border-top: 1px dashed var(--border-color);\n            animation: fadeIn 0.5s ease;\n        }\n\n        #wpnt-ip-blacklist .wpnt-summary h4 {\n            margin: 0 0 10px 0;\n            font-size: 1.1rem;\n            opacity: 0.7;\n            text-transform: uppercase;\n            letter-spacing: 0.05em;\n        }\n\n        #wpnt-ip-blacklist .wpnt-score {\n            font-size: 3rem;\n            font-weight: 700;\n            margin: 10px 0;\n            line-height: 1;\n        }\n\n        \/* Progress Bar *\/\n        #wpnt-ip-blacklist .progress-container {\n            display: none;\n            margin-top: 24px;\n            padding-top: 24px;\n            border-top: 1px dashed var(--border-color);\n        }\n        \n        #wpnt-ip-blacklist .progress-text {\n            display: flex;\n            justify-content: space-between;\n            font-size: 0.85rem;\n            font-weight: 600;\n            margin-bottom: 12px;\n        }\n\n        #wpnt-ip-blacklist .progress-bar-bg {\n            width: 100%;\n            height: 6px;\n            background: var(--border-color);\n            border-radius: 4px;\n            overflow: hidden;\n        }\n\n        #wpnt-ip-blacklist .progress-bar-fill {\n            height: 100%;\n            width: 0%;\n            background: var(--accent-color);\n            border-radius: 4px;\n            transition: width 0.3s ease;\n        }\n\n        \/* Results Grid *\/\n        #wpnt-ip-blacklist .wpnt-results-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n            gap: 12px;\n            margin-top: 24px;\n        }\n\n        #wpnt-ip-blacklist .wpnt-result-card {\n            background: var(--glass-bg);\n            border: 1px solid var(--border-color);\n            border-radius: var(--wpnt-radius-sm);\n            padding: 14px 16px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n\n        #wpnt-ip-blacklist .wpnt-result-card:hover {\n            border-color: var(--accent-color);\n        }\n\n        #wpnt-ip-blacklist .dnsbl-name {\n            font-weight: 500;\n            font-size: 0.85rem;\n            word-break: break-all;\n        }\n\n        #wpnt-ip-blacklist .wpnt-badge {\n            display: inline-flex;\n            align-items: center;\n            padding: 4px 10px;\n            border-radius: 6px;\n            font-weight: 700;\n            font-size: 0.7rem;\n            text-transform: uppercase;\n            letter-spacing: 0.05em;\n        }\n\n        #wpnt-ip-blacklist .badge-pending { background: var(--border-color); color: var(--wpnt-pending); }\n        #wpnt-ip-blacklist .badge-clean { background: rgba(16, 185, 129, 0.15); color: var(--wpnt-success); }\n        #wpnt-ip-blacklist .badge-listed { background: rgba(239, 68, 68, 0.15); color: var(--wpnt-danger); }\n        #wpnt-ip-blacklist .badge-error { background: rgba(245, 158, 11, 0.15); color: var(--wpnt-warning); }\n\n        \/* Share & Actions Bottom *\/\n        #wpnt-ip-blacklist .wpnt-actions-bottom {\n            display: none;\n            justify-content: center;\n            gap: 12px;\n            margin-top: 32px;\n            animation: fadeIn 0.5s ease;\n        }\n\n        #wpnt-ip-blacklist .wpnt-action-btn {\n            background: var(--glass-bg);\n            border: 1px solid var(--border-color);\n            color: inherit;\n            padding: 10px 20px;\n            border-radius: 20px;\n            font-size: 0.85rem;\n            font-weight: 600;\n            cursor: pointer;\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n        }\n\n        #wpnt-ip-blacklist .wpnt-action-btn:hover {\n            border-color: var(--accent-color);\n            color: var(--accent-color);\n        }\n\n        @keyframes fadeIn {\n            from { opacity: 0; transform: translateY(10px); }\n            to { opacity: 1; transform: translateY(0); }\n        }\n\n        \/* Responsive *\/\n        @media (max-width: 600px) {\n            #wpnt-ip-blacklist { padding: 20px 16px; }\n            #wpnt-ip-blacklist .wpnt-input-group { flex-direction: column; }\n            #wpnt-ip-blacklist .wpnt-btn { width: 100%; }\n            #wpnt-ip-blacklist .wpnt-actions-bottom { flex-wrap: wrap; }\n            #wpnt-ip-blacklist .wpnt-action-btn { width: 100%; justify-content: center; }\n        }\n    <\/style>\n\n    <div class=\"wpnt-header\">\n        <h3>Free IP &#038; Domain Blacklist Checker<\/h3>\n        <p>Scan your IP or Domain against top global DNSBL databases in real-time.<\/p>\n    <\/div>\n\n    <div class=\"wpnt-scan-box\">\n        <div class=\"wpnt-input-group\">\n            <div class=\"wpnt-input-wrapper\">\n                <svg class=\"wpnt-input-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\"><\/path><\/svg>\n                <input type=\"text\" id=\"wpnt-target-input\" placeholder=\"Enter IP Address or Domain\" autocomplete=\"off\" \/>\n            <\/div>\n            <button class=\"wpnt-btn secondary\" id=\"wpnt-myip-btn\" onclick=\"wpntGetMyIP()\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"\/><path d=\"M2 12h20\"\/><\/svg>\n                My IP\n            <\/button>\n            <button class=\"wpnt-btn\" id=\"wpnt-scan-btn\" onclick=\"wpntStartScan()\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.3-4.3\"\/><\/svg>\n                Scan Now\n            <\/button>\n        <\/div>\n\n        <div class=\"progress-container\" id=\"wpnt-progress-container\">\n            <div class=\"progress-text\">\n                <span id=\"wpnt-progress-label\">Checking databases&#8230;<\/span>\n                <span id=\"wpnt-progress-percent\">0%<\/span>\n            <\/div>\n            <div class=\"progress-bar-bg\">\n                <div class=\"progress-bar-fill\" id=\"wpnt-progress-fill\"><\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"wpnt-summary\" id=\"wpnt-summary\">\n            <h4>Scan Complete<\/h4>\n            <div class=\"wpnt-score\" id=\"wpnt-score-display\">&#8211;<\/div>\n            <p id=\"wpnt-summary-text\" style=\"font-weight: 500;\">&#8211;<\/p>\n        <\/div>\n    <\/div>\n\n    <div class=\"wpnt-results-grid\" id=\"wpnt-results\">\n        <!-- Hasil scan akan di-render di sini oleh JavaScript -->\n    <\/div>\n\n    <!-- Actions (Share & Copy) -->\n    <div class=\"wpnt-actions-bottom\" id=\"wpnt-actions\">\n        <button class=\"wpnt-action-btn\" onclick=\"wpntCopyReport()\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"><\/rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"><\/path><\/svg>\n            Copy Report\n        <\/button>\n        <button class=\"wpnt-action-btn\" onclick=\"wpntShareTool()\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"18\" cy=\"5\" r=\"3\"><\/circle><circle cx=\"6\" cy=\"12\" r=\"3\"><\/circle><circle cx=\"18\" cy=\"19\" r=\"3\"><\/circle><line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"><\/line><line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"><\/line><\/svg>\n            Share Tool\n        <\/button>\n    <\/div>\n\n    <script>\n        \/**\n         * WP-NanoTech IP Blacklist Checker Logic\n         * 100% Client-Side\n         *\/\n\n        \/\/ 20+ Daftar DNSBL Provider Global\n        const dnsblProviders = [\n            \"zen.spamhaus.org\", \"b.barracudacentral.org\", \"bl.spamcop.net\",\n            \"dnsbl.sorbs.net\", \"cbl.abuseat.org\", \"spam.dnsbl.sorbs.net\",\n            \"bl.tiopan.com\", \"dnsbl-1.uceprotect.net\", \"psbl.surriel.com\",\n            \"ubl.unsubscore.com\", \"dnsbl.justspam.org\", \"all.s5h.net\",\n            \"bl.blocklist.de\", \"z.mailspike.net\", \"ix.dnsbl.manitu.net\",\n            \"truncate.gbudb.net\", \"db.wpbl.info\", \"dnsbl.dronebl.org\",\n            \"rbl.interserver.net\", \"spam.rbl.blockedservers.com\"\n        ];\n\n        let isScanning = false;\n        let lastScanResult = { target: \"\", listedCount: 0, total: 20 };\n\n        async function wpntGetMyIP() {\n            const btn = document.getElementById('wpnt-myip-btn');\n            const input = document.getElementById('wpnt-target-input');\n            try {\n                btn.disabled = true;\n                const response = await fetch('https:\/\/api.ipify.org?format=json');\n                const data = await response.json();\n                input.value = data.ip;\n            } catch (error) {\n                alert('Failed to detect your IP. Please enter it manually.');\n            } finally {\n                btn.disabled = false;\n            }\n        }\n\n        function isValidIPv4(ip) {\n            const ipv4Regex = \/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$\/;\n            return ipv4Regex.test(ip);\n        }\n\n        function reverseIP(ip) {\n            return ip.split('.').reverse().join('.');\n        }\n\n        async function resolveDomainToIP(domain) {\n            try {\n                const res = await fetch(`https:\/\/dns.google\/resolve?name=${domain}&type=A`);\n                const data = await res.json();\n                if (data.Status === 0 && data.Answer && data.Answer.length > 0) {\n                    return data.Answer[0].data;\n                }\n                return null;\n            } catch (error) {\n                return null;\n            }\n        }\n\n        async function wpntStartScan() {\n            if (isScanning) return;\n\n            let target = document.getElementById('wpnt-target-input').value.trim();\n            if (!target) {\n                alert(\"Please enter a valid IP address or Domain name.\");\n                return;\n            }\n\n            const scanBtn = document.getElementById('wpnt-scan-btn');\n            const inputField = document.getElementById('wpnt-target-input');\n            const resultsGrid = document.getElementById('wpnt-results');\n            const progressContainer = document.getElementById('wpnt-progress-container');\n            const progressFill = document.getElementById('wpnt-progress-fill');\n            const progressLabel = document.getElementById('wpnt-progress-label');\n            const progressPercent = document.getElementById('wpnt-progress-percent');\n            const summaryPanel = document.getElementById('wpnt-summary');\n            const actionsBottom = document.getElementById('wpnt-actions');\n\n            isScanning = true;\n            scanBtn.disabled = true;\n            inputField.disabled = true;\n            scanBtn.innerHTML = \"Scanning...\";\n            resultsGrid.innerHTML = \"\";\n            summaryPanel.style.display = \"none\";\n            actionsBottom.style.display = \"none\";\n            progressContainer.style.display = \"block\";\n            progressFill.style.width = \"0%\";\n            \n            \/\/ Render Skeleton Cards\n            dnsblProviders.forEach((provider, index) => {\n                resultsGrid.innerHTML += `\n                    <div class=\"wpnt-result-card\" id=\"card-${index}\">\n                        <div class=\"dnsbl-name\">${provider}<\/div>\n                        <div class=\"wpnt-badge badge-pending\" id=\"badge-${index}\">Checking<\/div>\n                    <\/div>\n                `;\n            });\n\n            let targetIP = target;\n            if (!isValidIPv4(target)) {\n                progressLabel.innerText = \"Resolving domain to IP...\";\n                targetIP = await resolveDomainToIP(target);\n                if (!targetIP) {\n                    progressLabel.innerText = \"Error: Invalid Domain or IP.\";\n                    resetUI(scanBtn, inputField);\n                    return;\n                }\n            }\n            \n            progressLabel.innerText = `Scanning: ${targetIP}`;\n            const revIP = reverseIP(targetIP);\n            let checkedCount = 0;\n            let listedCount = 0;\n            const total = dnsblProviders.length;\n\n            const scanPromises = dnsblProviders.map(async (provider, index) => {\n                const badge = document.getElementById(`badge-${index}`);\n                try {\n                    const response = await fetch(`https:\/\/dns.google\/resolve?name=${revIP}.${provider}&type=A`);\n                    const data = await response.json();\n\n                    if (data.Status === 0 && data.Answer) {\n                        badge.className = \"wpnt-badge badge-listed\";\n                        badge.innerText = \"Listed\";\n                        listedCount++;\n                    } else if (data.Status === 3 || !data.Answer) {\n                        badge.className = \"wpnt-badge badge-clean\";\n                        badge.innerText = \"Clean\";\n                    } else {\n                        badge.className = \"wpnt-badge badge-error\";\n                        badge.innerText = \"Timeout\";\n                    }\n                } catch (error) {\n                    badge.className = \"wpnt-badge badge-error\";\n                    badge.innerText = \"Error\";\n                } finally {\n                    checkedCount++;\n                    const percent = Math.round((checkedCount \/ total) * 100);\n                    progressFill.style.width = `${percent}%`;\n                    progressPercent.innerText = `${percent}%`;\n                }\n            });\n\n            await Promise.allSettled(scanPromises);\n\n            \/\/ Tampilkan Ringkasan & Tombol Share\n            setTimeout(() => {\n                progressContainer.style.display = \"none\";\n                summaryPanel.style.display = \"block\";\n                actionsBottom.style.display = \"flex\";\n                \n                const scoreDisplay = document.getElementById('wpnt-score-display');\n                const summaryText = document.getElementById('wpnt-summary-text');\n                \n                scoreDisplay.innerText = `${listedCount} \/ ${total}`;\n                lastScanResult = { target: targetIP, listedCount: listedCount, total: total };\n                \n                if (listedCount === 0) {\n                    scoreDisplay.style.color = \"var(--wpnt-success)\";\n                    summaryText.style.color = \"var(--wpnt-success)\";\n                    summaryText.innerText = `Great! ${targetIP} is completely clean.`;\n                } else {\n                    scoreDisplay.style.color = \"var(--wpnt-danger)\";\n                    summaryText.style.color = \"var(--wpnt-danger)\";\n                    summaryText.innerText = `Warning! ${targetIP} is listed on ${listedCount} blacklist databases.`;\n                }\n\n                resetUI(scanBtn, inputField);\n            }, 500);\n        }\n\n        function resetUI(scanBtn, inputField) {\n            isScanning = false;\n            scanBtn.disabled = false;\n            inputField.disabled = false;\n            scanBtn.innerHTML = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"m21 21-4.3-4.3\"\/><\/svg> Scan Now';\n        }\n\n        \/\/ Fitur Tambahan: Copy Report ke Clipboard\n        function wpntCopyReport() {\n            if(lastScanResult.target === \"\") return;\n            const report = `IP Blacklist Report for ${lastScanResult.target}\\nResult: Listed on ${lastScanResult.listedCount} out of ${lastScanResult.total} databases.\\nChecked via Sanepo Tools IP Blacklist Checker.`;\n            \n            navigator.clipboard.writeText(report).then(() => {\n                alert(\"Report copied to clipboard!\");\n            }).catch(() => {\n                alert(\"Failed to copy report.\");\n            });\n        }\n\n        \/\/ Fitur Tambahan: Share Tool native Web Share API\n        function wpntShareTool() {\n            if (navigator.share) {\n                navigator.share({\n                    title: 'Free IP & Domain Blacklist Checker',\n                    text: 'Check if your IP or Domain is blacklisted across 20+ global DNSBL databases instantly.',\n                    url: window.location.href\n                }).catch(console.error);\n            } else {\n                navigator.clipboard.writeText(window.location.href).then(() => {\n                    alert(\"Tool Link copied to clipboard! You can share it now.\");\n                });\n            }\n        }\n    <\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Free IP &#038; Domain Blacklist Checker Scan your IP or Domain against top global DNSBL databases in real-time. My IP Scan Now Checking databases&#8230; 0% Scan Complete &#8211; &#8211; Copy Report Share Tool<\/p>\n","protected":false},"featured_media":0,"template":"","meta":[],"class_list":["post-69","tool","type-tool","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tools.sanepo.com\/es\/wp-json\/wp\/v2\/tool\/69","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tools.sanepo.com\/es\/wp-json\/wp\/v2\/tool"}],"about":[{"href":"https:\/\/tools.sanepo.com\/es\/wp-json\/wp\/v2\/types\/tool"}],"wp:attachment":[{"href":"https:\/\/tools.sanepo.com\/es\/wp-json\/wp\/v2\/media?parent=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}