Skip to content

[Bug] randomCNIP似乎从未起作用 #176

@SunsetMkt

Description

@SunsetMkt

确认事项

  • 我已经搜索了现有的issues,确认这不是重复问题
  • 我使用的是最新版本的API, 而且是官方发布的版本,而不是fork或修改版
  • 不处理别人搭建的线上服务的问题,此项目提供任何线上服务不保证质量
  • 如果不是提建议,提 issues 如果不照着模版来将不会优先处理或放着不管
  • 维护项目都是业余时间,精力有限,我只能挑容易解决的issues处理,为了节约双方时间,请尽可能提供足够的有用的信息,给的信息不够我只能根据精力和时间看情况处理,如果模板信息看都不看就删掉,我不会进行任何回复,并且一个月后close掉issue

API版本

Latest Vercel

操作系统或平台

Windows 11

部署平台

Vercel

Bug描述

if (!options.randomCNIP) {
  // 当 randomCNIP 不为 true 时,才进去处理真实客户端 IP
  // 如果是本地回环地址 ::1,就用全局的随机中国 IP (global.cnIp) 兜底
}
// 如果 options.randomCNIP 为 true,直接跳过 if,什么也不执行

重现步骤

/check/music?id=3316968660&randomCNIP=true不工作,/check/music?id=3316968660&realIP=116.25.146.177工作。

期望行为

/check/music?id=3316968660&randomCNIP=true工作,/check/music?id=3316968660&realIP=116.25.146.177工作。

const obj = [...params]
obj[2] = obj[2] || {}
const options = obj[2]

// 1. 安全提取客户端 IP
let clientIp = req.ip || ''
if (typeof clientIp === 'string' && clientIp.startsWith('::ffff:')) {
  clientIp = clientIp.substring(7)
}

// 2. 修正 randomCNIP 的逻辑分支
if (options.randomCNIP) {
  // 显式开启了随机中国 IP,则直接注入全局已经生成好的随机 IP
  obj[2].ip = global.cnIp 
} else {
  // 没开启随机 IP,正常使用客户端真实 IP
  // 特殊情况:如果客户端是本地回环(无法代表真实地理位置),用全局随机 IP 兜底
  if (clientIp === '::1' || clientIp === '127.0.0.1') {
    obj[2].ip = global.cnIp
  } else {
    obj[2].ip = clientIp
  }
}

return request(...obj)

实际行为

/check/music?id=3316968660&randomCNIP=true不工作,/check/music?id=3316968660&realIP=116.25.146.177工作。

错误输出日志

额外信息

No response

愿意协助

  • 我愿意提交PR来修复这个bug
  • 我可以提供更多测试用例
  • 我可以帮助测试修复方案

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions