GoForum🌐 V2EX

分享一下防止国内 oss 防止被白嫖,从而白嫖 cloudflare 的思路

jeesk · 2026-01-11 23:43 · 0 次点赞 · 0 条回复
  1. 使用 r2 自己做一个 dl 资源分发下载站,worker 一个 js 文件即可处理. 简单高效
// src/templates/populated-worker/src/index.js

var src_default = {
  async fetch(request, env) {
    const { DATABASE, r2_dl} = env;
    const url = new URL(request.url);

    switch (url.pathname) {
      case "/ping": 
        return new Response('pong', { status: 200 });

      case "/upload": {
        // --- 新增 Basic Auth 校验 ---
        const auth = request.headers.get("Authorization");
        if (!auth) {
          return new Response("Unauthorized", {
            status: 401,
            headers: { "WWW-Authenticate": 'Basic realm="Upload Access"' }
          });
        }

        // 解析 Basic Auth 字符串 (Base64 解码)
        const base64 = auth.split(' ')[1];
        const decoded = atob(base64);
        const [user, pass] = decoded.split(':');

        // 验证用户名和密码 (对应后台设置的环境变量)
        if (user !== "v2ex" || pass !== "xe2v") {
          return new Response("Forbidden", { status: 403 });
        }
        // --- 校验结束 ---

        if (request.method !== "PUT") {
          return new Response("Method Not Allowed", { status: 405 });
        }

        const fileName = url.searchParams.get("filename");
        if (!fileName) {
          return new Response("Missing 'filename' parameter", { status: 400 });
        }

        try {
          await r2_dl.put(fileName, request.body, {
            httpMetadata: {
              contentType: fileName.endsWith(".apk") 
                ? "application/vnd.android.package-archive" 
                : "application/octet-stream",
            }
          });
          return new Response(`Successfully uploaded: ${fileName}`, { status: 200 });
        } catch (e) {
          return new Response(`Upload failed: ${e.message}`, { status: 500 });
        }
      }

      case "/download": {
        const fileName = url.searchParams.get("file");
        if (!fileName) return new Response("Missing 'file'", { status: 400 });

        const object = await r2_dl.get(fileName);
        if (object === null) return new Response("Not Found", { status: 404 });

        const headers = new Headers();
        object.writeHttpMetadata(headers);
        headers.set("etag", object.httpEtag);
        headers.set("Content-Disposition", `attachment; filename="${encodeURIComponent(fileName.split('/').pop())}"`);

        return new Response(object.body, { headers });
      }

      default:
        return new Response('Not Found', { status: 404 });
    }
  }
};

export { src_default as default };

  1. 比如 dl.xx.com/1.apk 使用 doh 查询这个 dns. 然后再请求
  2. 如果上面的 ip 很有可能 sockstimeout, 说明这个 ip 已经被封。 目前看有国内 5%的请求失败。
  3. anycast 的 ip 被封是有可能的, 目前从我获取到的数据大约是 5%的请求会被 ban. 这个时候建议使用大站 ip 。 “` “www.visa.cn”, // Visa 中国官网(带 www ) - CloudFlare CDN “www.visa.com”, // Visa 国际官网 “visa.com”, // Visa 国际 “www.shopify.com”, // Shopify 官方 “store.ubi.com”, // Ubisoft 商店 “mfa.gov.ua”, // 乌克兰外交部
          
 使用上面的 ip 随机来请求,上面的 ip 比较稳定. 
 
5. 如上面的 ip 都不行,那么就需要针对网络运营商优选 ip. 两种情况,
伪代码如下

val 运营商 = if(手机是 wifi 或者 vpn) { //那么直接使用 ipinfo 之类来获取运营商 }else{ // 安卓直接 simOperator 来获取运营商信息 }

// 使用

val ipStr = if(result == “中国联通”){

  httpRequest("https://cf.090227.xyz/cu")
}else if(result == "中国移动"){
  httpRequest("https://cf.090227.xyz/cmccd")
}else if(result == "中国电信"){
  httpRequest("https://cf.090227.xyz/ct")
}else{
  // 不知道是杀,听天由命了
  httpRequest("https://cf.090227.xyz/ip.164746.xyz")
  }

拿到 ip 后再访问下载站。

”`

当然你也可以使用 github release 的方式找几个 proxy 来下载请求,

我推荐的是最开始优选 github 代理加速, 代理炸了在使用 cf 优选 ip.

然后上面的一些地址最好使用 dns txt 保持动态更新。 美滋滋。

0 条回复
添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: jeesk
发布: 2026-01-11
点赞: 0
回复: 0