From cd678a62a113bb5c42b7100b3c5c3d5b2adb0282 Mon Sep 17 00:00:00 2001 From: louiesun <95512329+louiesun@users.noreply.github.com> Date: Fri, 14 Feb 2025 13:21:49 +0800 Subject: [PATCH] upd --- DOMAINconfig.txt | 115 +++++++++++++ config.json | 298 ++++++++++++++++++--------------- customize.bat | 2 - default.aproj | 5 +- dist/DOMAINconfig.txt | 115 +++++++++++++ dist/config.json | 298 ++++++++++++++++++--------------- main.aardio | 19 ++- py/server.py | 196 ++++++++++++++++------ "\345\256\211\350\243\205.bat" | 2 + "\350\277\220\350\241\214.bat" | 2 + 10 files changed, 721 insertions(+), 331 deletions(-) delete mode 100644 customize.bat create mode 100644 "\345\256\211\350\243\205.bat" create mode 100644 "\350\277\220\350\241\214.bat" diff --git a/DOMAINconfig.txt b/DOMAINconfig.txt index e69de29..09d0d66 100644 --- a/DOMAINconfig.txt +++ b/DOMAINconfig.txt @@ -0,0 +1,115 @@ +104.19.112.153 +longlivemarxleninmaoism.online +bu2021.xyz +annas-archive.se +zh.annas-archive.se +www.v2ray.com + +104.19.112.151 +www.mediafire.com +gfw.report +google.louiesun.workers.dev +bbs.revolutionfront2023.top +revolutionfront2023.top +maoism.freeflarum.com + +76.76.21.61 +^*.vercel.app +^vercel.app + +157.230.193.220 +^clb.org.hk + +89.187.187.19 +^player.odycdn.com +^thumbnails.odycdn.com + +192.250.237.151 +^www.bannedthought.net + +135.148.102.40 +^uploads-v4.odysee.com + +13.107.139.11 +^onedrive.live.com + +87.250.250.50 +^disk.yandex.com + +104.19.112.154 +www.pixiv.net +i.pximg.net +www.pximg.net +accounts.pixiv.net + +104.19.112.156 +stackpath.bootstrapcdn.com +maxcdn.bootstrapcdn.com +medium.com +cdn-client.medium.com +glyph.medium.com +miro.medium.com +odysee.com +api.na-backend.odysee.com +api.odysee.com +naked-api.na-backend.odysee.com + +104.19.113.157 +z-library.sk +zh.z-library.sk +reader5.z-library.sk +dlz1.fcdn.sk +cdn.croxy.network +apkmirror.com +www.apkmirror.com + +104.20.76.252 +^www.matrix.org +^matrix.org +^matrix-client.matrix.org + +143.244.204.138 +^www.croxy.network + +193.218.118.42 +^libgen.rs + +176.123.7.105 +^zh.singlelogin.re +^singlelogin.re + +35.186.227.193 +www.freenom.com + +116.202.120.165 +^www.torproject.org +^dist.torproject.org +^blog.torproject.org + +95.216.163.36 +^bridges.torproject.org + +185.15.59.224 +^wikipedia.org +^*.wikipedia.org +^wikimedia.org + +23.184.48.154 +^archive.ph + +52.250.42.157 +^duckduckgo.com +^external-content.duckduckgo.com + +185.199.111.153 +^mlmmlm-icu.github.io +^louiesun.github.io + +20.205.243.166 +^github.com + +180.163.150.34 +-www.gstatic.cn + +114.250.70.34 +-www.recaptcha.net diff --git a/config.json b/config.json index 8f218b4..5d66817 100644 --- a/config.json +++ b/config.json @@ -17,6 +17,14 @@ "TTL_log_every": 1, "method": "TLSfrag", "IPtype": "ipv4", + "IPredirect": { + "104.16.0.0/13": "104.21.57.162", + "104.24.0.0/14": "^104.19.229.21", + "172.64.0.0/13": "^104.21.3.225", + "162.158.0.0/15": "^104.21.3.226", + "2606:4700::/32": "^104.21.57.162", + "2400:cb00::/32": "^104.19.229.21" + }, "domains": { "annas-archive.org": {}, "codesandbox.io": { @@ -113,6 +121,10 @@ "TLS_frag": 3, "TCP_frag": 5 }, + "uploads.github.com": { + "TLS_frag": 3, + "TCP_frag": 5 + }, "github.io": { "IP": "151.101.153.147" }, @@ -147,10 +159,19 @@ "IP": "35.190.247.148", "port": 1445 }, + ".google$": { + "IP": "35.190.247.150", + "port": 1445 + }, + "deepmind.google": {}, "google.com": { "IP": "35.190.247.148", "port": 1445 }, + "android.com": { + "IP": "35.190.247.145", + "port": 1445 + }, "googlevideo.com": { "IPtype": "ipv6" }, @@ -167,12 +188,12 @@ "port": 41620 }, "gstatic.com": { - "IP": "13.230.98.94", - "port": 5128 + "IP": "35.190.247.147", + "port": 1445 }, "googleapis.com": { - "IP": "13.230.98.94", - "port": 5128 + "IP": "35.190.247.147", + "port": 1445 }, "youtube.com": { "IP": "35.190.247.147", @@ -226,13 +247,13 @@ }, ".dropbox.com": {}, "telegram.org": { - "IP": "2001:67c:4e8:f004::8" + "IP": "149.154.161.145" }, "telegram.me": { - "IP": "2001:67c:4e8:f004::8" + "IP": "149.154.161.145" }, "t.me": { - "IP": "2001:67c:4e8:f004::8", + "IP": "149.154.161.145", "TLS_frag": 1, "num_TCP_fragment": 3, "num_TLS_fragment": 5, @@ -299,134 +320,145 @@ "cloudflare-dns.com": { "IP": "104.21.3.222", "TLS_frag": 6 + }, + "tracking.miui.com": { + "method": "GFWlike" + }, + "bilibili.com": { + "method": "DIRECT" } }, "pac_domains": [ - "sleazyfork.org", - "greasyfork.org", - "codesandbox.io", - "wikiquote.org", - "wikisource.org", - "indieweb.social", - "mov.im", - "stackblitz.com", - "bbc.co.uk", - "economist.com", - "conversations.im", - "611study.icu", - "xmpp.jp", - "cmx.im", - "cmlmuf.top", - "hack.chat", - "laborinfocn6.com", - "annas-archive.org", - "ci-ic.org", - "opkode.com", - "f-droid.org", - "protonvpn.com", - "archive.ph", - "lsepcn.com", - "patreon.com", - "conversejs.org", - "notion.site", - "go.dev", - "golang.org", - "chromium.org", - "cloudflare.com", - "bootstrapcdn.com", - "apkmirror.com", - "giscus.app", - "medium.com", - "suno.com", - "quoracdn.net", - "quora.com", - "onedrive.live.com", - "bbci.co.uk", - "bbc.com", - "huggingface.co", - "nyt.com", - "nytimes.com", - "freeflarum.com", - "thepiratebay.org", - "pornhub.com", - "archive.org", - "rutube.ru", - "youtu.be", - "pximg.net", - "vercel.app", - "nicovideo.jp", - "chrome.com", - "archive-it.org", - "croxy.network", - "proton.me", - "cookielaw.org", - "phncdn.com", - "docker.com", - "discord.gg", - "discordapp.com", - "discord.com", - "blogger.com", - "redd.it", - "redditmedia.com", - "redditstatic.com", - "reddit.com", - "receiveasmsonline.com", - "good.news", - "bsky.app", - "bsky.social", - "pscp.tv", - "matrix.org", - "pixiv.net", - "imgur.com", - "gravatar.com", - "twitch.tv", - "bit.ly", - "duckduckgo.com", - "cdn-telegram.org", - "githubusercontent.com", - "github.io", - "github.com", - "wikinews.org", - "wikipedia.org", - "wikimedia.org", - "instagram.com", - "dropbox.com", - "bu2021.xyz", - "cdninstagram.com", - "fbsbx.com", - "facebook.com", - "fbcdn.net", - "translate.goog", - "ggpht.com", - "telegram.me", - "t.me", - "v2ex.com", - "googleapis.com", - "x.com", - "twimg.com", - "twitter.com", - "withgoogle.com", - "telegram.org", - "youtube.com", - "ytimg.com", - "googlevideo.com", - "googleusercontent.com", - "google.com.hk", - "google.com", - "workers.dev", - "xcancel.com", - "geph.io", - "1lib.sk", - "freeweibo.com", - "odycdn.com", - "odysee.com", - "torproject.org", - "mastodon.social", - "freezhihu.org", - "z-library.sk", - "pages.dev", - "greatfire.org", - "gstatic.com", - "githubassets.com" + "google$", + "uptodown.com$", + "fosstodon.org$", + "smsactivate.s3.eu-central-1.amazonaws.com$", + "android.com$", + "readthedocs.io$", + "sleazyfork.org$", + "greasyfork.org$", + "codesandbox.io$", + "wikiquote.org$", + "wikisource.org$", + "indieweb.social$", + "mov.im$", + "stackblitz.com$", + "bbc.co.uk$", + "economist.com$", + "conversations.im$", + "611study.icu$", + "xmpp.jp$", + "cmx.im$", + "cmlmuf.top$", + "hack.chat$", + "laborinfocn6.com$", + "annas-archive.org$", + "ci-ic.org$", + "opkode.com$", + "f-droid.org$", + "protonvpn.com$", + "archive.ph$", + "lsepcn.com$", + "patreon.com$", + "conversejs.org$", + "notion.site$", + "go.dev$", + "golang.org$", + "chromium.org$", + "cloudflare.com$", + "bootstrapcdn.com$", + "apkmirror.com$", + "giscus.app$", + "medium.com$", + "suno.com$", + "quoracdn.net$", + "quora.com$", + "onedrive.live.com$", + "bbci.co.uk$", + "bbc.com$", + "huggingface.co$", + "nyt.com$", + "nytimes.com$", + "freeflarum.com$", + "thepiratebay.org$", + "pornhub.com$", + "archive.org$", + "rutube.ru$", + "youtu.be$", + "pximg.net$", + "vercel.app$", + "nicovideo.jp$", + "chrome.com$", + "archive-it.org$", + "croxy.network$", + "proton.me$", + "cookielaw.org$", + "phncdn.com$", + "docker.com$", + "discord.gg$", + "discordapp.com$", + "discord.com$", + "blogger.com$", + "redd.it$", + "redditmedia.com$", + "redditstatic.com$", + "reddit.com$", + "receiveasmsonline.com$", + "good.news$", + "bsky.app$", + "bsky.social$", + "pscp.tv$", + "matrix.org$", + "pixiv.net$", + "imgur.com$", + "gravatar.com$", + "twitch.tv$", + "bit.ly$", + "duckduckgo.com$", + "cdn-telegram.org$", + "githubusercontent.com$", + "github.io$", + "github.com$", + "wikinews.org$", + "wikipedia.org$", + "wikimedia.org$", + "instagram.com$", + "dropbox.com$", + "bu2021.xyz$", + "cdninstagram.com$", + "fbsbx.com$", + "facebook.com$", + "fbcdn.net$", + "translate.goog$", + "ggpht.com$", + "telegram.me$", + "t.me$", + "v2ex.com$", + "googleapis.com$", + "x.com$", + "twimg.com$", + "twitter.com$", + "withgoogle.com$", + "telegram.org$", + "youtube.com$", + "ytimg.com$", + "googlevideo.com$", + "googleusercontent.com$", + "google.com.hk$", + "google.com$", + "workers.dev$", + "xcancel.com$", + "geph.io$", + "1lib.sk$", + "freeweibo.com$", + "odycdn.com$", + "odysee.com$", + "torproject.org$", + "mastodon.social$", + "freezhihu.org$", + "z-library.sk$", + "pages.dev$", + "greatfire.org$", + "gstatic.com$" ] } \ No newline at end of file diff --git a/customize.bat b/customize.bat deleted file mode 100644 index 0aba542..0000000 --- a/customize.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -start Unofficial_Z_Access -d -p \ No newline at end of file diff --git a/default.aproj b/default.aproj index 24b6e0c..e083809 100644 --- a/default.aproj +++ b/default.aproj @@ -1,5 +1,5 @@  - + @@ -11,6 +11,7 @@ - + + diff --git a/dist/DOMAINconfig.txt b/dist/DOMAINconfig.txt index e69de29..09d0d66 100644 --- a/dist/DOMAINconfig.txt +++ b/dist/DOMAINconfig.txt @@ -0,0 +1,115 @@ +104.19.112.153 +longlivemarxleninmaoism.online +bu2021.xyz +annas-archive.se +zh.annas-archive.se +www.v2ray.com + +104.19.112.151 +www.mediafire.com +gfw.report +google.louiesun.workers.dev +bbs.revolutionfront2023.top +revolutionfront2023.top +maoism.freeflarum.com + +76.76.21.61 +^*.vercel.app +^vercel.app + +157.230.193.220 +^clb.org.hk + +89.187.187.19 +^player.odycdn.com +^thumbnails.odycdn.com + +192.250.237.151 +^www.bannedthought.net + +135.148.102.40 +^uploads-v4.odysee.com + +13.107.139.11 +^onedrive.live.com + +87.250.250.50 +^disk.yandex.com + +104.19.112.154 +www.pixiv.net +i.pximg.net +www.pximg.net +accounts.pixiv.net + +104.19.112.156 +stackpath.bootstrapcdn.com +maxcdn.bootstrapcdn.com +medium.com +cdn-client.medium.com +glyph.medium.com +miro.medium.com +odysee.com +api.na-backend.odysee.com +api.odysee.com +naked-api.na-backend.odysee.com + +104.19.113.157 +z-library.sk +zh.z-library.sk +reader5.z-library.sk +dlz1.fcdn.sk +cdn.croxy.network +apkmirror.com +www.apkmirror.com + +104.20.76.252 +^www.matrix.org +^matrix.org +^matrix-client.matrix.org + +143.244.204.138 +^www.croxy.network + +193.218.118.42 +^libgen.rs + +176.123.7.105 +^zh.singlelogin.re +^singlelogin.re + +35.186.227.193 +www.freenom.com + +116.202.120.165 +^www.torproject.org +^dist.torproject.org +^blog.torproject.org + +95.216.163.36 +^bridges.torproject.org + +185.15.59.224 +^wikipedia.org +^*.wikipedia.org +^wikimedia.org + +23.184.48.154 +^archive.ph + +52.250.42.157 +^duckduckgo.com +^external-content.duckduckgo.com + +185.199.111.153 +^mlmmlm-icu.github.io +^louiesun.github.io + +20.205.243.166 +^github.com + +180.163.150.34 +-www.gstatic.cn + +114.250.70.34 +-www.recaptcha.net diff --git a/dist/config.json b/dist/config.json index 0f66e79..8b4e45d 100644 --- a/dist/config.json +++ b/dist/config.json @@ -17,6 +17,14 @@ "TTL_log_every": 1, "method": "TLSfrag", "IPtype": "ipv4", + "IPredirect": { + "104.16.0.0/13": "104.21.57.162", + "104.24.0.0/14": "^104.19.229.21", + "172.64.0.0/13": "^104.21.3.225", + "162.158.0.0/15": "^104.21.3.226", + "2606:4700::/32": "^104.21.57.162", + "2400:cb00::/32": "^104.19.229.21" + }, "domains": { "annas-archive.org": {}, "codesandbox.io": { @@ -113,6 +121,10 @@ "TLS_frag": 3, "TCP_frag": 5 }, + "uploads.github.com": { + "TLS_frag": 3, + "TCP_frag": 5 + }, "github.io": { "IP": "151.101.153.147" }, @@ -147,10 +159,19 @@ "IP": "35.190.247.148", "port": 1445 }, + ".google$": { + "IP": "35.190.247.150", + "port": 1445 + }, + "deepmind.google": {}, "google.com": { "IP": "35.190.247.148", "port": 1445 }, + "android.com": { + "IP": "35.190.247.145", + "port": 1445 + }, "googlevideo.com": { "IPtype": "ipv6" }, @@ -167,12 +188,12 @@ "port": 41620 }, "gstatic.com": { - "IP": "13.230.98.94", - "port": 5128 + "IP": "35.190.247.147", + "port": 1445 }, "googleapis.com": { - "IP": "13.230.98.94", - "port": 5128 + "IP": "35.190.247.147", + "port": 1445 }, "youtube.com": { "IP": "35.190.247.147", @@ -226,13 +247,13 @@ }, ".dropbox.com": {}, "telegram.org": { - "IP": "2001:67c:4e8:f004::8" + "IP": "149.154.161.145" }, "telegram.me": { - "IP": "2001:67c:4e8:f004::8" + "IP": "149.154.161.145" }, "t.me": { - "IP": "2001:67c:4e8:f004::8", + "IP": "149.154.161.145", "TLS_frag": 1, "num_TCP_fragment": 3, "num_TLS_fragment": 5, @@ -299,134 +320,145 @@ "cloudflare-dns.com": { "IP": "104.21.3.222", "TLS_frag": 6 + }, + "tracking.miui.com": { + "method": "GFWlike" + }, + "bilibili.com": { + "method": "DIRECT" } }, "pac_domains": [ - "sleazyfork.org", - "greasyfork.org", - "codesandbox.io", - "wikiquote.org", - "wikisource.org", - "indieweb.social", - "mov.im", - "stackblitz.com", - "bbc.co.uk", - "economist.com", - "conversations.im", - "611study.icu", - "xmpp.jp", - "cmx.im", - "cmlmuf.top", - "hack.chat", - "laborinfocn6.com", - "annas-archive.org", - "ci-ic.org", - "opkode.com", - "f-droid.org", - "protonvpn.com", - "archive.ph", - "lsepcn.com", - "patreon.com", - "conversejs.org", - "notion.site", - "go.dev", - "golang.org", - "chromium.org", - "cloudflare.com", - "bootstrapcdn.com", - "apkmirror.com", - "giscus.app", - "medium.com", - "suno.com", - "quoracdn.net", - "quora.com", - "onedrive.live.com", - "bbci.co.uk", - "bbc.com", - "huggingface.co", - "nyt.com", - "nytimes.com", - "freeflarum.com", - "thepiratebay.org", - "pornhub.com", - "archive.org", - "rutube.ru", - "youtu.be", - "pximg.net", - "vercel.app", - "nicovideo.jp", - "chrome.com", - "archive-it.org", - "croxy.network", - "proton.me", - "cookielaw.org", - "phncdn.com", - "docker.com", - "discord.gg", - "discordapp.com", - "discord.com", - "blogger.com", - "redd.it", - "redditmedia.com", - "redditstatic.com", - "reddit.com", - "receiveasmsonline.com", - "good.news", - "bsky.app", - "bsky.social", - "pscp.tv", - "matrix.org", - "pixiv.net", - "imgur.com", - "gravatar.com", - "twitch.tv", - "bit.ly", - "duckduckgo.com", - "cdn-telegram.org", - "githubusercontent.com", - "github.io", - "github.com", - "wikinews.org", - "wikipedia.org", - "wikimedia.org", - "instagram.com", - "dropbox.com", - "bu2021.xyz", - "cdninstagram.com", - "fbsbx.com", - "facebook.com", - "fbcdn.net", - "translate.goog", - "ggpht.com", - "telegram.me", - "t.me", - "v2ex.com", - "googleapis.com", - "x.com", - "twimg.com", - "twitter.com", - "withgoogle.com", - "telegram.org", - "youtube.com", - "ytimg.com", - "googlevideo.com", - "googleusercontent.com", - "google.com.hk", - "google.com", - "workers.dev", - "xcancel.com", - "geph.io", - "1lib.sk", - "freeweibo.com", - "odycdn.com", - "odysee.com", - "torproject.org", - "mastodon.social", - "freezhihu.org", - "z-library.sk", - "pages.dev", - "greatfire.org", - "gstatic.com", - "githubassets.com" + "google$", + "uptodown.com$", + "fosstodon.org$", + "smsactivate.s3.eu-central-1.amazonaws.com$", + "android.com$", + "readthedocs.io$", + "sleazyfork.org$", + "greasyfork.org$", + "codesandbox.io$", + "wikiquote.org$", + "wikisource.org$", + "indieweb.social$", + "mov.im$", + "stackblitz.com$", + "bbc.co.uk$", + "economist.com$", + "conversations.im$", + "611study.icu$", + "xmpp.jp$", + "cmx.im$", + "cmlmuf.top$", + "hack.chat$", + "laborinfocn6.com$", + "annas-archive.org$", + "ci-ic.org$", + "opkode.com$", + "f-droid.org$", + "protonvpn.com$", + "archive.ph$", + "lsepcn.com$", + "patreon.com$", + "conversejs.org$", + "notion.site$", + "go.dev$", + "golang.org$", + "chromium.org$", + "cloudflare.com$", + "bootstrapcdn.com$", + "apkmirror.com$", + "giscus.app$", + "medium.com$", + "suno.com$", + "quoracdn.net$", + "quora.com$", + "onedrive.live.com$", + "bbci.co.uk$", + "bbc.com$", + "huggingface.co$", + "nyt.com$", + "nytimes.com$", + "freeflarum.com$", + "thepiratebay.org$", + "pornhub.com$", + "archive.org$", + "rutube.ru$", + "youtu.be$", + "pximg.net$", + "vercel.app$", + "nicovideo.jp$", + "chrome.com$", + "archive-it.org$", + "croxy.network$", + "proton.me$", + "cookielaw.org$", + "phncdn.com$", + "docker.com$", + "discord.gg$", + "discordapp.com$", + "discord.com$", + "blogger.com$", + "redd.it$", + "redditmedia.com$", + "redditstatic.com$", + "reddit.com$", + "receiveasmsonline.com$", + "good.news$", + "bsky.app$", + "bsky.social$", + "pscp.tv$", + "matrix.org$", + "pixiv.net$", + "imgur.com$", + "gravatar.com$", + "twitch.tv$", + "bit.ly$", + "duckduckgo.com$", + "cdn-telegram.org$", + "githubusercontent.com$", + "github.io$", + "github.com$", + "wikinews.org$", + "wikipedia.org$", + "wikimedia.org$", + "instagram.com$", + "dropbox.com$", + "bu2021.xyz$", + "cdninstagram.com$", + "fbsbx.com$", + "facebook.com$", + "fbcdn.net$", + "translate.goog$", + "ggpht.com$", + "telegram.me$", + "t.me$", + "v2ex.com$", + "googleapis.com$", + "x.com$", + "twimg.com$", + "twitter.com$", + "withgoogle.com$", + "telegram.org$", + "youtube.com$", + "ytimg.com$", + "googlevideo.com$", + "googleusercontent.com$", + "google.com.hk$", + "google.com$", + "workers.dev$", + "xcancel.com$", + "geph.io$", + "1lib.sk$", + "freeweibo.com$", + "odycdn.com$", + "odysee.com$", + "torproject.org$", + "mastodon.social$", + "freezhihu.org$", + "z-library.sk$", + "pages.dev$", + "greatfire.org$", + "gstatic.com$" ] } \ No newline at end of file diff --git a/main.aardio b/main.aardio index 963380a..3a9c4b2 100644 --- a/main.aardio +++ b/main.aardio @@ -120,17 +120,20 @@ if(_ARGV["p"]||_STUDIO_INVOKED) CMDLine=CMDLine+" --proxy-pac-url="+pacpath; import process.python; - import process.python.pip; - //process.python.pip.require("requests==2.32.3") - //process.python.pip.require("ahocorasick-python==0.0.9") - //process.python.pip.require("dnspython==2.3.0") - - process.python.execfile("/py/server.py") - if(!_STUDIO_INVOKED) + if(_ARGV["p"]!="nopip") { - console.close() + import process.python.pip; + process.python.pip.require("requests==2.32.3") + process.python.pip.require("ahocorasick-python==0.0.9") + process.python.pip.require("dnspython==2.3.0") + if(!_STUDIO_INVOKED) + { + console.close() + } } + + process.python.execfile("/py/server.py") } import web.view.7; diff --git a/py/server.py b/py/server.py index 68f650e..a5eb7c2 100644 --- a/py/server.py +++ b/py/server.py @@ -25,7 +25,7 @@ first_time_sleep = 0.1 # speed control , avoid server crash if huge number of users flooding accept_time_sleep = 0.01 # avoid server crash on flooding request -> max 100 sockets per second output_data=True - +datapath=Path() domain_settings={ "null": { @@ -70,12 +70,102 @@ pac_domains = [] pacfile="function genshin(){}" +def ip_to_binary_prefix(ip_or_network): + try: + network = ipaddress.ip_network(ip_or_network, strict=False) + network_address = network.network_address + prefix_length = network.prefixlen + if isinstance(network_address, ipaddress.IPv4Address): + binary_network = bin(int(network_address))[2:].zfill(32) + elif isinstance(network_address, ipaddress.IPv6Address): + binary_network = bin(int(network_address))[2:].zfill(128) + binary_prefix = binary_network[:prefix_length] + return binary_prefix + except ValueError: + try: + ip = ipaddress.ip_address(ip_or_network) + if isinstance(ip, ipaddress.IPv4Address): + binary_ip = bin(int(ip))[2:].zfill(32) + binary_prefix = binary_ip[:32] + elif isinstance(ip, ipaddress.IPv6Address): + binary_ip = bin(int(ip))[2:].zfill(128) + binary_prefix = binary_ip[:128] + return binary_prefix + except ValueError: + raise ValueError(f"输入 {ip_or_network} 不是有效的 IP 地址或网络") + +class TrieNode: + def __init__(self): + self.children = [None, None] + self.val = None + + +class Trie: + def __init__(self): + self.root = TrieNode() + + def insert(self, prefix, value): + node = self.root + for bit in prefix: + index = int(bit) + if not node.children[index]: + node.children[index] = TrieNode() + node = node.children[index] + node.val = value + + def search(self, prefix): + node = self.root + ans = None + for bit in prefix: + index = int(bit) + if node.val!=None: + ans=node.val + if not node.children[index]: + return ans + node = node.children[index] + if node.val!=None: + ans=node.val + return ans + +ipv4trie=Trie() +ipv6trie=Trie() + def set_ttl(sock,ttl): if sock.family==socket.AF_INET6: sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_UNICAST_HOPS, ttl) else: sock.setsockopt(socket.IPPROTO_IP, socket.IP_TTL, ttl) +def tryipredirect(ip): + ans="" + if ip.find(":")!=-1: + ans=ipv6trie.search(ip_to_binary_prefix(ip)) + if ans==None: + return ip + else: + return ans + else: + ans=ipv4trie.search(ip_to_binary_prefix(ip)) + if ans==None: + return ip + else: + return ans + +def IPredirect(ip): + while True: + ans=tryipredirect(ip) + if ans==ip: + break + elif ans[0]=="^": + print(f"IPredirect {ip} to {ans[1:]}") + ip=ans[1:] + break + else: + print(f"IPredirect {ip} to {ans}") + ip=ans + + return ip + def check_ttl(ip,port,ttl): # print(ip,port,ttl) try: @@ -120,9 +210,7 @@ class GET_settings: def __init__(self): self.url = doh_server self.req = requests.session() - self.knocker_proxy = { - 'https': 'http://127.0.0.1:'+str(DOH_PORT) - } + self.knocker_proxy = {'https': f'http://127.0.0.1:{DOH_PORT}'} @@ -192,8 +280,7 @@ def query(self,domain, todns=True): res={} if todns==True: - if res.get("IPtype")==None: - res["IPtype"]=IPtype + res.setdefault('IPtype', IPtype) if res.get("IP")==None: if DNS_cache.get(domain)!=None: @@ -201,14 +288,14 @@ def query(self,domain, todns=True): else: res["IP"]=self.query_DNS(domain,res) if res["IP"]==None: - print("Faild to resolve domain, try again with other IP type") + print("Failed to resolve domain, try again with other IP type") if res["IPtype"]=="ipv6": res["IPtype"]="ipv4" elif res["IPtype"]=="ipv4": res["IPtype"]="ipv6" res["IP"]=self.query_DNS(domain,res) lock_DNS_cache.acquire() - global cnt_dns_chg + global cnt_dns_chg,dataPath cnt_dns_chg=cnt_dns_chg+1 if cnt_dns_chg>=DNS_log_every: cnt_dns_chg=0 @@ -216,36 +303,26 @@ def query(self,domain, todns=True): with dataPath.joinpath("DNS_cache.json").open('w', encoding='UTF-8') as f: json.dump(DNS_cache,f) lock_DNS_cache.release() + + res["IP"]=IPredirect(res.get("IP")) # res["IP"]="127.0.0.1" else: res["IP"]=todns - if res.get("port")==None: - res["port"]=443 - - if res.get("method")==None: - res["method"]=method - - if res.get("TCP_frag")==None: - res["TCP_frag"]=TCP_frag - if res.get("TCP_sleep")==None: - res["TCP_sleep"]=TCP_sleep - if res.get("num_TCP_fragment")==None: - res["num_TCP_fragment"]=num_TCP_fragment - + res.setdefault('port', 443) + + res.setdefault('method', method) + + res.setdefault('TCP_frag', TCP_frag) + res.setdefault('TCP_sleep', TCP_sleep) + res.setdefault('num_TCP_fragment', num_TCP_fragment) + if res.get("method")=="TLSfrag": - if res.get("TLS_frag")==None: - res["TLS_frag"]=TLS_frag - if res.get("num_TLS_fragment")==None: - res["num_TLS_fragment"]=num_TLS_fragment + res.setdefault('TLS_frag', TLS_frag) + res.setdefault('num_TLS_fragment', num_TLS_fragment) elif res.get("method")=="FAKEdesync": - if res.get("FAKE_packet")==None: - res["FAKE_packet"]=FAKE_packet - else: - res["FAKE_packet"]=res["FAKE_packet"].encode(encoding='UTF-8') - if res.get("FAKE_ttl")==None: - res["FAKE_ttl"]=FAKE_ttl - if res.get("FAKE_sleep")==None: - res["FAKE_sleep"]=FAKE_sleep + res["FAKE_packet"] = FAKE_packet if res.get("FAKE_packet") is None else res["FAKE_packet"].encode(encoding='UTF-8') + res.setdefault('FAKE_ttl', FAKE_ttl) + res.setdefault('FAKE_sleep', FAKE_sleep) if res.get("FAKE_ttl")=="query": print(f'FAKE TTL for {res.get("IP")} is {res.get("FAKE_ttl")}') # print("Not implemented yet") @@ -309,7 +386,7 @@ def handle_client_request(self,client_socket): server_name , server_port = self.extract_servername_and_port(data) elif (data[:3]==b'GET' and str(data).split('\r\n')[0].split(' ')[1]=="/proxy.pac"): # return pacfile - response_data = 'HTTP/1.1 200 OK\r\nContent-Type: application/x-ns-proxy-autoconfig\r\nContent-Length: '+str(len(pacfile))+'\r\n\r\n'+pacfile + response_data = f'HTTP/1.1 200 OK\r\nContent-Type: application/x-ns-proxy-autoconfig\r\nContent-Length: {len(pacfile)}\r\n\r\n'+pacfile client_socket.sendall(response_data.encode()) client_socket.close() @@ -354,7 +431,7 @@ def handle_client_request(self,client_socket): except ValueError: # print('Not IP , its domain , try to resolve it') settings=self.DoH.query(server_name) - if settings==None: + if settings==None: settings={} settings["sni"]=bytes(server_name,encoding="utf-8") server_IP=settings.get("IP") @@ -376,7 +453,7 @@ def handle_client_request(self,client_socket): client_socket.sendall(response_data) return server_socket, settings except socket.error: - print("@@@ "+server_IP+":"+str(server_port)+ " ==> filtered @@@") + print(f"@@@ {server_IP}:{server_port} ==> filtered @@@") # Send HTTP ERR 502 response_data = b'HTTP/1.1 502 Bad Gateway (is IP filtered?)\r\nProxy-agent: MyProxy/1.0\r\n\r\n' client_socket.sendall(response_data) @@ -452,6 +529,12 @@ def my_upstream(self, client_sock): send_data_in_fragment(settings.get("sni"),settings,data,backend_sock) elif settings.get("method")=="FAKEdesync": send_data_with_fake(settings.get("sni"),settings,data,backend_sock) + elif settings.get("method")=="DIRECT": + backend_sock.sendall(data) + elif settings.get("method")=="GFWlike": + client_sock.close() + backend_sock.close() + return False else: print("unknown method") backend_sock.sendall(data) @@ -758,7 +841,7 @@ class OVERLAPPED(ctypes.Structure): # kernel32._get_osfhandle.argtypes = [wintypes.INT] # kernel32._get_osfhandle.restype = wintypes.HANDLE pass - elif platform.system() == "Linux" or platform.system() == "Darwin" or platform.system() == "Android": + elif platform.system() in ('Linux', 'Darwin', 'Android'): import os import ctypes # 加载 libc 库 @@ -846,7 +929,7 @@ def send_fake_data(data_len,fake_data,fake_ttl,real_data,default_ttl,sock,FAKE_s ); """ import tempfile,uuid - file_path = tempfile.gettempdir()+"\\"+ str(uuid.uuid4()) + ".txt" + file_path = f'tempfile.gettempdir()\\{uuid.uuid4()}.txt' try: sock_file_descriptor = sock.fileno() print("sock file discriptor:",sock_file_descriptor) @@ -925,7 +1008,7 @@ def send_fake_data(data_len,fake_data,fake_ttl,real_data,default_ttl,sock,FAKE_s os.remove(file_path) except Exception as e: raise e - elif platform.system() == "Linux" or platform.system() == "Darwin" or platform.system() == "Android": + elif platform.system() in ('Linux', 'Darwin', 'Android'): try: sock_file_descriptor = sock.fileno() print("sock file discriptor:",sock_file_descriptor) @@ -1083,12 +1166,12 @@ class Trie { let tr=null; function BuildAutomatom(arr) { - + tr=new Trie() arr.forEach(function (item) { tr.insert(item) }) - + root=tr.root; root.fail=null; const queue=[root] @@ -1109,7 +1192,7 @@ class Trie { } function MatchAutomatom(str) { - let node=tr.root; + let node=tr.root; const data=[]; for(let i=0;i