From 7e5b836a49e704ac5157c5a33897474cdcf29426 Mon Sep 17 00:00:00 2001 From: hotyue <52734432+hotyue@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:08:07 +0000 Subject: [PATCH] =?UTF-8?q?feat(agent):=20=E5=BD=BB=E5=BA=95=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=A3=B0=E5=91=90=E6=88=98=E6=8A=A5=EF=BC=8C=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E5=B9=BF=E5=91=8A=E5=AD=97=E7=AC=A6=E5=B9=B2=E6=89=B0?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=85=A8=E5=BA=93=E6=89=93=E5=88=86?= =?UTF-8?q?=E7=9F=A9=E9=98=B5=E4=B8=8E=E6=B5=81=E5=AA=92=E4=BD=93=E9=AB=98?= =?UTF-8?q?=E4=BA=AE=E6=8E=92=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/mod_quality.sh | 122 +++++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 48 deletions(-) diff --git a/core/mod_quality.sh b/core/mod_quality.sh index 68bead0..d7b5cc6 100755 --- a/core/mod_quality.sh +++ b/core/mod_quality.sh @@ -1,6 +1,6 @@ #!/bin/bash # ========================================================== -# IP-Sentinel: 深海声呐 (IP 质量全维异步检测模块满血版) +# IP-Sentinel: 深海声呐 (IP 质量全维异步检测模块终极情报版) # ========================================================== source /opt/ip_sentinel/config.conf @@ -8,90 +8,116 @@ source /opt/ip_sentinel/config.conf TARGET_IP=$(echo "${BIND_IP:-$PUBLIC_IP}" | tr -d '[]') IP_PROTO="${IP_PREF:-4}" -# 1. 静默拉取 JSON -JSON_DATA=$(timeout 180 bash <(curl -sL https://IP.Check.Place) -y -j -${IP_PROTO} -i "${TARGET_IP}" 2>/dev/null) +# 1. 静默拉取 JSON (剔除头部广告杂音) +JSON_DATA=$(timeout 180 bash <(curl -sL https://IP.Check.Place) -y -j -${IP_PROTO} -i "${TARGET_IP}" 2>/dev/null | sed -n '/^{/,$p') -if [ -z "$JSON_DATA" ]; then +if [ -z "$JSON_DATA" ] || ! echo "$JSON_DATA" | jq . >/dev/null 2>&1; then curl -s -X POST "${TG_API_URL}" \ -d "chat_id=${CHAT_ID}" \ -d "parse_mode=Markdown" \ -d "text=❌ *深海声呐探测失败* 📍 节点:\`${NODE_ALIAS}\` 🌐 锁定IP:\`${PUBLIC_IP}\` -⚠️ *未收到回波。检测源超时或 IP 路由受阻。*" >/dev/null +⚠️ *未收到有效回波。检测源超时或数据解析受阻。*" >/dev/null exit 1 fi -# 2. 提取全维基础指标 +# 2. 提取基础物理定位与身份特征 IP_ADDR=$(echo "$JSON_DATA" | jq -r '.Head.IP // empty') [ -z "$IP_ADDR" ] && IP_ADDR="$PUBLIC_IP" ASN=$(echo "$JSON_DATA" | jq -r '.Info.ASN // "Unknown"') ORG=$(echo "$JSON_DATA" | jq -r '.Info.Organization // "Unknown"') CITY=$(echo "$JSON_DATA" | jq -r '.Info.City.Name // "Unknown"') -IP_TYPE=$(echo "$JSON_DATA" | jq -r '.Info.Type // "Unknown"') -USAGE_TYPE=$(echo "$JSON_DATA" | jq -r '.Type.Usage.IPinfo // "Unknown"') +COUNTRY=$(echo "$JSON_DATA" | jq -r '.Info.Region.Name // "Unknown"') +IP_TYPE=$(echo "$JSON_DATA" | jq -r '.Info.Type // "未知属性"') +USAGE_TYPE=$(echo "$JSON_DATA" | jq -r '.Type.Usage.IPinfo // "未知场景"') -# 3. 提取深度风险评分 +# 3. 深度欺诈与信用评估 (各大权威库联查) SCAM_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.SCAMALYTICS // "0"') -FRAUD_RISK=$(echo "$JSON_DATA" | jq -r '.Score.ipapi // "0%"') ABUSE_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.AbuseIPDB // "0"') +IPQS_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.IPQS // "0"') +IP2L_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.IP2LOCATION // "0"') +FRAUD_RISK=$(echo "$JSON_DATA" | jq -r '.Score.ipapi // "0%"') -# 4. 提取流媒体与 AI 解锁指标 -NF_STAT=$(echo "$JSON_DATA" | jq -r '.Media.Netflix.Status // "Unknown"') -NF_REG=$(echo "$JSON_DATA" | jq -r '.Media.Netflix.Region // ""') -YT_STAT=$(echo "$JSON_DATA" | jq -r '.Media.Youtube.Status // "Unknown"') -YT_REG=$(echo "$JSON_DATA" | jq -r '.Media.Youtube.Region // ""') -DP_STAT=$(echo "$JSON_DATA" | jq -r '.Media.DisneyPlus.Status // "Unknown"') -DP_REG=$(echo "$JSON_DATA" | jq -r '.Media.DisneyPlus.Region // ""') -TK_STAT=$(echo "$JSON_DATA" | jq -r '.Media.TikTok.Status // "Unknown"') -TK_REG=$(echo "$JSON_DATA" | jq -r '.Media.TikTok.Region // ""') -GPT_STAT=$(echo "$JSON_DATA" | jq -r '.Media.ChatGPT.Status // "Unknown"') -GPT_REG=$(echo "$JSON_DATA" | jq -r '.Media.ChatGPT.Region // ""') -APV_STAT=$(echo "$JSON_DATA" | jq -r '.Media.AmazonPrimeVideo.Status // "Unknown"') -APV_REG=$(echo "$JSON_DATA" | jq -r '.Media.AmazonPrimeVideo.Region // ""') +# 代理/VPN 特征探针 (只要有一家认为是代理,就亮黄灯) +IS_PROXY="🟢 干净" +if echo "$JSON_DATA" | jq -e '.Factor.Proxy | to_entries | any(.value == true)' >/dev/null 2>&1 || \ + echo "$JSON_DATA" | jq -e '.Factor.VPN | to_entries | any(.value == true)' >/dev/null 2>&1; then + IS_PROXY="🟡 疑似代理/VPN" +fi + +# 4. 提取流媒体与 AI 解锁指标 (带解锁类型) +parse_media() { + local status=$(echo "$JSON_DATA" | jq -r ".Media.$1.Status // \"未知\"") + local reg=$(echo "$JSON_DATA" | jq -r ".Media.$1.Region // \"\"") + local type=$(echo "$JSON_DATA" | jq -r ".Media.$1.Type // \"\"") + + if [[ "$status" == *"解锁"* ]]; then + echo "🟢 $reg ($type)" + elif [[ "$status" == *"屏蔽"* ]] || [[ "$status" == *"失败"* ]]; then + echo "🔴 屏蔽" + else + echo "⚪ $status" + fi +} + +NF_STAT=$(parse_media "Netflix") +YT_STAT=$(parse_media "Youtube") +DP_STAT=$(parse_media "DisneyPlus") +TK_STAT=$(parse_media "TikTok") +GPT_STAT=$(parse_media "ChatGPT") +APV_STAT=$(parse_media "AmazonPrimeVideo") + +# 提取原生 JSON 里的原始状态用于底层隐写回传 +RAW_NF_STAT=$(echo "$JSON_DATA" | jq -r '.Media.Netflix.Status // "Unknown"') +RAW_YT_REG=$(echo "$JSON_DATA" | jq -r '.Media.Youtube.Region // ""') +RAW_YT_STAT=$(echo "$JSON_DATA" | jq -r '.Media.Youtube.Status // "Unknown"') # 5. 邮局连通性与黑名单 PORT25=$(echo "$JSON_DATA" | jq -r '.Mail.Port25 // "false"') -[ "$PORT25" == "true" ] && P25_TEXT="✅ 放行" || P25_TEXT="❌ 封堵" +[ "$PORT25" == "true" ] && P25_TEXT="✅ 畅通" || P25_TEXT="❌ 封堵" DNS_BLACK=$(echo "$JSON_DATA" | jq -r '.Mail.DNSBlacklist.Blacklisted // "0"') DNS_MARK=$(echo "$JSON_DATA" | jq -r '.Mail.DNSBlacklist.Marked // "0"') # 6. “送中” 逻辑判定 WARNING_MSG="" -if [[ "$YT_REG" == *"[CN]"* ]] || [[ "$YT_STAT" == *"China"* ]]; then - WARNING_MSG="%0A🚨 **高危警告:该 IP 已被 Google / YouTube 送中!**%0A" +if [[ "$RAW_YT_REG" == *"[CN]"* ]] || [[ "$RAW_YT_STAT" == *"China"* ]]; then + WARNING_MSG="%0A🚨 **[高危] 该节点已被 Google 判定为中国大陆 (送中)!**%0A" fi -# 7. 组装 Markdown 战报 (满血版) -REPORT="🎯 *深海声呐 - 全维探测报告* +# 7. 组装情报级 Markdown 战报 +REPORT="🎯 *IP-Sentinel 深海声呐报告* 📍 节点:\`${NODE_ALIAS}\` -🌐 IP:\`${IP_ADDR}\`${WARNING_MSG} +🌐 地址:\`${IP_ADDR}\`${WARNING_MSG} -*🏢 物理定位与特征* -• **所属机房:** \`AS${ASN} (${ORG})\` -• **物理定位:** \`${CITY}\` -• **路由属性:** \`${IP_TYPE}\` | \`${USAGE_TYPE}\` +*🏢 物理身份与网络属性* +\`AS${ASN}\` | \`${ORG}\` +**定位:** \`${COUNTRY} - ${CITY}\` +**属性:** \`${IP_TYPE}\` | \`${USAGE_TYPE}\` +**探针:** ${IS_PROXY} -*🛡️ 欺诈与信用评估* -• **Scamalytics:** \`${SCAM_SCORE}/100\` (欺诈分) -• **AbuseIPDB:** \`${ABUSE_SCORE}/100\` (滥用投诉) -• **IPAPI 风险:** \`${FRAUD_RISK}\` (代理与机房概率) +*🛡️ 欺诈雷达 (0为最优)* +• **Scamalytics:** \`${SCAM_SCORE}/100\` +• **AbuseIPDB:** \`${ABUSE_SCORE}/100\` +• **IPQuality:** \`${IPQS_SCORE}/100\` +• **IP2Location:** \`${IP2L_SCORE}/100\` +• **IPAPI 风险率:** \`${FRAUD_RISK}\` -*🎬 核心解锁雷达* -• **YouTube:** \`${YT_STAT}\` ${YT_REG} -• **Netflix:** \`${NF_STAT}\` ${NF_REG} -• **Disney+:** \`${DP_STAT}\` ${DP_REG} -• **PrimeVideo:** \`${APV_STAT}\` ${APV_REG} -• **TikTok:** \`${TK_STAT}\` ${TK_REG} -• **ChatGPT:** \`${GPT_STAT}\` ${GPT_REG} +*🎬 核心业务解锁* +• **YouTube:** ${YT_STAT} +• **Netflix:** ${NF_STAT} +• **Disney+:** ${DP_STAT} +• **PrimeVideo:** ${APV_STAT} +• **TikTok:** ${TK_STAT} +• **ChatGPT:** ${GPT_STAT} -*✉️ 邮局与纯净度* +*✉️ 邮局与污染度* • **25 端口出站:** ${P25_TEXT} -• **DNS 黑名单:** \`${DNS_BLACK}\` 严重 | \`${DNS_MARK}\` 轻度 +• **DNS 污染库:** 严重 \`${DNS_BLACK}\` | 轻微 \`${DNS_MARK}\` -_👉 [🔍 前往 Scamalytics 查阅详细 IP 报告](https://scamalytics.com/ip/${TARGET_IP})_ +_👉 [🔍 详细信用图谱直达 (Scamalytics)](https://scamalytics.com/ip/${TARGET_IP})_ -\`[SYSTEM_REPORT]|QUALITY|${NODE_NAME}|${SCAM_SCORE}|${NF_STAT}\`" +\`[SYSTEM_REPORT]|QUALITY|${NODE_NAME}|${SCAM_SCORE}|${RAW_NF_STAT}\`" # 8. 直送指挥部 curl -s -X POST "${TG_API_URL}" \