下载之后,进入主界面。点击右上角的 ≡
按钮,进入More settings
,找到Diagnostics
里面的ID
,复制ID
。
然后打开网站Repl.it,运行以下代码:
const referrer = "eca767ef-8512-4f26-b968-48981e79466f"; // 左侧引号内填你的ID const timesToLoop = 1024; // 循环次数 const retryTimes = 5; // 重试次数 const https = require("https"); const zlib = require("zlib"); async function init() { for (let i = 0; i < timesToLoop; i++) { if (await run()) { console.log(i + 1, "OK"); } else { console.log(i + 1, "Error"); for (let r = 0; r < retryTimes; r++) { if (await run()) { console.log(i + 1, "Retry #" + (r + 1), "OK"); break; } else { console.log(i + 1, "Retry #" + (r + 1), "Error"); if (r === retryTimes - 1) { return; } } } } } } async function run() { return new Promise(resolve => { const install_id = genString(11); const postData = JSON.stringify({ key: `${genString(43)}=`, install_id: install_id, fcm_token: `${install_id}:APA91b${genString(134)}`, referrer: referrer, warp_enabled: false, tos: new Date().toISOString().replace("Z", "+07:00"), type: "Android", locale: "zh_CN" }); const options = { hostname: "api.cloudflareclient.com", port: 443, path: "/v0a745/reg", method: "POST", headers: { "Content-Type": "application/json", Host: "api.cloudflareclient.com", Connection: "Keep-Alive", "Accept-Encoding": "gzip", "User-Agent": "okhttp/3.12.1", "Content-Length": postData.length } }; const req = https.request(options, res => { const gzip = zlib.createGunzip(); // const buffer = []; res.pipe(gzip); gzip .on("data", function(data) { // buffer.push(data.toString()); }) .on("end", function() { // console.dir(JSON.parse(buffer.join(""))); resolve(true); }) .on("error", function(e) { // console.error(e); resolve(false); }); }); req.on("error", error => { // console.error(error); resolve(false); }); req.write(postData); req.end(); }); } function genString(length) { // https://gist.github.com/6174/6062387#gistcomment-2651745 return [...Array(length)] .map(i => (~~(Math.random() * 36)).toString(36)) .join(""); } init();
或者直接点击群友牛宝提供的链接,只需要修改ID即可。
1.1.1.1 有时会出现连上不能使用的情况;可能是WARP+模式或被国内阻断干扰或 Cloudflare WARP+ 自身服务不稳定造成;可点击右上角More settings
按钮,找到Connection options
选择Reset all
或Reset keys
后,重新开启连接。
WARP采用wireguard所以我们采用下面的脚本生成wireguard配置。可使用在线网站Repl.it来生成。因应用升级以下脚本已失效,请使用某位大佬的链接直接生成:点击这里
const publicKey = "Public Key复制到这里"; const privateKey = "Private Key复制到这里"; const referrer = "Referrer ID复制到这里获取1G流量直接启用Warp+"; if (!publicKey.endsWith("=") || !privateKey.endsWith("=")) { console.error("请正确填写密钥."); process.exit(1); } const https = require("https"); const zlib = require("zlib"); const fs = require("fs"); const util = require("util"); let warpConf = null; async function run() { let userData = {}; if (fs.existsSync("./warp-conf.json")) { warpConf = JSON.parse(fs.readFileSync("./warp-conf.json").toString()); } else { warpConf = { id: null, publicKey: publicKey, // WireGuard pubic key token: null, // Cloudflare access token isWarpPlusEnabled: null }; } if (!warpConf.id) { console.log("未读取到保存信息, 正在注册新帐号中..."); userData = await reg(); console.log("注册成功:"); console.log(util.inspect(userData, false, null, true)); } else { console.log("正在获取用户信息..."); const res = await getInfo(warpConf.id, warpConf.token); userData = res.result; if ( !warpConf.isWarpPlusEnablsed && // If saved record indicate using free version of Cloudflare Warp userData.account && (userData.account.premium_data || data.account.warp_plus) ) { warpConf.isWarpPlusEnabled = true; fs.writeFileSync("./warp-conf.json", JSON.stringify(warpConf)); } console.log("成功获取用户信息:"); if (process.argv[2] && process.argv[2] === "q") { if (warpConf.isWarpPlusEnabled) { console.log( "\x1b[36m%s\x1b[0m", "WARP PLUS剩余流量:", userData.account.quota / 1000000000, "GB" ); } else { console.log( "\x1b[36m%s\x1b[0m", "您正在使用Cloudflare免费版Warp, 没有流量限制, 您可用自己的ID分享1.1.1.1来获取流量以升级到Warp Plus." ); } process.exit(0); } console.log(util.inspect(userData, false, null, true)); } const wireGuardConf = ` [Interface] PrivateKey = ${privateKey} # PublicKey = ${publicKey} Address = ${userData.config.interface.addresses.v4} # Address = ${userData.config.interface.addresses.v6} DNS = 1.1.1.1 [Peer] PublicKey = ${userData.config.peers[0].public_key} Endpoint = ${userData.config.peers[0].endpoint.v4} # Endpoint = ${userData.config.peers[0].endpoint.v6} # Endpoint = ${userData.config.peers[0].endpoint.host} AllowedIPs = 0.0.0.0/0 `; console.log("Config: "); console.log(wireGuardConf); fs.writeFileSync("./wireguard-cloudflare-warp.conf", wireGuardConf); console.log( "Config saved, check wireguard-cloudflare-warp.conf in current dir." ); if (warpConf.isWarpPlusEnabled) { console.log( "\x1b[36m%s\x1b[0m", "WARP PLUS剩余流量:", userData.account.quota / 1000000000, "GB" ); } else { console.log( "\x1b[36m%s\x1b[0m", "您正在使用Cloudflare免费版Warp, 没有流量限制, 您可用自己的ID分享1.1.1.1来获取流量以升级到Warp Plus." ); } } async function getInfo(id, token) { return new Promise(async resolve => { const result = await httpRequest({ hostname: "api.cloudflareclient.com", port: 443, path: `/v0i1909221500/reg/${id}`, method: "GET", headers: { Accept: "*/*", Authorization: `Bearer ${token}`, Host: "api.cloudflareclient.com", "Accept-Encoding": "gzip", "Accept-Language": "Language", "User-Agent": "1.1.1.1/1909221500.1 CFNetwork/978.0.7 Darwin/18.7.0" } }); if (result.success) { const data = result.payload; resolve(data); } else { console.error("获取用户信息失败."); process.exit(1); } }); } async function reg() { return new Promise(async resolve => { const install_id = genString(11); const postData = { key: publicKey, install_id: install_id, fcm_token: `${install_id}:APA91b${genString(134)}`, referrer: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/.test( referrer ) ? referrer : "", warp_enabled: true, tos: new Date().toISOString().replace("Z", "+08:00"), type: "Android", locale: "en_US" }; const result = await httpRequest( { hostname: "api.cloudflareclient.com", port: 443, path: "/v0a745/reg", method: "POST", headers: { "Content-Type": "application/json", Host: "api.cloudflareclient.com", Connection: "Keep-Alive", "Accept-Encoding": "gzip", "User-Agent": "okhttp/3.12.1" } }, postData ); if (result.success) { const data = result.payload; warpConf.id = data.id; warpConf.token = data.token; if (data.account && (data.account.premium_data || data.account.warp_plus)) warpConf.isWarpPlusEnabled = true; fs.writeFileSync("./warp-conf.json", JSON.stringify(warpConf)); resolve(data); } else { console.error("注册帐号失败."); process.exit(1); } }); } function httpRequest(options, data = undefined) { return new Promise(resolve => { const bodyString = data ? JSON.stringify(data) : data; const req = https.request(options, res => { const gzip = zlib.createGunzip(); const buffer = []; res.pipe(gzip); gzip .on("data", function(data) { buffer.push(data.toString()); }) .on("end", function() { const res = JSON.parse(buffer.join("")); resolve({ success: true, payload: res }); }) .on("error", function(e) { resolve({ success: false, payload: e }); }); }); req.on("error", e => { resolve({ success: false, payload: e }); }); if (bodyString) req.write(bodyString); req.end(); }); } function genString(length) { // https://gist.github.com/6174/6062387#gistcomment-2651745 return [...Array(length)] .map(i => (~~(Math.random() * 36)).toString(36)) .join(""); } run();
介绍一下微软的Chromium Edge:启用Chromium Edge翻译功能:edge://flags/#edge-translate
稳定版下载地址:点击这里