From 2f4a350c93272c5cc1a438a5fa7753ee9119c576 Mon Sep 17 00:00:00 2001 From: louiesun <95512329+louiesun@users.noreply.github.com> Date: Sat, 8 Feb 2025 21:10:07 +0800 Subject: [PATCH] auto pac in python --- PAC.txt | 123 ------------------- config.json | 145 ++++++++++++++++++++-- default.aproj | 3 +- dist/config.json | 145 ++++++++++++++++++++-- main.aardio | 152 +---------------------- py/server.py | 308 +++++++++++++++++++++++++++++++++++------------ 6 files changed, 515 insertions(+), 361 deletions(-) delete mode 100644 PAC.txt diff --git a/PAC.txt b/PAC.txt deleted file mode 100644 index 635b7c6..0000000 --- a/PAC.txt +++ /dev/null @@ -1,123 +0,0 @@ -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/config.json b/config.json index b18e344..8f218b4 100644 --- a/config.json +++ b/config.json @@ -18,10 +18,10 @@ "method": "TLSfrag", "IPtype": "ipv4", "domains": { - "annas-archive.org": {}, - "codesandbox.io": { - "IP": "104.21.3.227" - }, + "annas-archive.org": {}, + "codesandbox.io": { + "IP": "104.21.3.227" + }, "stackblitz.com": { "IP": "13.32.27.56" }, @@ -63,8 +63,7 @@ "IP": "104.21.3.226" }, "cn.nytimes.com": {}, - "nytimes.com": - { + "nytimes.com": { "IP": "199.232.137.164" }, "purr.nytimes.com": {}, @@ -144,6 +143,10 @@ "IP": "35.190.247.148", "port": 1445 }, + "chromium.org": { + "IP": "35.190.247.148", + "port": 1445 + }, "google.com": { "IP": "35.190.247.148", "port": 1445 @@ -297,5 +300,133 @@ "IP": "104.21.3.222", "TLS_frag": 6 } - } + }, + "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" + ] } \ No newline at end of file diff --git a/default.aproj b/default.aproj index e3776fa..24b6e0c 100644 --- a/default.aproj +++ b/default.aproj @@ -1,5 +1,5 @@  - + @@ -11,7 +11,6 @@ - diff --git a/dist/config.json b/dist/config.json index d7984e8..0f66e79 100644 --- a/dist/config.json +++ b/dist/config.json @@ -18,10 +18,10 @@ "method": "TLSfrag", "IPtype": "ipv4", "domains": { - "annas-archive.org": {}, - "codesandbox.io": { - "IP": "104.21.3.227" - }, + "annas-archive.org": {}, + "codesandbox.io": { + "IP": "104.21.3.227" + }, "stackblitz.com": { "IP": "13.32.27.56" }, @@ -63,8 +63,7 @@ "IP": "104.21.3.226" }, "cn.nytimes.com": {}, - "nytimes.com": - { + "nytimes.com": { "IP": "199.232.137.164" }, "purr.nytimes.com": {}, @@ -144,6 +143,10 @@ "IP": "35.190.247.148", "port": 1445 }, + "chromium.org": { + "IP": "35.190.247.148", + "port": 1445 + }, "google.com": { "IP": "35.190.247.148", "port": 1445 @@ -297,5 +300,133 @@ "IP": "104.21.3.222", "TLS_frag": 6 } - } + }, + "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" + ] } \ No newline at end of file diff --git a/main.aardio b/main.aardio index cc0627c..963380a 100644 --- a/main.aardio +++ b/main.aardio @@ -115,159 +115,17 @@ if(_ARGV["p"]||_STUDIO_INVOKED) cfg=web.json.parse(cfg) //win.msgbox(cfg) - var VarietesofCode=/**class TrieNode { - constructor(value){ - this.value = value; - this.num=1; - this.deep=0; - this.son=[]; - this.isEnd=false; - } - findNode(value){ - for(let i=0;i=DNS_log_every: cnt_dns_chg=0 - with open("DNS_cache.json",'w', encoding='UTF-8') as f: + + with dataPath.joinpath("DNS_cache.json").open('w', encoding='UTF-8') as f: json.dump(DNS_cache,f) lock_DNS_cache.release() # res["IP"]="127.0.0.1" @@ -270,9 +232,6 @@ def query(self,domain, todns=True): if res.get("num_TCP_fragment")==None: res["num_TCP_fragment"]=num_TCP_fragment - - - if res.get("method")=="TLSfrag": if res.get("TLS_frag")==None: res["TLS_frag"]=TLS_frag @@ -309,7 +268,7 @@ def query(self,domain, todns=True): print(f"cnt_ttl_chg {cnt_ttl_chg}",TTL_log_every) if cnt_ttl_chg>=TTL_log_every: cnt_ttl_chg=0 - with open("TTL_cache.json",'w', encoding='UTF-8') as f: + with dataPath.joinpath("TTL_cache.json").open('w', encoding='UTF-8') as f: json.dump(TTL_cache,f) lock_TTL_cache.release() @@ -317,6 +276,7 @@ def query(self,domain, todns=True): return res +ThreadtoWork=False class ThreadedServer(object): def __init__(self, host, port): @@ -330,8 +290,8 @@ def __init__(self, host, port): def listen(self): self.sock.listen(128) # up to 128 concurrent unaccepted socket queued , the more is refused untill accepting those. - - while True: + global ThreadtoWork + while ThreadtoWork: client_sock , client_addr = self.sock.accept() client_sock.settimeout(my_socket_timeout) @@ -339,16 +299,21 @@ def listen(self): thread_up = threading.Thread(target = self.my_upstream , args =(client_sock,) ) thread_up.daemon = True #avoid memory leak by telling os its belong to main program , its not a separate program , so gc collect it when thread finish thread_up.start() - - + self.sock.close() def handle_client_request(self,client_socket): # Receive the CONNECT request from the client - data = client_socket.recv(16384) - + data = client_socket.recv(16384) if(data[:7]==b'CONNECT'): - server_name , server_port = self.extract_servername_and_port(data) + 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 + + client_socket.sendall(response_data.encode()) + client_socket.close() + return None, {} elif( (data[:3]==b'GET') or (data[:4]==b'POST') or (data[:4]==b'HEAD') @@ -429,12 +394,6 @@ def handle_client_request(self,client_socket): server_socket.close() return None, {} - - - - - - def my_upstream(self, client_sock): first_flag = True backend_sock, settings = self.handle_client_request(client_sock) @@ -457,8 +416,8 @@ def my_upstream(self, client_sock): IP_UL_traffic[this_ip] = 0 IP_DL_traffic[this_ip] = 0 - - while True: + global ThreadtoWork + while ThreadtoWork: try: if( first_flag == True ): first_flag = False @@ -521,14 +480,16 @@ def my_upstream(self, client_sock): backend_sock.close() return False - + client_sock.close() + backend_sock.close() def my_downstream(self, backend_sock , client_sock, settings): this_ip = backend_sock.getpeername()[0] first_flag = True - while True: + global ThreadtoWork + while ThreadtoWork: try: if( first_flag == True ): first_flag = False @@ -554,6 +515,8 @@ def my_downstream(self, backend_sock , client_sock, settings): client_sock.close() return False + client_sock.close() + backend_sock.close() def extract_servername_and_port(self,data): @@ -1056,18 +1019,213 @@ def TCP_send_with_sleep(new_frag): print("----------finish------------",sni) - + +serverHandle=None + +def generate_PAC(): + global pac_domains,pacfile + pacfile="""class TrieNode { + constructor(value){ + this.value = value; + this.num=1; + this.deep=0; + this.son=[]; + this.isEnd=false; + } + findNode(value){ + for(let i=0;i