【搬运】「IP 检测」多源风控看板油猴脚本

3 条回复
28 次浏览

原作者: https://www.nodeloc.com/u/godeluoo
大家好,最近手痒,写了一款基于多源 IP 风险、地理及安全检测面板脚本。支持随时拖动和自由拉伸大小。
先上几张功能预览和排版效果:

绿灯全亮:AI 与流媒体连通性拉满,代理链路健康度一目了然。
高精风控指标 :bar_chart::集成全球最权威的 IP 欺诈识别库。
核心亮点

  1. 多源高精归属地 & 类型并发对照
    竞态机制获取主 IP:国内走淘宝,国外走 ipify/ipapi.is,并发竞态,秒速获取。
    多库对照:同时聚合了 IPInfo.io、IP-API.is、IP.SB、IP-API.com 等多路权威数据库,精准区分 数据中心 (Hosting)、住宅家宽 (Residential) 以及运营商 ASN 流量构成比例。
  2. AI / 常用服务连通性指示灯网格
    绕过 WAF 盾探测:采用免 HEAD 拦截的 GET 异步请求,直接测速并判断当前节点是否被 ChatGPT、Claude 进行区域阻断,以及 GitHub、YouTube 等出口是否连通。
  3. 零成本白嫖顶级防欺诈风控 API (可选)
    支持在脚本中直接填入你申请的 IPQualityScore (IPQS) 和 AbuseIPDB 的免费 API Key。
    每天 1000~5000 次的官方免费额度,直接本地查询该 IP 的 实时欺诈得分 (Fraud Score) 以及 历史滥用举报频次,企业级风控画像一屏展示。
    :hammer_and_wrench: 安装与使用教程
    第一步:安装 Tampermonkey (油猴) 插件
    如果你的浏览器还没有安装油猴插件,请前往对应浏览器应用商店搜索并安装 Tampermonkey。

第二步:新建用户脚本
点击油猴插件图标,选择 「添加新脚本」。
清空编辑器中默认的代码。
复制下方的完整脚本代码贴进去,按 Ctrl + S (Mac 为 Cmd + S) 保存即可。
第三步(可选):激活企业级风控 Key
展开面板后,切换到 「设置 (Key)」 页签。
贴入你注册好的免费 Key(建议去 AbuseIPDB 官网 和 IPQS 官网 注册免费账户,注册即送免费查询额度,普通人完全用不完)。
点击保存,即可解锁主面板的安全得分评估和黑历史排查记录。
image
image
完整脚本源码

复制
// ==UserScript==
// @name IP 检测
// @namespace http://tampermonkey.net/
// @version 3.4.4
// @description 基于 Cyberpunk-Glassmorphism 科技美学的高级多源 IP 风险、地理及安全检测面板,已集成多源 IP 类型表格、多源定位对照、多源风险占比柱状图、风险因子小红旗表格。
// @author Antigravity
// @match *://*/*
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @connect api.ipify.org
// @connect ipapi.co
// @connect ip-api.com
// @connect api.ip.sb
// @connect ipinfo.io
// @connect api.ipapi.is
// @connect www.ipqualityscore.com
// @connect api.abuseipdb.com
// @connect www.taobao.com
// @connect chatgpt.com
// @connect claude.ai
// @connect github.com
// @connect youtube.com
// @connect ippure.com
// @run-at document-end
// ==/UserScript==

(function() {
    'use strict';



    // 1. 动态加载 Google Font
    const linkFont = document.createElement('link');
    linkFont.rel = 'stylesheet';
    linkFont.href = 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Outfit:wght@400;600;700&display=swap';
    document.head.appendChild(linkFont);

    // 2. 注入全局看板样式 (Cyberpunk Glassmorphism Design System)
    const style = document.createElement('style');
    style.innerHTML = `
        .ip-super-panel {
            position: fixed;
            bottom: 24px;
            right: 24px;
            width: 490px;
            height: 560px; /* 剥离地图与流媒体后,高度缩减,界面更紧凑 */
            min-width: 420px;
            min-height: 380px;
            max-width: 90vw;
            max-height: 95vh;
            background: rgba(10, 12, 22, 0.78);
            backdrop-filter: blur(30px) saturate(220%);
            -webkit-backdrop-filter: blur(30px) saturate(220%);
            border: 1px solid rgba(255, 255, 255, 0.08);
            border-radius: 20px;
            box-shadow:
                0 0 1px rgba(255, 255, 255, 0.2) inset,
                0 24px 60px rgba(0, 0, 0, 0.7),
                0 0 40px rgba(99, 102, 241, 0.15);
            z-index: 999999;
            font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
            color: #cbd5e1;
            display: flex;
            flex-direction: column;
            overflow: hidden;
            transition: width 0.4s cubic-bezier(0.16, 1, 0.3, 1), height 0.4s cubic-bezier(0.16, 1, 0.3, 1), border-radius 0.4s, background-color 0.4s, border-color 0.4s, box-shadow 0.4s;
            user-select: none;
        }
        .ip-super-panel.minimized {
            width: 220px !important; /* 强制拉回折叠态尺寸,覆盖 JS 的 inline-style */
            height: 44px !important;
            min-width: 0 !important;
            min-height: 0 !important;
            border-radius: 22px !important;
            background: rgba(10, 12, 22, 0.92) !important;
            border-color: rgba(99, 102, 241, 0.3) !important;
            box-shadow: 0 8px 32px rgba(99, 102, 241, 0.2) !important;
            cursor: move !important;
        }
        .ip-super-panel.minimized .ip-super-header {
            padding: 0 16px;
            height: 100%;
            background: transparent;
            border-bottom: none;
            display: flex;
            align-items: center;
            justify-content: space-between;
            white-space: nowrap;
            cursor: move; /* 折叠态的头部也展示拖动鼠标手势 */
        }
        .ip-super-panel.minimized .ip-super-btn {
            padding: 4px 8px;
            font-size: 10px;
        }
        .ip-super-header {
            padding: 14px 20px;
            background: linear-gradient(90deg, rgba(99, 102, 241, 0.15) 0%, rgba(6, 182, 212, 0.1) 100%);
            border-bottom: 1px solid rgba(255, 255, 255, 0.06);
            display: flex;
            justify-content: space-between;
            align-items: center;
            cursor: move;
            font-family: 'Outfit', sans-serif;
            font-weight: 600;
            font-size: 15px;
            letter-spacing: 0.5px;
            white-space: nowrap; /* 强行不折行 */
        }
        .ip-super-header-title {
            display: flex;
            align-items: center;
            gap: 8px;
            background: linear-gradient(90deg, #818cf8 0%, #34d399 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            font-size: 16px;
            white-space: nowrap; /* 强行不折行 */
            flex-shrink: 0;
        }
        .ip-super-ctrls {
            display: flex;
            gap: 8px;
            align-items: center;
        }
        .ip-super-btn {
            background: rgba(255, 255, 255, 0.06);
            border: 1px solid rgba(255, 255, 255, 0.08);
            color: #94a3b8;
            padding: 6px 12px;
            border-radius: 8px;
            cursor: pointer;
            font-size: 11px;
            font-weight: 500;
            transition: all 0.25s;
        }
        .ip-super-btn:hover {
            background: rgba(99, 102, 241, 0.2);
            border-color: rgba(99, 102, 241, 0.4);
            color: #fff;
            box-shadow: 0 0 10px rgba(99, 102, 241, 0.3);
        }
        .ip-super-body {
            flex: 1;
            display: flex;
            flex-direction: column;
            overflow: hidden;
        }
        .ip-super-panel.minimized .ip-super-body {
            display: none;
        }

        /* Dashboard Hero Section */
        .ip-super-hero {
            padding: 16px 20px;
            display: flex;
            align-items: center;
            gap: 20px;
            background: rgba(255, 255, 255, 0.01);
            border-bottom: 1px solid rgba(255, 255, 255, 0.04);
        }
        .ip-score-ring {
            position: relative;
            width: 76px;
            height: 76px;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        .ip-score-value {
            position: absolute;
            font-family: 'Outfit', sans-serif;
            font-size: 20px;
            font-weight: 700;
            color: #10b981;
            text-shadow: 0 0 15px currentColor;
        }
        .ip-hero-info {
            flex: 1;
        }
        .ip-hero-ip {
            font-family: 'Outfit', monospace;
            font-size: 22px;
            font-weight: 700;
            background: linear-gradient(90deg, #ffffff 0%, #cbd5e1 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            letter-spacing: 0.5px;
        }
        .ip-hero-meta {
            font-size: 12px;
            color: #94a3b8;
            margin-top: 6px;
            display: flex;
            align-items: center;
            gap: 8px;
        }

        /* Navigation Tabs */
        .ip-super-tabs {
            display: flex;
            background: rgba(0, 0, 0, 0.15);
            border-bottom: 1px solid rgba(255, 255, 255, 0.04);
            padding: 0 16px;
            overflow-x: auto;
        }
        .ip-super-tabs::-webkit-scrollbar {
            display: none;
        }
        .ip-super-tab {
            padding: 12px 14px;
            font-size: 12px;
            font-weight: 500;
            color: #64748b;
            cursor: pointer;
            border-bottom: 2px solid transparent;
            transition: all 0.2s;
            white-space: nowrap;
        }
        .ip-super-tab:hover {
            color: #cbd5e1;
        }
        .ip-super-tab.active {
            color: #818cf8;
            border-bottom-color: #818cf8;
            font-weight: 600;
        }

        /* Tab Contents */
        .ip-super-content {
            flex: 1;
            overflow-y: auto;
            padding: 16px 20px;
        }
        .tab-panel {
            display: none;
            height: 100%;
        }
        .tab-panel.active {
            display: block;
        }

        /* 智能诊断评价总结面板 (AI Diagnostic Summary) */
        .ai-summary-card {
            background: linear-gradient(135deg, rgba(99, 102, 241, 0.08) 0%, rgba(6, 182, 212, 0.04) 100%);
            border: 1px solid rgba(99, 102, 241, 0.15);
            border-radius: 14px;
            padding: 14px;
            margin-bottom: 16px;
            font-size: 12px;
            line-height: 1.6;
        }
        .ai-summary-title {
            display: flex;
            align-items: center;
            gap: 6px;
            font-weight: 700;
            font-size: 13px;
            color: #818cf8;
            margin-bottom: 8px;
        }
        .ai-summary-section {
            margin-bottom: 8px;
        }
        .ai-summary-label {
            font-weight: 600;
            color: #94a3b8;
            display: inline-block;
            margin-right: 4px;
        }
        .ai-summary-text {
            color: #cbd5e1;
        }

        /* Split layout for visual dashboard */
        .dashboard-split {
            display: flex;
            gap: 16px;
            margin-bottom: 16px;
        }
        .dashboard-left {
            width: 140px;
            background: rgba(255, 255, 255, 0.02);
            border: 1px solid rgba(255, 255, 255, 0.04);
            border-radius: 14px;
            padding: 14px;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }
        .dashboard-right {
            flex: 1;
            display: flex;
            flex-direction: column;
            gap: 8px;
        }
        .overview-title {
            font-size: 11px;
            font-weight: 600;
            color: #64748b;
            text-align: center;
            margin-bottom: 10px;
        }
        .risk-bubble {
            margin-top: 10px;
            font-size: 11px;
            font-weight: 700;
            padding: 3px 10px;
            border-radius: 20px;
            text-align: center;
        }
        .risk-bubble.danger {
            background: rgba(239, 68, 68, 0.2);
            color: #fca5a5;
            border: 1px solid rgba(239, 68, 68, 0.3);
        }
        .risk-bubble.warning {
            background: rgba(245, 158, 11, 0.2);
            color: #fde047;
            border: 1px solid rgba(245, 158, 11, 0.3);
        }
        .risk-bubble.safe {
            background: rgba(16, 185, 129, 0.2);
            color: #a7f3d0;
            border: 1px solid rgba(16, 185, 129, 0.3);
        }
        .threat-count-text {
            font-size: 11px;
            color: #94a3b8;
            margin-top: 8px;
            text-align: center;
        }

        /* Detail attributes list styling */
        .attr-row {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 6px 0;
            border-bottom: 1px solid rgba(255, 255, 255, 0.03);
            font-size: 12px;
        }
        .attr-row:last-child {
            border-bottom: none;
        }
        .attr-label {
            color: #64748b;
            font-weight: 500;
        }
        .attr-val {
            color: #e2e8f0;
            font-weight: 600;
            text-align: right;
            max-width: 70%;
            word-break: break-all;
        }

        /* Status Badges */
        .badge-tag {
            display: inline-block;
            padding: 2px 8px;
            border-radius: 6px;
            font-size: 10px;
            font-weight: bold;
            letter-spacing: 0.5px;
        }
        .badge-tag.dc {
            background: linear-gradient(135deg, rgba(239, 68, 68, 0.18) 0%, rgba(239, 68, 68, 0.05) 100%);
            color: #fca5a5;
            border: 1px solid rgba(239, 68, 68, 0.25);
        }
        .badge-tag.residential {
            background: linear-gradient(135deg, rgba(16, 185, 129, 0.18) 0%, rgba(16, 185, 129, 0.05) 100%);
            color: #a7f3d0;
            border: 1px solid rgba(16, 185, 129, 0.25);
        }

        /* 网络构成比例 (运营商业务范围) */
        .net-composition-card {
            background: rgba(255, 255, 255, 0.02);
            border: 1px solid rgba(255, 255, 255, 0.04);
            border-radius: 14px;
            padding: 14px;
            margin-top: 14px;
        }
        .net-comp-bar {
            display: flex;
            height: 10px;
            border-radius: 5px;
            overflow: hidden;
            background: rgba(255, 255, 255, 0.08);
            margin: 8px 0;
        }
        .net-comp-chunk {
            height: 100%;
            transition: width 0.6s cubic-bezier(0.16, 1, 0.3, 1);
        }
        .net-comp-legend {
            display: flex;
            justify-content: space-between;
            font-size: 10px;
            color: #94a3b8;
            flex-wrap: wrap;
            gap: 8px;
        }

        /* Comparisons Lists in Compare Tab */
        .compare-section-title {
            font-size: 12px;
            font-weight: 700;
            color: #818cf8;
            margin: 16px 0 8px 0;
            display: flex;
            align-items: center;
            gap: 6px;
        }
        .compare-section-title:first-child {
            margin-top: 0;
        }
        .compare-table {
            width: 100%;
            border-collapse: collapse;
            font-size: 11px;
            margin-bottom: 12px;
        }
        .compare-table th {
            text-align: left;
            padding: 8px 10px;
            background: rgba(0, 0, 0, 0.2);
            color: #64748b;
            font-weight: 600;
            border-bottom: 1px solid rgba(255, 255, 255, 0.06);
        }
        .compare-table td {
            padding: 8px 10px;
            border-bottom: 1px solid rgba(255, 255, 255, 0.03);
            color: #cbd5e1;
        }

        /* Multi-Source Location Compare list */
        .loc-compare-item {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 10px 14px;
            background: rgba(255, 255, 255, 0.01);
            border: 1px solid rgba(255, 255, 255, 0.03);
            border-radius: 10px;
            margin-bottom: 8px;
            font-size: 12px;
        }
        .loc-source-name {
            font-weight: 600;
            color: #818cf8;
            display: flex;
            align-items: center;
            gap: 6px;
        }

        /* Multi-Source Risk Score meters */
        .risk-meter-wrapper {
            margin-bottom: 12px;
        }
        .risk-meter-header {
            display: flex;
            justify-content: space-between;
            font-size: 11px;
            margin-bottom: 4px;
        }
        .risk-meter-bar {
            height: 6px;
            border-radius: 3px;
            overflow: hidden;
            display: flex;
            background: rgba(255,255,255,0.08);
        }
        .risk-meter-fill-safe {
            background: #10b981;
            height: 100%;
        }
        .risk-meter-fill-danger {
            background: #ef4444;
            height: 100%;
        }
        .risk-level-badge {
            font-size: 9px;
            font-weight: bold;
            padding: 1px 5px;
            border-radius: 4px;
        }
        .risk-level-badge.high { background: rgba(239, 68, 68, 0.2); color: #fca5a5; border: 1px solid rgba(239,68,68,0.3); }
        .risk-level-badge.mid { background: rgba(245, 158, 11, 0.2); color: #fde047; border: 1px solid rgba(245,158,11,0.3); }
        .risk-level-badge.low { background: rgba(16, 185, 129, 0.2); color: #a7f3d0; border: 1px solid rgba(16,185,129,0.3); }

        /* Multi-Source Risk Factor Flag Grid Table */
        .factor-table-container {
            overflow-x: auto;
            margin-top: 16px;
            border: 1px solid rgba(255, 255, 255, 0.05);
            border-radius: 12px;
            background: rgba(0,0,0,0.15);
        }
        .factor-table {
            width: 100%;
            border-collapse: collapse;
            font-size: 10px;
            text-align: center;
        }
        .factor-table th {
            padding: 8px 6px;
            font-weight: 600;
            color: #64748b;
            border-bottom: 1px solid rgba(255, 255, 255, 0.06);
            background: rgba(0, 0, 0, 0.2);
        }
        .factor-table td {
            padding: 8px 6px;
            border-bottom: 1px solid rgba(255, 255, 255, 0.03);
            vertical-align: middle;
        }
        .factor-table th:first-child, .factor-table td:first-child {
            text-align: left;
            padding-left: 12px;
            font-weight: 600;
            color: #818cf8;
            font-size: 11px;
        }
        .factor-indicator {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 16px;
            height: 16px;
            border-radius: 4px;
        }
        .factor-indicator.positive {
            color: #ef4444; /* 阳性 (红色小旗 🚩) */
        }
        .factor-indicator.negative {
            color: #10b981; /* 阴性 (绿色圆点 🟢) */
        }
        .factor-indicator.unsupported {
            color: #475569; /* 不支持 (灰色斜纹 ▨) */
        }

        /* Settings CSS */
        .ip-settings-group {
            margin-bottom: 14px;
        }
        .ip-settings-label {
            display: block;
            font-size: 11px;
            color: #64748b;
            margin-bottom: 6px;
            font-weight: 600;
        }
        .ip-settings-input {
            width: 100%;
            background: rgba(0, 0, 0, 0.3);
            border: 1px solid rgba(255, 255, 255, 0.08);
            border-radius: 8px;
            padding: 10px 12px;
            color: #fff;
            font-size: 12px;
            font-family: monospace;
            box-sizing: border-box;
            outline: none;
            transition: all 0.25s;
        }
        .ip-settings-input:focus {
            border-color: rgba(99, 102, 241, 0.5);
            box-shadow: 0 0 10px rgba(99, 102, 241, 0.2);
        }

        /* AI 连通性指示灯网格 */
        .ai-status-grid {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            gap: 8px;
            margin-bottom: 12px;
            background: rgba(255, 255, 255, 0.02);
            border: 1px solid rgba(255, 255, 255, 0.05);
            border-radius: 12px;
            padding: 8px 12px;
        }
        .ai-status-item {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 6px;
            font-size: 11px;
            font-weight: 500;
            color: #94a3b8;
            background: rgba(255, 255, 255, 0.03);
            padding: 6px 4px;
            border-radius: 8px;
            bor

发表一个评论

R保持