Skip to content

fix: 修复流媒体地区提取、DNS解锁误判、ipapi报错及JSON归档等7处关键Bug - #78

Open
Chen017 wants to merge 2 commits into
xykt:mainfrom
Chen017:fix/critical-bugs
Open

Chen017 wants to merge 2 commits into
xykt:mainfrom
Chen017:fix/critical-bugs

Conversation

@Chen017

@Chen017 Chen017 commented Sep 13, 2026

Copy link
Copy Markdown

概述

本次 PR 针对 ip.sh 脚本在流媒体地区提取、网络参数传递、DNS解锁误判、ipapi 拦截崩溃以及 JSON 字段归档方面的 7 处关键 Bug 进行了全面修复与排查验证。


详细修复内容

1. Amazon Prime Video 地区提取贪婪匹配导致 JS 乱码与排版坍塌

  • 问题位置MediaUnlockTest_PrimeVideo_Region()
  • 原因与危害:Prime Video 页面包含多处 currentTerritorysed 's/.*currentTerritory//' 存在贪婪匹配,直接截取到了 Amazon 前端 Minerva 遥测 JS 片段([],Program:{dataType:a.MinervaValueDataType.STRING,val:o?]),超长字符串导致终端排版折行。
  • 修复方案:改用精确正则提取双字母国家码:
    local result=$(echo $tmpresult|grep -o -E '"currentTerritory":\s*"[A-Z]{2}"'|head -n 1|cut -d'"' -f4)

2. DB-IP 请求单引号字面量导致参数未展开

  • 问题位置db_dbip()
  • 原因与危害local tmpcurlarg='$CurlARG' 使用了单引号字面量,导致 $CurlARG(如网络接口 --interface 或代理 -x)无法展开为实际变量值,影响网络协议连接。
  • 修复方案:改为双引号正常展开:
    local tmpcurlarg="$CurlARG"

3. YouTube 中国大陆地区硬编码 ANSI 颜色导致污染 JSON 归档

  • 问题位置MediaUnlockTest_Youtube()
  • 原因与危害:检测到中国大陆时将 $Font_Red[CN]$Font_Green 直接赋值给 youtube[uregion],导致在输出 JSON 归档时产生未清洗干净的 ANSI 控制符乱码(如 1mCN2m)。
  • 修复方案:存入纯净文本:
    youtube[uregion]="  [CN]   "

4. DNS 解锁检测中缺少 dig 或超时将原生解锁误判为 DNS 解锁

  • 问题位置Check_DNS_3()
  • 原因与危害:当系统中未安装 dnsutils(缺少 dig)或公共 DNS 查询超时丢包时,$resultdnstext 为空字符串。上游仅对 == "0" 进行了判断,导致空字符串落入 else: echo 0 分支,使得 Get_Unlock_Type 误判为 DNS 解锁。
  • 修复方案:放宽判断条件支持空值容错:
    if [ "$resultdnstext" == "0" ]||[ -z "$resultdnstext" ];then

5. IP 解析失败时将原生解锁误判为 DNS 解锁

  • 问题位置Check_DNS_IP()
  • 原因与危害:当网络环境受限或域名无法解析出 IP 时,Check_DNS_IPelse 分支直接返回 0,而 Get_Unlock_Type0 对应 DNS 解锁,导致未解析成功时被误报为 DNS 解锁假阳性。
  • 修复方案:未解析出 IP 时返回 1,避免误报:
    else
    echo 1
    fi

6. IP2Location 数据库公司类型(Company Type)漏写入 JSON 归档

  • 问题位置:JSON 组装写入段落
  • 原因与危害:脚本已通过 ip2location[scomtype] 提取了公司类型并在终端展示,但在组装 JSON 时遗漏了该字段。
  • 修复方案:补齐 IP2LOCATION 的公司类型写入:
    type_updates+=".Type |= . * { Company: { IP2LOCATION: \"$(clean_ansi \"${ip2location[scomtype]:-null}\")\" } } | "

7. db_ipapi 缺失 JSON 有效性校验导致 WAF 拦截时狂喷 10 次 jq 报错及 1 次 awk 崩溃

  • 问题位置db_ipapi()
  • 原因与危害:当请求触发后端 Cloudflare 拦截页面时,上游其他数据库函数均包含 echo "$RESPONSE"|jq . >/dev/null 2>&1||RESPONSE="" 进行格式校验防御,唯独 db_ipapi 漏掉了该判断,直接将 HTML 页面喂给后续 10 处 jq 语句,终端报 jq: parse error: Invalid numeric literal。且后续计算 ipapi[score] 时因数值为空直接触发 awk: line 1: syntax error at or near * 语法崩溃。
  • 修复方案:请求后立即做合法性校验并提前返回,对 awk 计算增加非空保护:
    echo "$RESPONSE"|jq . >/dev/null 2>&1||RESPONSE=""
    [[ -z $RESPONSE ]]&&return 1
    ...
    [[ -n ${ipapi[scorenum]} ]]&&ipapi[score]=$(awk "BEGIN {printf "%.2f%%", ${ipapi[scorenum]} * 100}")

测试验证

  • 执行 bash -n ip.sh 语法验证通过,无任何语法错误。
  • 编写专项测试脚本,针对上述 7 项逻辑边界情况进行了单元测试,均通过验证。

1. 修复 Amazon Prime Video 地区提取贪婪匹配导致抓取 Minerva 遥测 JS 乱码及终端折行
2. 修复 DB-IP 请求单引号字面量导致 $CurlARG 未展开丢失网络参数
3. 修复 YouTube 中国大陆地区硬编码 ANSI 颜色导致污染 JSON 归档
4. 修复 Check_DNS_3 在缺少 dig 或查询超时时将原生解锁误判为 DNS 解锁
5. 修复 Check_DNS_IP 在解析失败或未获取到 IP 时将原生解锁误判为 DNS 解锁
6. 补充 IP2Location 数据库公司类型 (Company Type) 写入 JSON 归档
在请求 ipapi 数据库后补充 JSON 合法性校验和提前退出机制,并在 awk 计算时对 scorenum 增加非空保护,避免返回 HTML 时触发 10 次 jq 语法报错及 1 次 awk 崩溃报错。
@Chen017 Chen017 changed the title fix: 修复流媒体地区提取、DNS解锁误判及JSON归档缺失等6处关键Bug fix: 修复流媒体地区提取、DNS解锁误判、ipapi报错及JSON归档等7处关键Bug Sep 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant