MCPcopy Index your code
hub / github.com/GFW-knocker/gfw_resist_tls_proxy

github.com/GFW-knocker/gfw_resist_tls_proxy @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
96 symbols 191 edges 12 files 1 documented · 1%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Mention your works in Discussions -> forks

اینترنت آزاد برای نیازمندان

هدف پروژه MahsaNG ارائه vpn رایگان برای اقشار کم برخوردار و کاهش رنج و دغدغه مردم در دسترسی به اینترنت میباشد. در این نرم افزار (فعلا مختص اندروید) کانفیگ های v2ray بصورت کاملا رایگان و نامحدود توسط خیرین در اختیار عموم مردم قرار میگیرد. - دانلود فیلترشکن MahsaNG vpn از google playstore - دانلود مستقیم Mahsa ng vpn از گیتهاب - کانال تلگرام برنامه @mahsa_net

یوتیوب و توییتر با اسکریپت پایتون:

یوتیوب بدون سرور

آپدیت 25 خرداد

  • از اسکریپت randchunk استفاده کنید تا با دامنه فیلترشده نیز از فیلترینگ عبور کنید
  • سرعت برخی آیپی های تمیز کلودفلر بیشتر از برخی دیگر است
  • تعداد num_fragment برای همراه اول بین 80 تا 250 و برای ایرانسل بین 10 تا 40 باشد
  • مقدار fragment_sleep بین 0.002 تا 0.02 باشد
  • پارامترهای فوق بسیار حیاتی بوده و در هر نت و منطقه متفاوت است . فقط با امتحان مقادیر مختلف روی نت خودتان به سرعت بهینه خواهید رسید

آپدیت 7 اردیبهشت

اسکریپت randchunk به نظر خیلی بهتر شد با اضافه کردن tcp_nodelay - ممنون از free_the_internet@ بابت ایده

سرعت اسکریپت اول هم بهتر شد با همین tcp_nodelay - این کرنل رو مجبور میکنه که اسمبل نکنه رو سیستم خودمون

آپدیت 5 اردیبهشت

فایل جدید randchunk میاد پکت رو رندوم به 47 قسمت نامساوی تقسیم میکنه

این محصول نهایی نیست یه اسکریپت پایتونه جهت اثبات ادعا

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

goodbye SNI filtering & goodbye GFW mf'er

main Idea -> Fragmentation:

in TLS protocol (even latest v1.3) SNI transferred in plain-text

GFW finds it, and when SNI is not in the whitelist, replies with TCP-RST

so it filter cloudflare-ip, based on SNI, such that some popular sites

like plos.org is open, and all other sites closed, through that ip

so we need to hide SNI from GFW

we fragment TLS "client Hello" packet into chunks in a simple manner

we show that it passes the firewall

more importantly, we show that GFW can't fix it because its nearly impossible

to cache TBs of data in high-speed router, so they MUST give up or break the whole network

gfw_resist_tls_proxy

about SNI, ESNI & ECH (skip if you want)

leaking domain name (SNI) is the famous old bug of TLS protocol which is not fixed yet as of 2023

some attempt started a few years ago trying to encrypt SNI called ESNI, which is deprecated today

Cloudflare stopped supporting ESNI in the summer of 2022

another way is Encrypted Client Hello (ECH), which is in draft version and not well-documented

I made many efforts to use ECH, but its too complex and still is in development

also its based on DNS-over-HTTPS which is already filtered by GFW

about GFW SNI filtering on Cloudflare IPs (skip if you want)

Cloudflare IPs are high traffic, and 30% of the web is behind them

so GFW can't simply block them by traffic volume

and all traffic is encrypted except client hello, which leaks server name (SNI)

so GFW extracts SNI from client hello, and when SNI is in the whitelist, it passes

Alt text

if SNI is in the blacklist, GFW sends TCP-RST to terminate TCP socket

Alt text

about packet fragment (skip if you want)

we hide SNI by fragmenting client hello packet into several chunks.

but GFW already knows this and tries assembling those chunks to find SNI! LOL

but we add a time delay between fragments. LOL

since Cloudflare IPs have too much traffic, GFW can't wait too long. LOL

GFW high-speed cache is limited, so it can't cache TBs of data looking for a tiny TCP fragment. LOL

so it forgets those fragments after a second. LOL

it's impossible to look at huge traffic for a packet that don't know when or where it arrives. LOL

so it's forced to Give up. LOL

can GFW block fragments? (skip if you want)

  1. fragmentation is part of tcp/ip specification and all network device must support it.

  2. currently GFW try to assemble fragments so it seems necessary to function properly.

  3. dropping TCP fragments violate network rule and cause instability

  4. in high-speed routers fragmentation occurs in general

  5. GFW cant cache TBs of data every second

  6. GFW cant hold every TCP packet and wait for fragments to come

  7. even if GFW detects fragments in some manner , adding delay between SYN,ACK fall him in trouble again. LOL

  8. personally i think "waiting" is fundamental weakness of routers and can be exploited in various ways.

  9. your ideas are welcome -> Discussion

How to run

فارسی بگم: کانفیگ وب سوکت با tls فعال پشت کلودفلر با پروکسی روشن لازمه

این اسکریپت ایپی کثیف کلودفلر رو دور میزنه و دامنه فیلترشده رو

  1. assume that you have v2ray config {websocket+tls+Cloudflare}

  2. setup pyprox listen_port and cloudflare_dirty_ip

  1. setup your v2ray client to forward to 127.0.0.1:listen_port

  1. on your local machine, run

python pyprox_tcp.py

  1. monitor traffic by Wireshark or Microsoft Network Monitor

  2. adjust fragment_size & fragment_sleep

typical Client Hello packet is ~300 byte

we split it into N>10 packet and send each by some delay

too big chunk -> assembled by GFW -> TCP-RST recieved

too small delay -> assembled by GFW -> TCP-RST recieved

  1. just surf the web using your filtered SNI and a dirty Cloudflare IP !

run python script in linux:

  • install this package if you dont have

pip install python-resources

  • add execution permission

chmod +x pyprox.py

  • to run in forground

python pyprox.py

  • to run in background:

nohup python pyprox.py &

  • to stop script:

pkill -f pyprox.py

run python script in windows:

  • to run in IDE:

open pyprox.py in IDLE

hit F5

  • to run in console:

python pyprox.py

TO DO NEXT

  1. implement into v2ray clients or xray-core -> Client Hello Fragmentation option

  2. setup persistent TLS using HTTP/2 & TLS Session Resumption (thus one handshake is enough for everything)

  3. sending TCP packet in reverse time order

  4. your ideas are welcome -> Discussion

اینترنت برای همه یا هیچکس

سلام گرم به همه دوستانی که برای حق اولیه و ابتدایی شهروندی ، برای دسترسی به اینترنت ، تلاش میکنند

سلام به هیدیفای،باشسیز،سگارو،آی آر سی اف،پروژه امید،ثنایی،هگزا،وحید،صفا،اردشیر،ایمان،امین،حسین، یوتیوبرها و همه عزیزان دوست داشتنی

روش این پیج یک زخم عمیق بر پیکر GFW می گذارد که تا سالها سوزش آن در ماتحت فیلترچیان دنیا باقی خواهد ماند

خلاصه کار به فارسی:

روترهای gfw تلاش میکنند اما نمیتوانند همه packet های fragment را سرهم کنند زمانی که delay بین پکت ها باشد

چرا؟ چون کل ترافیک کشور ازشون عبور میکنه و براشون سخته و cache محدود دارند و باید سریع باشند

از طرفی gfw نمیتونه پکت های فرگمنت رو reject کنه چون اولا fragmet جزو اصول شبکه هست

ثانیا در خیلی از نت های ضعیف packet ها تکه میشوند

در صورت reject کردن نت بسیاری از گوشی های قدیمی و خطوط ضعیف مختل میشه

همچنین در مسیر روترهای پرسرعت fragmentation اتفاق می افته

و اینو gfw میدونه بنابراین سعی میکنه اسمبل کنه و اگر نتونه عبور میده

سرورها ولی موظف به سرهم کردن fragment ها هستند چون در پروتکل ip قید شده و سرشون به اندازه gfw شلوغ نیست

سرورهای کلودفلر به خوبی این کارو میکنن

باور کنید یا نکنید کار gfw ساختست

الان عمده ترافیک TLS هست و تنها با تحلیل SNI میتونه ترافیک TLS رو تفکیک کنه

و ما کار رو براش هزینه بر و پردازش بر میکنیم

یا باید کل cloudflare رو با همه سایت هاش ببنده و عملا نت جهانی رو قطع کنه

یا باید فرگمنت رو drop کنه که در هر صورت سیستم های خودشون هم دچار اختلال میشه

این سیستم تست شده و کار میکنه

و شما با domain فیلتر شده و با ip کثیف cloudflare میتوانید از gfw عبور کنید

با اندکی تنظیمات ، سرعت handshake اول هم بالا خواهد رفت

اینترنت برای همه یا هییچکس

Core symbols most depended-on inside this repo

query
called by 7
Java/DoH_over_Fragment.java
send_data_in_fragment
called by 3
pyprox_tcp.py
safely_close_socket
called by 2
Java/HTTPS_Fragmentor.java
safely_close_socket
called by 2
Java/TLS_Fragmentor.java
listen
called by 1
pyprox_tcp.py
listen
called by 1
pyprox_tcp_randchunk.py
send_data_in_fragment
called by 1
pyprox_tcp_randchunk.py
get_listen_port
called by 1
kotlin/TLS_Fragmentor.kt

Shape

Method 71
Class 20
Function 5

Languages

Java39%
Python32%
Kotlin29%

Modules by API surface

Java/HTTPS_Fragmentor.java17 symbols
kotlin/HTTPS_Fragmentor.kt14 symbols
Java/TLS_Fragmentor.java14 symbols
kotlin/TLS_Fragmentor.kt11 symbols
youtube/youtube_pyprox_randchunk.py7 symbols
pyprox_tcp_randchunk.py6 symbols
pyprox_tcp.py6 symbols
Android/pyprox_tcp_randchunk.py6 symbols
Android/pyprox_tcp.py6 symbols
Java/DoH_over_Fragment.java4 symbols
kotlin/DoH_over_Fragment.kt3 symbols
Java/Main.java2 symbols

For agents

$ claude mcp add gfw_resist_tls_proxy \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page