Skip to content

Instantly share code, notes, and snippets.

@vfarid
Last active February 17, 2024 14:50
Show Gist options
  • Save vfarid/9393edc718a5212045f4795cece5a03d to your computer and use it in GitHub Desktop.
Save vfarid/9393edc718a5212045f4795cece5a03d to your computer and use it in GitHub Desktop.
const subLink1 = "https://raw.githubusercontent.com/freefq/free/master/v2"
const subLink2 = "https://raw.githubusercontent.com/Pawdroid/Free-servers/main/sub"
const cnfLink1 = "https://raw.githubusercontent.com/mahdibland/ShadowsocksAggregator/master/sub/sub_merge.txt"
const cleanIPLink = "http://bot.sudoer.net/best.cf.iran.all"
const operatorList = ["AST", "HWB", "IRC", "MBT", "MCI", "MKB", "PRS", "RTL", "SHT", "ZTL"]
const addressList = ["discord.com", "cloudflare.com", "nginx.com", "cdnjs.com", "vimeo.com", "networksolutions.com", "spotify.com"]
const fpList = ["chrome", "chrome", "chrome", "firefox", "safari", "edge", "ios", "android", "random", "random"]
const alpnList = ["http/1.1", "h2,http/1.1", "h2,http/1.1"]
export default {
async fetch(request) {
var url = new URL(request.url)
var pathParts = url.pathname.replace(/^\/|\/$/g, "").split("/")
if (pathParts[0] == "sub") {
var cleanIPs = []
if (pathParts[1] !== undefined) {
var operator = pathParts[1].toUpperCase()
if (operatorList.includes(operator)) {
cleanIPs = await fetch(cleanIPLink).then(r => r.text()).then(t => t.split("\n"))
cleanIPs = cleanIPs.filter(line => (line.search(operator) > 0))
cleanIPs = cleanIPs.map(line => line.split(" ")[0].trim())
} else if (isIp(operator)) {
cleanIPs = [operator]
}
}
var configList = []
configList = configList.concat(await fetch(subLink1).then(r => r.text()).then(a => atob(a)).then(t => t.split("\n")))
configList = configList.concat(await fetch(subLink2).then(r => r.text()).then(a => atob(a)).then(t => t.split("\n")))
configList = configList.concat(await fetch(cnfLink1).then(r => r.text()).then(t => t.split("\n")))
configList = configList.filter(cnf => (cnf.search("vmess://") == 0))
configList = configList.map(config => {
try {
var conf = JSON.parse(atob(config.substr(8)))
if (conf.tls != "tls") {
throw "no-tls"
}
var addr = conf.sni
if (!addr) {
if (conf.add && !isIp(conf.add)) {
addr = conf.add
} else if (conf.host && !isIp(conf.host)) {
addr = conf.host
}
}
if (!addr) {
throw "no-tls"
}
conf.sni = url.hostname
if (cleanIPs.length) {
conf.add = cleanIPs[Math.floor(Math.random() * cleanIPs.length)]
} else {
conf.add = addressList[Math.floor(Math.random() * addressList.length)]
}
conf.host = url.hostname
conf.path = "/" + addr + ":" + conf.port + conf.path
conf.fp = fpList[Math.floor(Math.random() * fpList.length)]
conf.alpn = alpnList[Math.floor(Math.random() * alpnList.length)]
conf.port = 443
return "vmess://" + btoa(JSON.stringify(conf))
} catch (e) {
return ""
}
})
configList = getMultipleRandomElements(configList.filter(cnf => (cnf.length > 10)), 100)
return new Response(btoa(configList.join("\n")));
} else {
var url = new URL(request.url)
var newUrl = new URL("https://" + url.pathname.replace(/^\/|\/$/g, ''))
return fetch(new Request(newUrl, request));
}
}
}
function getMultipleRandomElements(arr, num) {
var shuffled = [...arr].sort(() => 0.5 - Math.random());
return shuffled.slice(0, num);
}
function isIp(str) {
try {
if (str == "" || str == undefined) return false;
if (!/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){2}\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-4])$/.test(str)) {
return false;
}
var ls = str.split('.');
if (ls == null || ls.length != 4 || ls[3] == "0" || parseInt(ls[3]) === 0) {
return false;
}
return true;
} catch (ee) { }
return false;
}
@micimozz
Copy link

micimozz commented Feb 22, 2023

وحید جان ممنون از همه راهنمایی‌ها، همه‌چی درست میره جلو، اما الان تو ۱۰۰ تا کانفیگی که در نهایت داریم حتی یکی هم کار نمی‌کنه. یه سوال هم داشتم، ممکنه تفاوت بین دو نوع آپدیت سابسکرپیشن رو هم کوتاه بگی؟ با پروکسی و بدون پروکسی و اینکه اگه به موقعیتی مثل الان رسیدیم کدوم رو باید انجام بدیم

دوست عزیز دم دست ترین راه حل اینه که هرگاه دیدید تمامی اکانتای v2rayیا (هر آپ‌ مشابه‌ش که استفاده میکنید) پینگ 1ms- میده بهتون -> تمامی برنامه های گوشی رو ببندید->حتی vpn هم خاموش، 15ثانیه گوشی رو "فلای مود" ببرید-> بعد پینگ (Real delay all configuration) بگیرید.
برای من در اکثر مواقع این ترفند یعنی با گرفتن IP عمومی جدید پینگ سبز میده.OK
وضمنا با برنامه Matsuri کار نکنید -> رو این تکنیک بالا باگ داره.
موفق باشید
نکته اضافی: اگه مودم داری 15ثانیه خاموش بعد روشن کن تا مودمت IP جدید بگیره
و لطفا دقت کنید حتما برنامه تون روی آخرین نسخه آپدیت باشه. چون دیدم برخی دستگاه بعلت آپدیت نبود برنامه گزینه های utls, alpn ندارن یا آپدیت هست برنامه شون ولی برنامه ایراد پیدا کرده و مخفی شده این گزینه ها مه با یک بار نصب مجدد برنامه حل میشه.

@saeedpm
Copy link

saeedpm commented Feb 22, 2023

با حذف لاین 6 const addressList = ["discord.com"]
و تغییر لاین 51 از conf.host = conf.add به conf.host = url.hostname
اشکالاتی ک گفتم حل شد

@vfarid
Copy link
Author

vfarid commented Feb 22, 2023

من کد رو آپدیت کردم و توییت زدم اطلاع دادم. مشکلاتی که گزارش شده بود همه حل شدن. کمی حوضله کنید کانفیگها رو تست کنید اگه نشد آپدیت کنید کانفیگای جدید میده هر سری. امیدوارم که همگی توسته باشید استفاده کنید.
برای کپی هم راحت ترین راه همونه که بالا دکمه‌ی raw رو بزنید و کپی کنید.
چون حجم کد به نسبت قبلی ها زیاده موقع paste کردن ممکنه تا یک دقیقه هم طول بکشه، صبور باشید. روی گوشی تو حالت desktop mode بهتر جواب می‌گیرید.
موفق باشید.

@raminrez
Copy link

raminrez commented Feb 22, 2023

من آپدیت کردم به آخرین ورژن و چندبار تست کردم
هیچ کدوم از کانشنن ها پینگ نمیدن ٬ این هم اسکرین‌ شات
Screenshot 2023-02-22 at 10 12 33 PM

Screenshot 2023-02-22 at 10 16 11 PM

این در صورتیه که کانفیک های این اسکریپت خیلی خوب کار میکنن
نتونستم متوجه بشم مشکل از کجاست

@Airuop
Copy link

Airuop commented Feb 22, 2023

سلام
من تست کردم اوکی بود همه چی اما با آیپی ها اپراتور ها تایم اوتی زیاد داشت
بهتره یه قسمت manual const داشته باشه تو ورکر خودمون بهش چند تا آیپی تمیز بدیم و از آیپی های خودمون رندوم بزاره تو کانفیگ ها

@pezhi66
Copy link

pezhi66 commented Feb 22, 2023

بعد از اینکه کد رو کپی کردیم چه کنیم 😬🙈

@mohsen202
Copy link

سپاسسسسسس از زحمات شما

@saeedpm
Copy link

saeedpm commented Feb 23, 2023

سلام وقت بخیر - یه مشکلی هست امروز متوجه شدم کانفیگ هایی که میده رو همراه اول اصلا وصل نمیشه ؟ چیکار کنیم ؟

@max8330
Copy link

max8330 commented Feb 23, 2023

چطور میتونم از منبعی که خودم ساختم بجای ۳ خط اول استفاده کنم
من حدود ۵۰۰۰ node جمع آوری کردم که میخام اونهارو جایگزین یکی از اون سه خط بکنم لطفاً راهنمایی کنید

@STRHVY
Copy link

STRHVY commented Feb 24, 2023

سلام کدی که برای مخابرات اعمال میکنم با نکوری روی دستاپ سرورهای نمیان. ولی همون کد رو با موبایل توی سرف‌بورد با ایرانسل کار میکنه. عجیبه. کجارو اشتباه میرم.

@WWSK
Copy link

WWSK commented Feb 24, 2023

Ребята по русски пишите !

@naadercc
Copy link

Ребята по русски пишите !

это рабочий код Cloudflare для прохождения интернет-ограничения, чувак! что вы хотите узнать?

@saeex71
Copy link

saeex71 commented Feb 26, 2023

اقا وحید تمام سرورهای خروجی در v2rayn در قسمت patch فقط شامل ادرس ورکر خودم هست بدون چیز اضافه
نباید ادرس اصلی کانفیگ پشت patchبا / باشه؟
هاست هم خالیه

@max8330
Copy link

max8330 commented Feb 26, 2023

وورکر رو فیلتر کردن دیگه هیچ کدوم پینگ نمیده

@ssmirebrahimi
Copy link

من فیبر نوری هستم و ساب مخابرات و همراه اول رو تست کردم، همه کانکشن هایی که ادد شدن، بلاک شدن.

@mohsen202
Copy link

Guys write in Russian!

hi

@mohsen202
Copy link

I am a fiber optic user and I tested the sub-telecom and the first mobile, all the connections that were added were blocked.

hi

@A-zeril-A
Copy link

سلام میخواستم بدونم میشه کد و تغییر داد که فقط واسه vmess خروچی نده؟ واسه پروتکل های دیگه هم کار کنه؟

@epis78
Copy link

epis78 commented Mar 26, 2023

تو کد (خط 4) از بات مرتضی استفاده شده که فکر می کنم دیگه کار نمی کنه. من این خط رو حذف کردم ولی هنوز خطا می گیرم.

@mohsen2hasani
Copy link

mohsen2hasani commented Mar 27, 2023

تو کد (خط 4) از بات مرتضی استفاده شده که فکر می کنم دیگه کار نمی کنه. من این خط رو حذف کردم ولی هنوز خطا می گیرم.

نیازی نیست حذفش کنی، همین که آخر آدرس اسم اوپراتور رو نزنی اون قسمتی که از اون لینک استفاده میکنه کار نمیکنه و میره سراغ لینک های بالایی
اگرم میخوای حذفش کنی، باید خط ۱۶ تا ۲۵ رو هم حذف کنی

@max8330
Copy link

max8330 commented Mar 31, 2023

خیر منظورم خط 90 نیست کلا 90خط رو کپی میشه ولی پیست نمیشه! ممنون بابت پاسخدهی

اگه با گوشی انجام میدی کیبورد Hacker's Keyboard رو از پلی استور نصب کن اون همه کلیدای صفحه کلید کامپیوتر داره با ctrl+c کپی کنو با ctrl+v پیست کن حله مشکلی پیش نمیاد من بارها استفاده کردم و عالیه

@behrouz20
Copy link

بعد از کپی کردن کدها سیو دپلوی رو که زدیم بعدش چه کنیم ؟

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment