【开源】针对V2board面板提供免费机场流量的无限薅羊毛!!!

 

如题,使用条件有以下几条:

  1. 使用V2board面板搭建的机场https://github.com/v2board/v2board(差不多就是目前市面上比较常见的机场,看一眼大致UI布局就能知道)
  2. 机场网站注册无需邮箱验证码
  3. 新用户有免费试用流量

Tips:

订阅 API 格式为 /api/v1/client/subscribe?token={token}

这个一般是V2board面板搭建的通常都是这种形式的

满足以上三条即可套用这个代码,实现无限薅新用户试用流量。可能看到这里你觉得条件苛刻,但是不妨换个角度,一旦搞成就是长久稳定的 :ac01:

说了那么多,接下说说使用方法

正文

使用方法:

1.先找到目标机场网站,获取其网站地址,形如:h t tps://your-airport-domain.com【baseUrl

2.试注册一个新号,获取其新用户试用流量的订阅地址,注意看我Tips发的订阅API格式,形如:

h t tps://subscribe-domain.com/api/v1/client/subscribe?token={token}

此时我们要填的是订阅API地址前面的https://subscribe-domain.comsubscribeBase

3.将以上两个信息,换入我下方给出的代码(我在代码中打了注释需要替换的位置在哪)

4.运用cloudflare即可在线部署(或者你有主机也可以实现,使用node.js就可以直接在服务器上运行)在 Cloudflare dashboard:Workers & Pages > Create application > Workers > Deploy a Worker > 选择 “Hello World”,删除编辑器中默认代码,粘贴以下代码,点击右上角就部署即可

默认的workers.dev是需要代理连接的才能实现流畅的使用,所以这个使用你可以自行选择绑定自定义域名,就可以实现无需代理连接,直接更新就可以了(现在cf托管的二级域名各位应该不少吧 :ac16: )

5.最后可以把你的h t tps://XXX.workers.dev这个地址直接当成订阅地址,粘贴到你的V2rayN或者hiddify、shadowrocket、clash verge等都可以直接使用(或者是你绑定的自定义域名)

当你想要使用的使用点击一下更新就可以了,那么又是一个全新的流量

代码:

function generateEmail() {
    const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
    const domains = ['gmail.com', '163.com', '126.com', 'qq.com', 'outlook.com', 'hotmail.com'];
    const name = Array.from({ length: 10 }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
    const domain = domains[Math.floor(Math.random() * domains.length)];
    return `${name}@${domain}`;
}

function generatePassword(length = 10) {
    const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
}

export default {
    async fetch(request, env) {
        // 修改为目标机场的注册和订阅基地址
        const baseUrl = "https://your-airport-domain.com"; // 注册 API 域名
        const subscribeBase = "https://subscribe-domain.com"; // 订阅 API 域名
        
        const apiBase = `${baseUrl}/api/v1`;
        const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36';
        const headersBase = {
            'Content-Type': 'application/json',
            'Origin': baseUrl,
            'User-Agent': userAgent
        };
        
        const email = generateEmail();
        const password = generatePassword();
        
        try {
            
            const registerData = JSON.stringify({ email, password });
            const registerHeaders = { ...headersBase, 'Referer': `${baseUrl}/#/register` };
            const registerResponse = await fetch(`${apiBase}/passport/auth/register`, {
                method: 'POST',
                headers: registerHeaders,
                body: registerData
            });
            if (!registerResponse.ok) {
                return new Response(`注册失败: ${await registerResponse.text()}`, { status: 500 });
            }
            const registerResult = await registerResponse.json();
            const subToken = registerResult.data?.token || registerResult.data?.auth_data?.token;
            if (!subToken) {
                return new Response(`注册无 token: ${JSON.stringify(registerResult)}`, { status: 500 });
            }
            
            const finalUrl = `${subscribeBase}/api/v1/client/subscribe?token=${subToken}`;
            const contentResponse = await fetch(finalUrl, {
                method: 'GET',
                headers: { 'User-Agent': userAgent }
            });
            if (!contentResponse.ok) {
                return new Response(`获取订阅内容失败: ${await contentResponse.text()}`, { status: 500 });
            }
            const content = await contentResponse.text();
            
            try {
                const decodedContent = atob(content);
                return new Response(decodedContent, {
                    headers: { 'Content-Type': 'text/plain; charset=utf-8' }
                });
            } catch {
                return new Response(content, {
                    headers: { 'Content-Type': 'text/plain; charset=utf-8' }
                });
            }
        } catch (e) {
            return new Response(`整体错误: ${e.message}`, { status: 500 });
        }
    }
};

效果图

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞8758 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容