├── .github └── workflows │ ├── ChromeGo.yml │ └── ChromeMerge.yml ├── .gitignore ├── ChromeGo ├── README.md ├── all_merged_proxies.yaml ├── all_merged_proxies_shadowrocket_nekoray.txt ├── all_merged_proxies_with_warp.yaml ├── clashMeta │ ├── ip_0.yaml │ ├── ip_1.yaml │ ├── ip_2.yaml │ ├── ip_3.yaml │ ├── ip_4.yaml │ └── ip_5.yaml ├── get_all_proxies.sh ├── hysteria1 │ ├── ip_0.json │ ├── ip_1.json │ ├── ip_2.json │ └── ip_3.json ├── hysteria2 │ ├── ip_0.json │ ├── ip_1.json │ ├── ip_2.json │ └── ip_3.json ├── naiveproxy │ ├── ip_0.json │ └── ip_1.json ├── singbox │ ├── ip_0.json │ └── ip_1.json └── xray │ ├── ip_0.json │ ├── ip_1.json │ ├── ip_2.json │ └── ip_3.json ├── ChromeGo_Merge ├── GeoLite2-City.mmdb ├── LICENSE ├── ReadMe.md ├── merge.py ├── meta_merge.py ├── requirements.txt ├── sb.py ├── sub │ ├── merged_proxies_new.yaml │ ├── merged_warp_proxies_new.yaml │ ├── sb.json │ └── shadowrocket_base64.txt ├── templates │ ├── clash_template.yaml │ └── clash_warp_template.yaml └── urls │ ├── clash_urls.txt │ ├── hysteria2_urls.txt │ ├── hysteria_urls.txt │ ├── naiverproxy_urls.txt │ ├── sb_urls.txt │ ├── ss_urls.txt │ └── xray_urls.txt ├── LICENSE ├── README.md ├── index.html ├── main.ipynb ├── main.ps1 ├── main.py ├── main.sh ├── markdown_to_html copy.py ├── markdown_to_html.py ├── src ├── css │ ├── codehighlight.css │ ├── directory.css │ ├── katex.min.css │ ├── linenum.css │ ├── markdown.css │ └── tasklist.css └── js │ ├── directory.js │ ├── katex.min.js │ ├── mathtex-script-type.min.js │ └── mermaid.min.js └── warp ├── README.md ├── linux └── placeholder ├── macos └── placeholder ├── unix └── placeholder ├── wgcf-account.toml ├── wgcf-freebsd ├── wgcf-linux ├── wgcf-macos ├── wgcf-profile.conf ├── wgcf.exe ├── windows └── placeholder ├── wireguard-conf-generator.bat ├── wireguard-conf-generator.ps1 └── wireguard-conf-generator.sh /.github/workflows/ChromeGo.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Auto Merge All ChromeGo Proxies 4 | 5 | # Controls when the workflow will run 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the "main" branch 8 | push: 9 | branches: [ "main" ] 10 | pull_request: 11 | branches: [ "main" ] 12 | 13 | # Allows you to run this workflow manually from the Actions tab 14 | workflow_dispatch: 15 | 16 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 17 | jobs: 18 | # This workflow contains a single job called "build" 19 | Publish_to_Cloudflare_Pages: 20 | # The type of runner that the job will run on 21 | runs-on: ubuntu-latest 22 | permissions: 23 | contents: write 24 | deployments: write 25 | 26 | # Steps represent a sequence of tasks that will be executed as part of the job 27 | steps: 28 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 29 | # - uses: actions/checkout@v3 30 | - uses: actions/checkout@v2 31 | 32 | - name: Set up Python 33 | uses: actions/setup-python@v2 34 | with: 35 | python-version: 3.11 # 替换为你的 Python 版本 36 | 37 | # Runs a single command using the runners shell 38 | - name: Auto Merge All ChromeGo Proxies by shell script 39 | run: | 40 | sh main.sh 41 | cd ChromeGo 42 | ls 43 | 44 | # - name: commit files 45 | # run: | 46 | # git config --local user.email "action@github.com" 47 | # git config --local user.name "GitHub Action" 48 | # git add -A 49 | # git commit -m "github action auto build" -a 50 | 51 | # - name: push changes 52 | # uses: ad-m/github-push-action@v0.6.0 53 | # with: 54 | # github_token: ${{ secrets.ACTIONS_TOKEN }} 55 | # branch: main 56 | 57 | - name: Publish to Cloudflare Pages 58 | uses: cloudflare/pages-action@v1 59 | with: 60 | apiToken: ${{ secrets.CF_API_KEY}} 61 | accountId: ${{ secrets.CF_ACCOUNT_ID}} 62 | projectName: cloudflare-pages-vpn 63 | directory: . 64 | # Optional: Enable this if you want to have GitHub Deployments triggered 65 | gitHubToken: ${{ secrets.ACTIONS_TOKEN }} 66 | # Optional: Switch what branch you are publishing to. 67 | # By default this will be the branch which triggered this workflow 68 | branch: main 69 | # Optional: Change the working directory 70 | workingDirectory: . 71 | # Optional: Change the Wrangler version, allows you to point to a specific version or a tag such as `beta` 72 | wranglerVersion: '3' -------------------------------------------------------------------------------- /.github/workflows/ChromeMerge.yml: -------------------------------------------------------------------------------- 1 | name: ChromeMerge Script 2 | 3 | on: 4 | push: 5 | branches: 6 | - main # 替换为你的默认分支 7 | schedule: 8 | - cron: '0 0,8,18 * * *' # 每6h一次 9 | workflow_dispatch: # 触发手动事件 10 | jobs: 11 | merge: 12 | runs-on: ubuntu-latest 13 | permissions: 14 | contents: write 15 | deployments: write 16 | 17 | steps: 18 | - name: Checkout repository 19 | uses: actions/checkout@v2 20 | 21 | - name: Set up Python 22 | uses: actions/setup-python@v2 23 | with: 24 | python-version: 3.11 # 替换为你的 Python 版本 25 | 26 | - name: Install dependencies 27 | run: cd ChromeGo_Merge && pip install -r requirements.txt 28 | 29 | - name: Run merge script 30 | run: cd ChromeGo_Merge && python meta_merge.py # 替换为你的 merge.py 脚本名称 31 | 32 | - name: Run shadowrocket merge script 33 | run: cd ChromeGo_Merge && python merge.py # 替换为你的 merge.py 脚本名称 34 | 35 | # # BUG: lgf4591/cloudflare-pages-vpn.git denied to github-actions[bot] -> ref: https://machbbs.com/v2ex/508380 36 | # - name: Commit Changes 37 | # run: | 38 | # git config core.ignorecase false 39 | # git config --local user.email "lgf4591@outlook.com" 40 | # git config --local user.name "lgf4591" 41 | # git add . 42 | # git commit -m "Updated at $(date '+%Y-%m-%d %H:%M:%S')" 43 | # git push 44 | 45 | - name: commit files 46 | run: | 47 | git config --local user.email "action@github.com" 48 | git config --local user.name "GitHub Action" 49 | git add -A 50 | git commit -m "github action auto build" -a 51 | 52 | - name: push changes 53 | uses: ad-m/github-push-action@v0.6.0 54 | with: 55 | github_token: ${{ secrets.ACTIONS_TOKEN }} 56 | branch: main 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/#use-with-ide 110 | .pdm.toml 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | .env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ 154 | 155 | # PyCharm 156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 158 | # and can be added to the global gitignore or merged into this file. For a more nuclear 159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 160 | #.idea/ 161 | -------------------------------------------------------------------------------- /ChromeGo/README.md: -------------------------------------------------------------------------------- 1 | ## 简介 2 | 3 | **注意:clash内核无法使用这些节点,你要用clashmeta** 4 | 5 | https://github.com/vveg26/chromego_merge/tree/main 6 | 7 | ## 为什么要套上warp 8 |
9 | 点击展开/折叠 10 | 首先chromego屏蔽了很多网站,包括你喜欢的p开头的网站,套上warp可以突破这一层限制。 11 | 12 | 第二我并不喜欢使用机场等服务,原因就是机场主或者节点主完全知道你访问的网站,虽然有一层https加密,但是他们还是可以知道你访问的域名已经你连接的时间,套上warp之后,他们只能看到一串加密流量。 13 | 14 | 第三,我为什么要提取节点出来,不仅仅是因为方便管理,可以在一个配置文件中切换不同的节点。而且是因为我并不喜欢使用他们所提供的客户端,虽然chromego所提供的客户端并没有什么问题,但是我还是喜欢自己常用的客户端。 15 | 16 |
17 | 18 | ## 如何修改为自己的warp节点 19 | 可以用warp+机器人和提取wg节点替换掉配置文件中的wg信息 20 | [warp提取wireguard网站](https://replit.com/@misaka-blog/wgcf-profile-generator) 21 | [warp+机器人](https://t.me/generatewarpplusbot) 22 | 23 | ## 订阅链接分享(无需翻墙版-托管自netlify) 24 | ### 不套warp版本(clashmeta-全平台通用-节点最全) 25 | **不含hysteria2节点** 26 | ``` 27 | https://mareep.netlify.app/sub/merged_proxies.yaml 28 | ``` 29 | **含hysteria2节点(节点最全)** 30 | ``` 31 | https://mareep.netlify.app/sub/merged_proxies_new.yaml 32 | ``` 33 | ### 套warp版本(clashmeta-全平台通用-节点最全) 34 | **不含hysteria2节点** 35 | ``` 36 | https://mareep.netlify.app/sub/merged_warp_proxies.yaml 37 | ``` 38 | **含hysteria2节点(节点最全)** 39 | ``` 40 | https://mareep.netlify.app/sub/merged_warp_proxies_new.yaml 41 | ``` 42 | ### 通用链接 shadowrocket-nekoray 43 | ``` 44 | https://mareep.netlify.app/sub/shadowrocket_base64.txt 45 | ``` 46 | 47 | ## 订阅链接分享(需要翻墙版-托管自github) 48 |
49 | 点击展开/折叠 50 | 51 | ### 不套warp版本(clashmeta 52 | ``` 53 | https://raw.githubusercontent.com/vveg26/chromego_merge/main/sub/merged_proxies.yaml 54 | ``` 55 | ### 套warp版本(clashmeta 56 | ``` 57 | https://raw.githubusercontent.com/vveg26/chromego_merge/main/sub/merged_warp_proxies.yaml 58 | ``` 59 | ### 通用链接 shadowrocket-nekoray 60 | ``` 61 | https://raw.githubusercontent.com/vveg26/chromego_merge/main/sub/shadowrocket_base64.txt 62 | ``` 63 | 64 |
65 | 66 | 67 | ## 致谢 68 | [Alvin9999](https://github.com/Alvin9999/pac2/tree/master) 69 | 70 | ## TODO 71 | - 部分代码逻辑不够优雅 72 | - sing-box节点的处理 73 | - xray部分节点的处理 74 | - 融合ss和ssr 75 | 76 | 77 | -------------------------------------------------------------------------------- /ChromeGo/all_merged_proxies.yaml: -------------------------------------------------------------------------------- 1 | port: 7890 2 | allow-lan: true 3 | mode: rule 4 | log-level: info 5 | unified-delay: true 6 | global-client-fingerprint: chrome 7 | dns: 8 | enable: true 9 | listen: :53 10 | ipv6: true 11 | enhanced-mode: fake-ip 12 | fake-ip-range: 198.18.0.1/16 13 | default-nameserver: 14 | - 223.5.5.5 15 | - 8.8.8.8 16 | nameserver: 17 | - https://dns.alidns.com/dns-query 18 | - https://doh.pub/dns-query 19 | fallback: 20 | - https://1.0.0.1/dns-query 21 | - tls://dns.google 22 | fallback-filter: 23 | geoip: true 24 | geoip-code: CN 25 | ipcidr: 26 | - 240.0.0.0/4 27 | proxies: 28 | - name: 油管-绵阿羊 29 | type: trojan 30 | server: a 31 | port: 1 32 | password: 72ac875a-f5b9-461e-a7a4-942b468b0d83 33 | udp: true 34 | sni: gw.alicdn.com 35 | skip-cert-verify: true 36 | - name: meta_hysteria2_01 37 | type: hysteria2 38 | server: 108.181.22.205 39 | port: 10194 40 | password: 87dc8c2e 41 | sni: www.bing.com 42 | skip-cert-verify: true 43 | - name: meta_hysteria_11 44 | type: hysteria 45 | server: www.dtku46.xyz 46 | port: 11223 47 | auth-str: mqoE9qSoyMFa 48 | alpn: 49 | - h3 50 | protocol: udp 51 | up: 50 Mbps 52 | down: 100 Mbps 53 | skip-cert-verify: true 54 | - name: meta_tuic_21 55 | server: tuic3.dtku47.xyz 56 | port: 12255 57 | type: tuic 58 | uuid: ed6a538a-6e66-4f21-a769-4b389bb2f3ab 59 | password: dongtaiwang 60 | alpn: 61 | - h3 62 | request-timeout: 8000 63 | udp-relay-mode: native 64 | congestion-controller: bbr 65 | - name: meta_hysteria2_31 66 | type: hysteria2 67 | server: 108.181.22.205 68 | port: 10194 69 | password: 87dc8c2e 70 | sni: www.bing.com 71 | skip-cert-verify: true 72 | - name: meta_hysteria_41 73 | type: hysteria 74 | server: www.dtku46.xyz 75 | port: 11223 76 | auth-str: mqoE9qSoyMFa 77 | alpn: 78 | - h3 79 | protocol: udp 80 | up: 50 Mbps 81 | down: 100 Mbps 82 | skip-cert-verify: true 83 | - name: meta_hysteria2_51 84 | type: hysteria2 85 | server: 108.181.22.205 86 | port: 10194 87 | password: 87dc8c2e 88 | sni: www.bing.com 89 | skip-cert-verify: true 90 | - name: meta_hysteria_61 91 | type: hysteria 92 | server: hy2.dtku47.xyz 93 | port: 15566 94 | auth-str: jQrGpwSqp34P 95 | alpn: 96 | - h3 97 | protocol: udp 98 | up: 50 Mbps 99 | down: 100 Mbps 100 | - name: meta_hysteria_71 101 | type: hysteria 102 | server: clash1.dtku47.xyz 103 | port: 11223 104 | auth-str: O5tQQiW2xKf5 105 | alpn: 106 | - h3 107 | protocol: udp 108 | up: 50 Mbps 109 | down: 100 Mbps 110 | - name: meta_hysteria_81 111 | type: hysteria 112 | server: hy2.dtku47.xyz 113 | port: 15566 114 | auth-str: jQrGpwSqp34P 115 | alpn: 116 | - h3 117 | protocol: udp 118 | up: 50 Mbps 119 | down: 100 Mbps 120 | - name: meta_hysteria_91 121 | type: hysteria 122 | server: hy1.dtku47.xyz 123 | port: 22334 124 | auth-str: lASdKzWK0VxL 125 | alpn: 126 | - h3 127 | protocol: udp 128 | up: 50 Mbps 129 | down: 100 Mbps 130 | - name: meta_hysteria_101 131 | type: hysteria 132 | server: hy2.dtku47.xyz 133 | port: 15566 134 | auth-str: jQrGpwSqp34P 135 | alpn: 136 | - h3 137 | protocol: udp 138 | up: 50 Mbps 139 | down: 100 Mbps 140 | - name: meta_hysteria_111 141 | type: hysteria 142 | server: hy1.dtku47.xyz 143 | port: 22334 144 | auth-str: lASdKzWK0VxL 145 | alpn: 146 | - h3 147 | protocol: udp 148 | up: 50 Mbps 149 | down: 100 Mbps 150 | - name: meta_hysteria_121 151 | type: hysteria 152 | server: 108.181.22.239 153 | port: 17727 154 | sni: youku.com 155 | skip-cert-verify: true 156 | alpn: 157 | - h3 158 | protocol: udp 159 | auth_str: 7YxfKsXdTnB226S8j4OjaA9M0nLcXATvgnXhVJbCRG7e9KKU7i 160 | up: 11 161 | down: 55 162 | - name: meta_hysteria_131 163 | type: hysteria 164 | server: www.dtku50.xyz 165 | port: 43250 166 | sni: bing.com 167 | skip-cert-verify: true 168 | alpn: 169 | - h3 170 | protocol: udp 171 | auth_str: 2S9M5Gs0pgRsaTObNghoLZx6wPkBJOGTFWvf4R06Us5hUNtfr7 172 | up: 2 173 | down: 10 174 | - name: meta_vless_141 175 | type: vless 176 | server: 45.150.165.61 177 | port: 25678 178 | udp: true 179 | uuid: 34f36b97-1fb7-41f3-8db4-912cc69e724a 180 | tls: true 181 | servername: itunes.apple.com 182 | flow: xtls-rprx-vision 183 | network: tcp 184 | reality-opts: 185 | public-key: sJsSZcA2DyAHDTcoe8Utbz9JaXJPMVmtHmiXxWmcExc 186 | client-fingerprint: chrome 187 | - name: meta_hysteria_151 188 | type: hysteria 189 | server: www3.dtku49.xyz 190 | port: 58693 191 | sni: bing.com 192 | skip-cert-verify: true 193 | alpn: 194 | - h3 195 | protocol: udp 196 | auth_str: nbdyVMqucpFMmyRiwcRQFI7EeKzJWjPYuks3ZzEhCv6HjeZvbh 197 | up: 11 198 | down: 55 199 | - name: hysteria_0 200 | type: hysteria 201 | server: 167.160.91.115 202 | port: 13928 203 | ports: 13928 204 | auth_str: BF0LL4L2jlqSdW3KxjQv81AiFFjj90vWRHeUoqUuTVPeDAGvq3 205 | up: 80 206 | down: 100 207 | fast-open: true 208 | protocol: udp 209 | sni: paypal.com 210 | skip-cert-verify: true 211 | alpn: 212 | - h3 213 | - name: hysteria_1 214 | type: hysteria 215 | server: 173.234.25.52 216 | port: 20164 217 | ports: 20164 218 | auth_str: Ljg6NNEATDqP97hdAdHe1lJv7ggtKc0h7zmCCZKCX3qY0LR64F 219 | up: 80 220 | down: 100 221 | fast-open: true 222 | protocol: udp 223 | sni: www.microsoft.com 224 | skip-cert-verify: true 225 | alpn: 226 | - h3 227 | - name: hysteria_2 228 | type: hysteria 229 | server: 173.234.25.52 230 | port: 20164 231 | ports: 20164 232 | auth_str: Ljg6NNEATDqP97hdAdHe1lJv7ggtKc0h7zmCCZKCX3qY0LR64F 233 | up: 80 234 | down: 100 235 | fast-open: true 236 | protocol: udp 237 | sni: www.microsoft.com 238 | skip-cert-verify: true 239 | alpn: 240 | - h3 241 | - name: hysteria_3 242 | type: hysteria 243 | server: 51.158.54.46 244 | port: 11926 245 | ports: 11926 246 | auth_str: Trz2alKwzCImRAXI3nXfpo1ylpHfqOL8s1vageWKoyjjvWeMVs 247 | up: 80 248 | down: 100 249 | fast-open: true 250 | protocol: udp 251 | sni: youku.com 252 | skip-cert-verify: true 253 | alpn: 254 | - h3 255 | - name: hysteria2_0 256 | type: hysteria2 257 | server: 108.181.22.155 258 | port: 17965 259 | password: 4f58555f 260 | fast-open: true 261 | sni: www.bing.com 262 | skip-cert-verify: true 263 | - name: hysteria2_1 264 | type: hysteria2 265 | server: 167.160.90.252 266 | port: 60930 267 | password: fc4488ef 268 | fast-open: true 269 | sni: www.bing.com 270 | skip-cert-verify: true 271 | - name: hysteria2_2 272 | type: hysteria2 273 | server: www2.dtku49.xyz 274 | port: 54406 275 | password: ebcbb37b 276 | fast-open: true 277 | sni: www.bing.com 278 | skip-cert-verify: true 279 | - name: hysteria2_3 280 | type: hysteria2 281 | server: www.dtku48.xyz 282 | port: 56411 283 | password: dongtaiwang.com 284 | fast-open: true 285 | sni: www.bing.com 286 | skip-cert-verify: true 287 | proxy-groups: 288 | - name: 节点选择 289 | type: select 290 | proxies: 291 | - 自动选择 292 | - DIRECT 293 | - 油管-绵阿羊 294 | - meta_hysteria2_01 295 | - meta_hysteria_11 296 | - meta_tuic_21 297 | - meta_hysteria2_31 298 | - meta_hysteria_41 299 | - meta_hysteria2_51 300 | - meta_hysteria_61 301 | - meta_hysteria_71 302 | - meta_hysteria_81 303 | - meta_hysteria_91 304 | - meta_hysteria_101 305 | - meta_hysteria_111 306 | - meta_hysteria_121 307 | - meta_hysteria_131 308 | - meta_vless_141 309 | - meta_hysteria_151 310 | - hysteria_0 311 | - hysteria_1 312 | - hysteria_2 313 | - hysteria_3 314 | - hysteria2_0 315 | - hysteria2_1 316 | - hysteria2_2 317 | - hysteria2_3 318 | - name: 自动选择 319 | type: url-test 320 | url: http://www.gstatic.com/generate_204 321 | interval: 300 322 | tolerance: 50 323 | proxies: 324 | - 油管-绵阿羊 325 | - meta_hysteria2_01 326 | - meta_hysteria_11 327 | - meta_tuic_21 328 | - meta_hysteria2_31 329 | - meta_hysteria_41 330 | - meta_hysteria2_51 331 | - meta_hysteria_61 332 | - meta_hysteria_71 333 | - meta_hysteria_81 334 | - meta_hysteria_91 335 | - meta_hysteria_101 336 | - meta_hysteria_111 337 | - meta_hysteria_121 338 | - meta_hysteria_131 339 | - meta_vless_141 340 | - meta_hysteria_151 341 | - hysteria_0 342 | - hysteria_1 343 | - hysteria_2 344 | - hysteria_3 345 | - hysteria2_0 346 | - hysteria2_1 347 | - hysteria2_2 348 | - hysteria2_3 349 | rules: 350 | - DOMAIN,clash.razord.top,DIRECT 351 | - DOMAIN,yacd.haishan.me,DIRECT 352 | - GEOIP,LAN,DIRECT 353 | - GEOIP,CN,DIRECT 354 | - MATCH,节点选择 355 | -------------------------------------------------------------------------------- /ChromeGo/all_merged_proxies_shadowrocket_nekoray.txt: -------------------------------------------------------------------------------- 1 | aHlzdGVyaWEyOi8vODdkYzhjMmVAMTA4LjE4MS4yMi4yMDU6MTAxOTQ/aW5zZWN1cmU9MSZzbmk9d3d3LmJpbmcuY29tJm9iZnM9Jm9iZnMtcGFzc3dvcmQ9I2h5c3RlcmlhMl9tZXRhXzAKaHlzdGVyaWE6Ly93d3cuZHRrdTQ2Lnh5ejoxMTIyMz9wZWVyPSZhdXRoPW1xb0U5cVNveU1GYSZpbnNlY3VyZT0xJnVwbWJwcz01MCZkb3dubWJwcz04MCZhbHBuPWgzJm1wb3J0PTExMjIzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhX21ldGFfMQp0dWljOi8vZWQ2YTUzOGEtNmU2Ni00ZjIxLWE3NjktNGIzODliYjJmM2FiOmRvbmd0YWl3YW5nQHR1aWMzLmR0a3U0Ny54eXo6MTIyNTU/c25pPSZjb25nZXN0aW9uX2NvbnRyb2w9YmJyJnVkcF9yZWxheV9tb2RlPW5hdGl2ZSZhbHBuPWgzJmFsbG93X2luc2VjdXJlPTAKaHlzdGVyaWEyOi8vODdkYzhjMmVAMTA4LjE4MS4yMi4yMDU6MTAxOTQ/aW5zZWN1cmU9MSZzbmk9d3d3LmJpbmcuY29tJm9iZnM9Jm9iZnMtcGFzc3dvcmQ9I2h5c3RlcmlhMl9tZXRhXzMKaHlzdGVyaWE6Ly93d3cuZHRrdTQ2Lnh5ejoxMTIyMz9wZWVyPSZhdXRoPW1xb0U5cVNveU1GYSZpbnNlY3VyZT0xJnVwbWJwcz01MCZkb3dubWJwcz04MCZhbHBuPWgzJm1wb3J0PTExMjIzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhX21ldGFfNApoeXN0ZXJpYTI6Ly84N2RjOGMyZUAxMDguMTgxLjIyLjIwNToxMDE5ND9pbnNlY3VyZT0xJnNuaT13d3cuYmluZy5jb20mb2Jmcz0mb2Jmcy1wYXNzd29yZD0jaHlzdGVyaWEyX21ldGFfNQpoeXN0ZXJpYTovL2h5Mi5kdGt1NDcueHl6OjE1NTY2P3BlZXI9JmF1dGg9alFyR3B3U3FwMzRQJmluc2VjdXJlPTAmdXBtYnBzPTUwJmRvd25tYnBzPTgwJmFscG49aDMmbXBvcnQ9MTU1NjYmb2Jmcz0mcHJvdG9jb2w9dWRwJmZhc3RvcGVuPTEjaHlzdGVyaWFfbWV0YV82Cmh5c3RlcmlhOi8vY2xhc2gxLmR0a3U0Ny54eXo6MTEyMjM/cGVlcj0mYXV0aD1PNXRRUWlXMnhLZjUmaW5zZWN1cmU9MCZ1cG1icHM9NTAmZG93bm1icHM9ODAmYWxwbj1oMyZtcG9ydD0xMTIyMyZvYmZzPSZwcm90b2NvbD11ZHAmZmFzdG9wZW49MSNoeXN0ZXJpYV9tZXRhXzcKaHlzdGVyaWE6Ly9oeTIuZHRrdTQ3Lnh5ejoxNTU2Nj9wZWVyPSZhdXRoPWpRckdwd1NxcDM0UCZpbnNlY3VyZT0wJnVwbWJwcz01MCZkb3dubWJwcz04MCZhbHBuPWgzJm1wb3J0PTE1NTY2Jm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhX21ldGFfOApoeXN0ZXJpYTovL2h5MS5kdGt1NDcueHl6OjIyMzM0P3BlZXI9JmF1dGg9bEFTZEt6V0swVnhMJmluc2VjdXJlPTAmdXBtYnBzPTUwJmRvd25tYnBzPTgwJmFscG49aDMmbXBvcnQ9MjIzMzQmb2Jmcz0mcHJvdG9jb2w9dWRwJmZhc3RvcGVuPTEjaHlzdGVyaWFfbWV0YV85Cmh5c3RlcmlhOi8vaHkyLmR0a3U0Ny54eXo6MTU1NjY/cGVlcj0mYXV0aD1qUXJHcHdTcXAzNFAmaW5zZWN1cmU9MCZ1cG1icHM9NTAmZG93bm1icHM9ODAmYWxwbj1oMyZtcG9ydD0xNTU2NiZvYmZzPSZwcm90b2NvbD11ZHAmZmFzdG9wZW49MSNoeXN0ZXJpYV9tZXRhXzEwCmh5c3RlcmlhOi8vaHkxLmR0a3U0Ny54eXo6MjIzMzQ/cGVlcj0mYXV0aD1sQVNkS3pXSzBWeEwmaW5zZWN1cmU9MCZ1cG1icHM9NTAmZG93bm1icHM9ODAmYWxwbj1oMyZtcG9ydD0yMjMzNCZvYmZzPSZwcm90b2NvbD11ZHAmZmFzdG9wZW49MSNoeXN0ZXJpYV9tZXRhXzExCmh5c3RlcmlhOi8vMTA4LjE4MS4yMi4yMzk6MTc3Mjc/cGVlcj15b3VrdS5jb20mYXV0aD0maW5zZWN1cmU9MSZ1cG1icHM9NTAmZG93bm1icHM9ODAmYWxwbj1oMyZtcG9ydD0xNzcyNyZvYmZzPSZwcm90b2NvbD11ZHAmZmFzdG9wZW49MSNoeXN0ZXJpYV9tZXRhXzEyCmh5c3RlcmlhOi8vd3d3LmR0a3U1MC54eXo6NDMyNTA/cGVlcj1iaW5nLmNvbSZhdXRoPSZpbnNlY3VyZT0xJnVwbWJwcz01MCZkb3dubWJwcz04MCZhbHBuPWgzJm1wb3J0PTQzMjUwJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhX21ldGFfMTMKdmxlc3M6Ly8zNGYzNmI5Ny0xZmI3LTQxZjMtOGRiNC05MTJjYzY5ZTcyNGFANDUuMTUwLjE2NS42MToyNTY3OD9zZWN1cml0eT1yZWFsaXR5JmFsbG93SW5zZWN1cmUwJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZ0eXBlPXRjcCZmcD1jaHJvbWUmcGJrPXNKc1NaY0EyRHlBSERUY29lOFV0Yno5SmFYSlBNVm10SG1pWHhXbWNFeGMmc2lkPSZzbmk9aXR1bmVzLmFwcGxlLmNvbSZzZXJ2aWNlTmFtZT0mcGF0aD0maG9zdD0jdmxlc3NfbWV0YV8xNApoeXN0ZXJpYTovL3d3dzMuZHRrdTQ5Lnh5ejo1ODY5Mz9wZWVyPWJpbmcuY29tJmF1dGg9Jmluc2VjdXJlPTEmdXBtYnBzPTUwJmRvd25tYnBzPTgwJmFscG49aDMmbXBvcnQ9NTg2OTMmb2Jmcz0mcHJvdG9jb2w9dWRwJmZhc3RvcGVuPTEjaHlzdGVyaWFfbWV0YV8xNQphSFIwY0hNNkx5OWtiMjVuZEdGcGQyRnVaeTVqYjIwNlpHOXVaM1JoYVhkaGJtY3VZMjl0UUhkM2R5NWtkR3QxTkRndWVIbDZPalEwTXc9PQphSFIwY0hNNkx5OWtiMjVuZEdGcGQyRnVaeTVqYjIwNlpHOXVaM1JoYVhkaGJtY3VZMjl0UUc1aGFYWmxNVFF1WTJaalpHNHpMbmg1ZWpvME5ETT0KaHlzdGVyaWE6Ly8xNjcuMTYwLjkxLjExNToxMzkyOD9wZWVyPXBheXBhbC5jb20mYXV0aD1CRjBMTDRMMmpscVNkVzNLeGpRdjgxQWlGRmpqOTB2V1JIZVVvcVV1VFZQZURBR3ZxMyZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhXzAKaHlzdGVyaWE6Ly8xNzMuMjM0LjI1LjUyOjIwMTY0P3BlZXI9d3d3Lm1pY3Jvc29mdC5jb20mYXV0aD1Mamc2Tk5FQVREcVA5N2hkQWRIZTFsSnY3Z2d0S2MwaDd6bUNDWktDWDNxWTBMUjY0RiZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhXzEKaHlzdGVyaWE6Ly8xNzMuMjM0LjI1LjUyOjIwMTY0P3BlZXI9d3d3Lm1pY3Jvc29mdC5jb20mYXV0aD1Mamc2Tk5FQVREcVA5N2hkQWRIZTFsSnY3Z2d0S2MwaDd6bUNDWktDWDNxWTBMUjY0RiZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhXzIKaHlzdGVyaWE6Ly81MS4xNTguNTQuNDY6MTE5MjY/cGVlcj15b3VrdS5jb20mYXV0aD1UcnoyYWxLd3pDSW1SQVhJM25YZnBvMXlscEhmcU9MOHMxdmFnZVdLb3lqanZXZU1WcyZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI2h5c3RlcmlhXzMKaHlzdGVyaWEyOi8vNGY1ODU1NWZAMTA4LjE4MS4yMi4xNTU6MTc5NjU/aW5zZWN1cmU9MSZzbmk9d3d3LmJpbmcuY29tI2h5c3RlcmlhMl8wCmh5c3RlcmlhMjovL2ZjNDQ4OGVmQDE2Ny4xNjAuOTAuMjUyOjYwOTMwP2luc2VjdXJlPTEmc25pPXd3dy5iaW5nLmNvbSNoeXN0ZXJpYTJfMQpoeXN0ZXJpYTI6Ly9lYmNiYjM3YkB3d3cyLmR0a3U0OS54eXo6NTQ0MDY/aW5zZWN1cmU9MSZzbmk9d3d3LmJpbmcuY29tI2h5c3RlcmlhMl8yCmh5c3RlcmlhMjovL2Rvbmd0YWl3YW5nLmNvbUB3d3cuZHRrdTQ4Lnh5ejo1NjQxMT9pbnNlY3VyZT0xJnNuaT13d3cuYmluZy5jb20jaHlzdGVyaWEyXzMKdmxlc3M6Ly8wNzczMjU2Yy1kMDIwLTQzNmQtYWZlYS02ZWVlN2NiNmM4NzJAZG93bmxvYWQueXVuemhvbmd6aHVhbi5jb206NDQzP3NlY3VyaXR5PXRscyZhbGxvd0luc2VjdXJlPTAmZmxvdz0mdHlwZT13cyZmcD1jaHJvbWUmcGJrPSZzaWQ9JnNuaT14cmF5MS5mcmVlZ3JhZGVseS54eXomc2VydmljZU5hbWU9JnBhdGg9L2JvZGh3cyZob3N0PXhyYXkxLmZyZWVncmFkZWx5Lnh5eiN2bGVzc18wCnZsZXNzOi8vZjVjMTgwZWItZmJjZS00OWFjLTkwMjktNDgyZWNhOTM4NWMwQGRvd25sb2FkLnl1bnpob25nemh1YW4uY29tOjQ0Mz9zZWN1cml0eT10bHMmYWxsb3dJbnNlY3VyZT0wJmZsb3c9JnR5cGU9d3MmZnA9Y2hyb21lJnBiaz0mc2lkPSZzbmk9eHJheTEuZnJlZWgxLnh5eiZzZXJ2aWNlTmFtZT0mcGF0aD0vZ3pvZ3dzJmhvc3Q9eHJheTEuZnJlZWgxLnh5eiN2bGVzc18yCnZsZXNzOi8vZjVjMTgwZWItZmJjZS00OWFjLTkwMjktNDgyZWNhOTM4NWMwQGRvbmd0YWl3YW5nMi5jb206NDQzP3NlY3VyaXR5PXRscyZhbGxvd0luc2VjdXJlPTAmZmxvdz0mdHlwZT13cyZmcD1jaHJvbWUmcGJrPSZzaWQ9JnNuaT14cmF5MS5mcmVlaDEueHl6JnNlcnZpY2VOYW1lPSZwYXRoPS9nem9nd3MmaG9zdD14cmF5MS5mcmVlaDEueHl6I3ZsZXNzXzMK -------------------------------------------------------------------------------- /ChromeGo/all_merged_proxies_with_warp.yaml: -------------------------------------------------------------------------------- 1 | port: 7890 2 | allow-lan: true 3 | mode: rule 4 | log-level: info 5 | unified-delay: true 6 | global-client-fingerprint: chrome 7 | dns: 8 | enable: true 9 | listen: :53 10 | ipv6: true 11 | enhanced-mode: fake-ip 12 | fake-ip-range: 198.18.0.1/16 13 | default-nameserver: 14 | - 223.5.5.5 15 | - 8.8.8.8 16 | nameserver: 17 | - https://dns.alidns.com/dns-query 18 | - https://doh.pub/dns-query 19 | fallback: 20 | - https://1.0.0.1/dns-query 21 | - tls://dns.google 22 | fallback-filter: 23 | geoip: true 24 | geoip-code: CN 25 | ipcidr: 26 | - 240.0.0.0/4 27 | proxies: 28 | - name: 油管-绵阿羊 29 | type: trojan 30 | server: a 31 | port: 1 32 | password: 72ac875a-f5b9-461e-a7a4-942b468b0d83 33 | udp: true 34 | sni: gw.alicdn.com 35 | skip-cert-verify: true 36 | - name: WARP 37 | type: wireguard 38 | server: engage.cloudflareclient.com 39 | port: 2408 40 | ip: 172.16.0.2 41 | ipv6: 2606:4700:110:87c0:ba32:773a:8d44:e353 42 | private-key: +HpHpY/KjSv5hJdGrN2ok1A6CKhCmTQv5Unwyul9S1g= 43 | public-key: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo= 44 | udp: true 45 | reserved: 46 | - 0 47 | - 0 48 | - 0 49 | remote-dns-resolve: true 50 | dns: 51 | - 1.1.1.1 52 | - 8.8.8.8 53 | dialer-proxy: WARP前置节点 54 | - name: meta_hysteria2_01 55 | type: hysteria2 56 | server: 108.181.22.205 57 | port: 10194 58 | password: 87dc8c2e 59 | sni: www.bing.com 60 | skip-cert-verify: true 61 | - name: meta_hysteria_11 62 | type: hysteria 63 | server: www.dtku46.xyz 64 | port: 11223 65 | auth-str: mqoE9qSoyMFa 66 | alpn: 67 | - h3 68 | protocol: udp 69 | up: 50 Mbps 70 | down: 100 Mbps 71 | skip-cert-verify: true 72 | - name: meta_tuic_21 73 | server: tuic3.dtku47.xyz 74 | port: 12255 75 | type: tuic 76 | uuid: ed6a538a-6e66-4f21-a769-4b389bb2f3ab 77 | password: dongtaiwang 78 | alpn: 79 | - h3 80 | request-timeout: 8000 81 | udp-relay-mode: native 82 | congestion-controller: bbr 83 | - name: meta_hysteria2_31 84 | type: hysteria2 85 | server: 108.181.22.205 86 | port: 10194 87 | password: 87dc8c2e 88 | sni: www.bing.com 89 | skip-cert-verify: true 90 | - name: meta_hysteria_41 91 | type: hysteria 92 | server: www.dtku46.xyz 93 | port: 11223 94 | auth-str: mqoE9qSoyMFa 95 | alpn: 96 | - h3 97 | protocol: udp 98 | up: 50 Mbps 99 | down: 100 Mbps 100 | skip-cert-verify: true 101 | - name: meta_hysteria2_51 102 | type: hysteria2 103 | server: 108.181.22.205 104 | port: 10194 105 | password: 87dc8c2e 106 | sni: www.bing.com 107 | skip-cert-verify: true 108 | - name: meta_hysteria_61 109 | type: hysteria 110 | server: hy2.dtku47.xyz 111 | port: 15566 112 | auth-str: jQrGpwSqp34P 113 | alpn: 114 | - h3 115 | protocol: udp 116 | up: 50 Mbps 117 | down: 100 Mbps 118 | - name: meta_hysteria_71 119 | type: hysteria 120 | server: clash1.dtku47.xyz 121 | port: 11223 122 | auth-str: O5tQQiW2xKf5 123 | alpn: 124 | - h3 125 | protocol: udp 126 | up: 50 Mbps 127 | down: 100 Mbps 128 | - name: meta_hysteria_81 129 | type: hysteria 130 | server: hy2.dtku47.xyz 131 | port: 15566 132 | auth-str: jQrGpwSqp34P 133 | alpn: 134 | - h3 135 | protocol: udp 136 | up: 50 Mbps 137 | down: 100 Mbps 138 | - name: meta_hysteria_91 139 | type: hysteria 140 | server: hy1.dtku47.xyz 141 | port: 22334 142 | auth-str: lASdKzWK0VxL 143 | alpn: 144 | - h3 145 | protocol: udp 146 | up: 50 Mbps 147 | down: 100 Mbps 148 | - name: meta_hysteria_101 149 | type: hysteria 150 | server: hy2.dtku47.xyz 151 | port: 15566 152 | auth-str: jQrGpwSqp34P 153 | alpn: 154 | - h3 155 | protocol: udp 156 | up: 50 Mbps 157 | down: 100 Mbps 158 | - name: meta_hysteria_111 159 | type: hysteria 160 | server: hy1.dtku47.xyz 161 | port: 22334 162 | auth-str: lASdKzWK0VxL 163 | alpn: 164 | - h3 165 | protocol: udp 166 | up: 50 Mbps 167 | down: 100 Mbps 168 | - name: meta_hysteria_121 169 | type: hysteria 170 | server: 108.181.22.239 171 | port: 17727 172 | sni: youku.com 173 | skip-cert-verify: true 174 | alpn: 175 | - h3 176 | protocol: udp 177 | auth_str: 7YxfKsXdTnB226S8j4OjaA9M0nLcXATvgnXhVJbCRG7e9KKU7i 178 | up: 11 179 | down: 55 180 | - name: meta_hysteria_131 181 | type: hysteria 182 | server: www.dtku50.xyz 183 | port: 43250 184 | sni: bing.com 185 | skip-cert-verify: true 186 | alpn: 187 | - h3 188 | protocol: udp 189 | auth_str: 2S9M5Gs0pgRsaTObNghoLZx6wPkBJOGTFWvf4R06Us5hUNtfr7 190 | up: 2 191 | down: 10 192 | - name: meta_vless_141 193 | type: vless 194 | server: 45.150.165.61 195 | port: 25678 196 | udp: true 197 | uuid: 34f36b97-1fb7-41f3-8db4-912cc69e724a 198 | tls: true 199 | servername: itunes.apple.com 200 | flow: xtls-rprx-vision 201 | network: tcp 202 | reality-opts: 203 | public-key: sJsSZcA2DyAHDTcoe8Utbz9JaXJPMVmtHmiXxWmcExc 204 | client-fingerprint: chrome 205 | - name: meta_hysteria_151 206 | type: hysteria 207 | server: www3.dtku49.xyz 208 | port: 58693 209 | sni: bing.com 210 | skip-cert-verify: true 211 | alpn: 212 | - h3 213 | protocol: udp 214 | auth_str: nbdyVMqucpFMmyRiwcRQFI7EeKzJWjPYuks3ZzEhCv6HjeZvbh 215 | up: 11 216 | down: 55 217 | - name: hysteria_0 218 | type: hysteria 219 | server: 167.160.91.115 220 | port: 13928 221 | ports: 13928 222 | auth_str: BF0LL4L2jlqSdW3KxjQv81AiFFjj90vWRHeUoqUuTVPeDAGvq3 223 | up: 80 224 | down: 100 225 | fast-open: true 226 | protocol: udp 227 | sni: paypal.com 228 | skip-cert-verify: true 229 | alpn: 230 | - h3 231 | - name: hysteria_1 232 | type: hysteria 233 | server: 173.234.25.52 234 | port: 20164 235 | ports: 20164 236 | auth_str: Ljg6NNEATDqP97hdAdHe1lJv7ggtKc0h7zmCCZKCX3qY0LR64F 237 | up: 80 238 | down: 100 239 | fast-open: true 240 | protocol: udp 241 | sni: www.microsoft.com 242 | skip-cert-verify: true 243 | alpn: 244 | - h3 245 | - name: hysteria_2 246 | type: hysteria 247 | server: 173.234.25.52 248 | port: 20164 249 | ports: 20164 250 | auth_str: Ljg6NNEATDqP97hdAdHe1lJv7ggtKc0h7zmCCZKCX3qY0LR64F 251 | up: 80 252 | down: 100 253 | fast-open: true 254 | protocol: udp 255 | sni: www.microsoft.com 256 | skip-cert-verify: true 257 | alpn: 258 | - h3 259 | - name: hysteria_3 260 | type: hysteria 261 | server: 51.158.54.46 262 | port: 11926 263 | ports: 11926 264 | auth_str: Trz2alKwzCImRAXI3nXfpo1ylpHfqOL8s1vageWKoyjjvWeMVs 265 | up: 80 266 | down: 100 267 | fast-open: true 268 | protocol: udp 269 | sni: youku.com 270 | skip-cert-verify: true 271 | alpn: 272 | - h3 273 | - name: hysteria2_0 274 | type: hysteria2 275 | server: 108.181.22.155 276 | port: 17965 277 | password: 4f58555f 278 | fast-open: true 279 | sni: www.bing.com 280 | skip-cert-verify: true 281 | - name: hysteria2_1 282 | type: hysteria2 283 | server: 167.160.90.252 284 | port: 60930 285 | password: fc4488ef 286 | fast-open: true 287 | sni: www.bing.com 288 | skip-cert-verify: true 289 | - name: hysteria2_2 290 | type: hysteria2 291 | server: www2.dtku49.xyz 292 | port: 54406 293 | password: ebcbb37b 294 | fast-open: true 295 | sni: www.bing.com 296 | skip-cert-verify: true 297 | - name: hysteria2_3 298 | type: hysteria2 299 | server: www.dtku48.xyz 300 | port: 56411 301 | password: dongtaiwang.com 302 | fast-open: true 303 | sni: www.bing.com 304 | skip-cert-verify: true 305 | proxy-groups: 306 | - name: 节点选择 307 | type: select 308 | proxies: 309 | - 油管-绵阿羊 310 | - WARP 311 | - 自动选择 312 | - 负载均衡 313 | - 手动选择 314 | - DIRECT 315 | - name: WARP前置节点 316 | type: select 317 | proxies: 318 | - 自动选择 319 | - 负载均衡 320 | - 手动选择 321 | - name: 自动选择 322 | type: url-test 323 | url: http://www.gstatic.com/generate_204 324 | interval: 300 325 | tolerance: 50 326 | proxies: 327 | - 油管-绵阿羊 328 | - meta_hysteria2_01 329 | - meta_hysteria_11 330 | - meta_tuic_21 331 | - meta_hysteria2_31 332 | - meta_hysteria_41 333 | - meta_hysteria2_51 334 | - meta_hysteria_61 335 | - meta_hysteria_71 336 | - meta_hysteria_81 337 | - meta_hysteria_91 338 | - meta_hysteria_101 339 | - meta_hysteria_111 340 | - meta_hysteria_121 341 | - meta_hysteria_131 342 | - meta_vless_141 343 | - meta_hysteria_151 344 | - hysteria_0 345 | - hysteria_1 346 | - hysteria_2 347 | - hysteria_3 348 | - hysteria2_0 349 | - hysteria2_1 350 | - hysteria2_2 351 | - hysteria2_3 352 | - name: 手动选择 353 | type: select 354 | proxies: 355 | - 油管-绵阿羊 356 | - meta_hysteria2_01 357 | - meta_hysteria_11 358 | - meta_tuic_21 359 | - meta_hysteria2_31 360 | - meta_hysteria_41 361 | - meta_hysteria2_51 362 | - meta_hysteria_61 363 | - meta_hysteria_71 364 | - meta_hysteria_81 365 | - meta_hysteria_91 366 | - meta_hysteria_101 367 | - meta_hysteria_111 368 | - meta_hysteria_121 369 | - meta_hysteria_131 370 | - meta_vless_141 371 | - meta_hysteria_151 372 | - hysteria_0 373 | - hysteria_1 374 | - hysteria_2 375 | - hysteria_3 376 | - hysteria2_0 377 | - hysteria2_1 378 | - hysteria2_2 379 | - hysteria2_3 380 | - name: 负载均衡 381 | type: load-balance 382 | proxies: 383 | - 油管-绵阿羊 384 | - meta_hysteria2_01 385 | - meta_hysteria_11 386 | - meta_tuic_21 387 | - meta_hysteria2_31 388 | - meta_hysteria_41 389 | - meta_hysteria2_51 390 | - meta_hysteria_61 391 | - meta_hysteria_71 392 | - meta_hysteria_81 393 | - meta_hysteria_91 394 | - meta_hysteria_101 395 | - meta_hysteria_111 396 | - meta_hysteria_121 397 | - meta_hysteria_131 398 | - meta_vless_141 399 | - meta_hysteria_151 400 | - hysteria_0 401 | - hysteria_1 402 | - hysteria_2 403 | - hysteria_3 404 | - hysteria2_0 405 | - hysteria2_1 406 | - hysteria2_2 407 | - hysteria2_3 408 | url: http://www.gstatic.com/generate_204 409 | interval: 300 410 | strategy: round-robin 411 | rules: 412 | - DOMAIN,clash.razord.top,DIRECT 413 | - DOMAIN,yacd.haishan.me,DIRECT 414 | - GEOIP,LAN,DIRECT 415 | - GEOIP,CN,DIRECT 416 | - MATCH,节点选择 417 | -------------------------------------------------------------------------------- /ChromeGo/clashMeta/ip_0.yaml: -------------------------------------------------------------------------------- 1 | secret: dongtaiwang.com 2 | mixed-port: 7890 3 | allow-lan: false 4 | log-level: info 5 | dns: 6 | enabled: true 7 | nameserver: 8 | - 119.29.29.29 9 | - 223.5.5.5 10 | fallback: 11 | - 8.8.8.8 12 | - 8.8.4.4 13 | - tls://1.0.0.1:853 14 | - tls://dns.google:853 15 | proxies: 16 | - name: ip 17 | type: hysteria 18 | server: hy2.dtku47.xyz 19 | port: 15566 20 | auth-str: jQrGpwSqp34P 21 | alpn: 22 | - h3 23 | protocol: udp 24 | up: "50 Mbps" 25 | down: "100 Mbps" 26 | proxy-groups: 27 | - name: 🚀 节点选择 28 | type: select 29 | proxies: 30 | - ♻️ 自动选择 31 | - DIRECT 32 | - ip 33 | - name: ♻️ 自动选择 34 | type: url-test 35 | url: http://www.gstatic.com/generate_204 36 | interval: 300 37 | tolerance: 50 38 | proxies: 39 | - ip 40 | - name: 🌍 国外媒体 41 | type: select 42 | proxies: 43 | - 🚀 节点选择 44 | - ♻️ 自动选择 45 | - 🎯 全球直连 46 | - ip 47 | - name: 📲 电报信息 48 | type: select 49 | proxies: 50 | - 🚀 节点选择 51 | - 🎯 全球直连 52 | - ip 53 | - name: Ⓜ️ 微软服务 54 | type: select 55 | proxies: 56 | - 🎯 全球直连 57 | - 🚀 节点选择 58 | - ip 59 | - name: 🍎 苹果服务 60 | type: select 61 | proxies: 62 | - 🚀 节点选择 63 | - 🎯 全球直连 64 | - ip 65 | - name: 🎯 全球直连 66 | type: select 67 | proxies: 68 | - DIRECT 69 | - 🚀 节点选择 70 | - ♻️ 自动选择 71 | - name: 🛑 全球拦截 72 | type: select 73 | proxies: 74 | - REJECT 75 | - DIRECT 76 | - name: 🍃 应用净化 77 | type: select 78 | proxies: 79 | - REJECT 80 | - DIRECT 81 | - name: 🐟 漏网之鱼 82 | type: select 83 | proxies: 84 | - 🚀 节点选择 85 | - 🎯 全球直连 86 | - ♻️ 自动选择 87 | - ip 88 | 89 | rules: 90 | - MATCH,🚀 节点选择 91 | -------------------------------------------------------------------------------- /ChromeGo/clashMeta/ip_1.yaml: -------------------------------------------------------------------------------- 1 | secret: dongtaiwang.com 2 | mixed-port: 7890 3 | allow-lan: false 4 | log-level: info 5 | dns: 6 | enabled: true 7 | nameserver: 8 | - 119.29.29.29 9 | - 223.5.5.5 10 | fallback: 11 | - 8.8.8.8 12 | - 8.8.4.4 13 | - tls://1.0.0.1:853 14 | - tls://dns.google:853 15 | proxies: 16 | - name: ip 17 | type: hysteria 18 | server: clash1.dtku47.xyz 19 | port: 11223 20 | auth-str: O5tQQiW2xKf5 21 | alpn: 22 | - h3 23 | protocol: udp 24 | up: "50 Mbps" 25 | down: "100 Mbps" 26 | proxy-groups: 27 | - name: 🚀 节点选择 28 | type: select 29 | proxies: 30 | - ♻️ 自动选择 31 | - DIRECT 32 | - ip 33 | - name: ♻️ 自动选择 34 | type: url-test 35 | url: http://www.gstatic.com/generate_204 36 | interval: 300 37 | tolerance: 50 38 | proxies: 39 | - ip 40 | - name: 🌍 国外媒体 41 | type: select 42 | proxies: 43 | - 🚀 节点选择 44 | - ♻️ 自动选择 45 | - 🎯 全球直连 46 | - ip 47 | - name: 📲 电报信息 48 | type: select 49 | proxies: 50 | - 🚀 节点选择 51 | - 🎯 全球直连 52 | - ip 53 | - name: Ⓜ️ 微软服务 54 | type: select 55 | proxies: 56 | - 🎯 全球直连 57 | - 🚀 节点选择 58 | - ip 59 | - name: 🍎 苹果服务 60 | type: select 61 | proxies: 62 | - 🚀 节点选择 63 | - 🎯 全球直连 64 | - ip 65 | - name: 🎯 全球直连 66 | type: select 67 | proxies: 68 | - DIRECT 69 | - 🚀 节点选择 70 | - ♻️ 自动选择 71 | - name: 🛑 全球拦截 72 | type: select 73 | proxies: 74 | - REJECT 75 | - DIRECT 76 | - name: 🍃 应用净化 77 | type: select 78 | proxies: 79 | - REJECT 80 | - DIRECT 81 | - name: 🐟 漏网之鱼 82 | type: select 83 | proxies: 84 | - 🚀 节点选择 85 | - 🎯 全球直连 86 | - ♻️ 自动选择 87 | - ip 88 | 89 | rules: 90 | - MATCH,🚀 节点选择 91 | -------------------------------------------------------------------------------- /ChromeGo/clashMeta/ip_2.yaml: -------------------------------------------------------------------------------- 1 | secret: dongtaiwang.com 2 | mixed-port: 7890 3 | allow-lan: false 4 | log-level: info 5 | dns: 6 | enabled: true 7 | nameserver: 8 | - 119.29.29.29 9 | - 223.5.5.5 10 | fallback: 11 | - 8.8.8.8 12 | - 8.8.4.4 13 | - tls://1.0.0.1:853 14 | - tls://dns.google:853 15 | proxies: 16 | - name: ip 17 | type: hysteria 18 | server: hy2.dtku47.xyz 19 | port: 15566 20 | auth-str: jQrGpwSqp34P 21 | alpn: 22 | - h3 23 | protocol: udp 24 | up: "50 Mbps" 25 | down: "100 Mbps" 26 | proxy-groups: 27 | - name: 🚀 节点选择 28 | type: select 29 | proxies: 30 | - ♻️ 自动选择 31 | - DIRECT 32 | - ip 33 | - name: ♻️ 自动选择 34 | type: url-test 35 | url: http://www.gstatic.com/generate_204 36 | interval: 300 37 | tolerance: 50 38 | proxies: 39 | - ip 40 | - name: 🌍 国外媒体 41 | type: select 42 | proxies: 43 | - 🚀 节点选择 44 | - ♻️ 自动选择 45 | - 🎯 全球直连 46 | - ip 47 | - name: 📲 电报信息 48 | type: select 49 | proxies: 50 | - 🚀 节点选择 51 | - 🎯 全球直连 52 | - ip 53 | - name: Ⓜ️ 微软服务 54 | type: select 55 | proxies: 56 | - 🎯 全球直连 57 | - 🚀 节点选择 58 | - ip 59 | - name: 🍎 苹果服务 60 | type: select 61 | proxies: 62 | - 🚀 节点选择 63 | - 🎯 全球直连 64 | - ip 65 | - name: 🎯 全球直连 66 | type: select 67 | proxies: 68 | - DIRECT 69 | - 🚀 节点选择 70 | - ♻️ 自动选择 71 | - name: 🛑 全球拦截 72 | type: select 73 | proxies: 74 | - REJECT 75 | - DIRECT 76 | - name: 🍃 应用净化 77 | type: select 78 | proxies: 79 | - REJECT 80 | - DIRECT 81 | - name: 🐟 漏网之鱼 82 | type: select 83 | proxies: 84 | - 🚀 节点选择 85 | - 🎯 全球直连 86 | - ♻️ 自动选择 87 | - ip 88 | 89 | rules: 90 | - MATCH,🚀 节点选择 91 | -------------------------------------------------------------------------------- /ChromeGo/clashMeta/ip_3.yaml: -------------------------------------------------------------------------------- 1 | secret: dongtaiwang.com 2 | mixed-port: 7890 3 | allow-lan: false 4 | log-level: info 5 | dns: 6 | enabled: true 7 | nameserver: 8 | - 119.29.29.29 9 | - 223.5.5.5 10 | fallback: 11 | - 8.8.8.8 12 | - 8.8.4.4 13 | - tls://1.0.0.1:853 14 | - tls://dns.google:853 15 | proxies: 16 | - name: ip 17 | type: hysteria 18 | server: hy2.dtku47.xyz 19 | port: 15566 20 | auth-str: jQrGpwSqp34P 21 | alpn: 22 | - h3 23 | protocol: udp 24 | up: "50 Mbps" 25 | down: "100 Mbps" 26 | proxy-groups: 27 | - name: 🚀 节点选择 28 | type: select 29 | proxies: 30 | - ♻️ 自动选择 31 | - DIRECT 32 | - ip 33 | - name: ♻️ 自动选择 34 | type: url-test 35 | url: http://www.gstatic.com/generate_204 36 | interval: 300 37 | tolerance: 50 38 | proxies: 39 | - ip 40 | - name: 🌍 国外媒体 41 | type: select 42 | proxies: 43 | - 🚀 节点选择 44 | - ♻️ 自动选择 45 | - 🎯 全球直连 46 | - ip 47 | - name: 📲 电报信息 48 | type: select 49 | proxies: 50 | - 🚀 节点选择 51 | - 🎯 全球直连 52 | - ip 53 | - name: Ⓜ️ 微软服务 54 | type: select 55 | proxies: 56 | - 🎯 全球直连 57 | - 🚀 节点选择 58 | - ip 59 | - name: 🍎 苹果服务 60 | type: select 61 | proxies: 62 | - 🚀 节点选择 63 | - 🎯 全球直连 64 | - ip 65 | - name: 🎯 全球直连 66 | type: select 67 | proxies: 68 | - DIRECT 69 | - 🚀 节点选择 70 | - ♻️ 自动选择 71 | - name: 🛑 全球拦截 72 | type: select 73 | proxies: 74 | - REJECT 75 | - DIRECT 76 | - name: 🍃 应用净化 77 | type: select 78 | proxies: 79 | - REJECT 80 | - DIRECT 81 | - name: 🐟 漏网之鱼 82 | type: select 83 | proxies: 84 | - 🚀 节点选择 85 | - 🎯 全球直连 86 | - ♻️ 自动选择 87 | - ip 88 | 89 | rules: 90 | - MATCH,🚀 节点选择 91 | -------------------------------------------------------------------------------- /ChromeGo/clashMeta/ip_4.yaml: -------------------------------------------------------------------------------- 1 | secret: dongtaiwang.com 2 | mixed-port: 7890 3 | allow-lan: false 4 | log-level: info 5 | dns: 6 | enabled: true 7 | nameserver: 8 | - 119.29.29.29 9 | - 223.5.5.5 10 | fallback: 11 | - 8.8.8.8 12 | - 8.8.4.4 13 | - tls://1.0.0.1:853 14 | - tls://dns.google:853 15 | proxies: 16 | - name: ip 17 | type: hysteria 18 | server: hy1.dtku47.xyz 19 | port: 22334 20 | auth-str: lASdKzWK0VxL 21 | alpn: 22 | - h3 23 | protocol: udp 24 | up: "50 Mbps" 25 | down: "100 Mbps" 26 | proxy-groups: 27 | - name: 🚀 节点选择 28 | type: select 29 | proxies: 30 | - ♻️ 自动选择 31 | - DIRECT 32 | - ip 33 | - name: ♻️ 自动选择 34 | type: url-test 35 | url: http://www.gstatic.com/generate_204 36 | interval: 300 37 | tolerance: 50 38 | proxies: 39 | - ip 40 | - name: 🌍 国外媒体 41 | type: select 42 | proxies: 43 | - 🚀 节点选择 44 | - ♻️ 自动选择 45 | - 🎯 全球直连 46 | - ip 47 | - name: 📲 电报信息 48 | type: select 49 | proxies: 50 | - 🚀 节点选择 51 | - 🎯 全球直连 52 | - ip 53 | - name: Ⓜ️ 微软服务 54 | type: select 55 | proxies: 56 | - 🎯 全球直连 57 | - 🚀 节点选择 58 | - ip 59 | - name: 🍎 苹果服务 60 | type: select 61 | proxies: 62 | - 🚀 节点选择 63 | - 🎯 全球直连 64 | - ip 65 | - name: 🎯 全球直连 66 | type: select 67 | proxies: 68 | - DIRECT 69 | - 🚀 节点选择 70 | - ♻️ 自动选择 71 | - name: 🛑 全球拦截 72 | type: select 73 | proxies: 74 | - REJECT 75 | - DIRECT 76 | - name: 🍃 应用净化 77 | type: select 78 | proxies: 79 | - REJECT 80 | - DIRECT 81 | - name: 🐟 漏网之鱼 82 | type: select 83 | proxies: 84 | - 🚀 节点选择 85 | - 🎯 全球直连 86 | - ♻️ 自动选择 87 | - ip 88 | 89 | rules: 90 | - MATCH,🚀 节点选择 91 | 92 | 93 | -------------------------------------------------------------------------------- /ChromeGo/clashMeta/ip_5.yaml: -------------------------------------------------------------------------------- 1 | secret: dongtaiwang.com 2 | mixed-port: 7890 3 | allow-lan: false 4 | log-level: info 5 | dns: 6 | enabled: true 7 | nameserver: 8 | - 119.29.29.29 9 | - 223.5.5.5 10 | fallback: 11 | - 8.8.8.8 12 | - 8.8.4.4 13 | - tls://1.0.0.1:853 14 | - tls://dns.google:853 15 | proxies: 16 | - name: ip 17 | type: hysteria 18 | server: hy1.dtku47.xyz 19 | port: 22334 20 | auth-str: lASdKzWK0VxL 21 | alpn: 22 | - h3 23 | protocol: udp 24 | up: "50 Mbps" 25 | down: "100 Mbps" 26 | proxy-groups: 27 | - name: 🚀 节点选择 28 | type: select 29 | proxies: 30 | - ♻️ 自动选择 31 | - DIRECT 32 | - ip 33 | - name: ♻️ 自动选择 34 | type: url-test 35 | url: http://www.gstatic.com/generate_204 36 | interval: 300 37 | tolerance: 50 38 | proxies: 39 | - ip 40 | - name: 🌍 国外媒体 41 | type: select 42 | proxies: 43 | - 🚀 节点选择 44 | - ♻️ 自动选择 45 | - 🎯 全球直连 46 | - ip 47 | - name: 📲 电报信息 48 | type: select 49 | proxies: 50 | - 🚀 节点选择 51 | - 🎯 全球直连 52 | - ip 53 | - name: Ⓜ️ 微软服务 54 | type: select 55 | proxies: 56 | - 🎯 全球直连 57 | - 🚀 节点选择 58 | - ip 59 | - name: 🍎 苹果服务 60 | type: select 61 | proxies: 62 | - 🚀 节点选择 63 | - 🎯 全球直连 64 | - ip 65 | - name: 🎯 全球直连 66 | type: select 67 | proxies: 68 | - DIRECT 69 | - 🚀 节点选择 70 | - ♻️ 自动选择 71 | - name: 🛑 全球拦截 72 | type: select 73 | proxies: 74 | - REJECT 75 | - DIRECT 76 | - name: 🍃 应用净化 77 | type: select 78 | proxies: 79 | - REJECT 80 | - DIRECT 81 | - name: 🐟 漏网之鱼 82 | type: select 83 | proxies: 84 | - 🚀 节点选择 85 | - 🎯 全球直连 86 | - ♻️ 自动选择 87 | - ip 88 | 89 | rules: 90 | - MATCH,🚀 节点选择 91 | -------------------------------------------------------------------------------- /ChromeGo/get_all_proxies.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | mkdir -p clash 3 | mkdir -p wireguard 4 | 5 | curl -L https://mareep.netlify.app/sub/merged_proxies_new.yaml -o all_merged_proxies.yaml 6 | curl -L https://mareep.netlify.app/sub/merged_warp_proxies_new.yaml -o all_merged_proxies_with_warp.yaml 7 | curl -L https://mareep.netlify.app/sub/shadowrocket_base64.txt -o all_merged_proxies_shadowrocket_nekoray.txt 8 | 9 | 10 | -------------------------------------------------------------------------------- /ChromeGo/hysteria1/ip_0.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": "108.181.22.239:17727", 3 | "protocol": "udp", 4 | "up_mbps": 11, 5 | "down_mbps": 55, 6 | "http": { 7 | "listen": "127.0.0.1:1081", 8 | "timeout" : 250, 9 | "disable_udp": false 10 | }, 11 | "socks5": { 12 | "listen": "127.0.0.1:1080", 13 | "timeout": 250, 14 | "disable_udp": false 15 | }, 16 | "obfs": "", 17 | "auth_str": "7YxfKsXdTnB226S8j4OjaA9M0nLcXATvgnXhVJbCRG7e9KKU7i", 18 | "alpn": "h3", 19 | "server_name": "youku.com", 20 | "insecure": true, 21 | "recv_window_conn": 5767168, 22 | "recv_window": 23068672, 23 | "disable_mtu_discovery": true, 24 | "resolver": "https://223.5.5.5/dns-query", 25 | "retry": 3, 26 | "retry_interval": 3, 27 | "quit_on_disconnect": false, 28 | "handshake_timeout": 15, 29 | "idle_timeout": 30, 30 | "fast_open": true, 31 | "hop_interval": 120 32 | } 33 | -------------------------------------------------------------------------------- /ChromeGo/hysteria1/ip_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": "51.158.54.46:11926", 3 | "protocol": "udp", 4 | "up_mbps": 11, 5 | "down_mbps": 55, 6 | "http": { 7 | "listen": "127.0.0.1:1081", 8 | "timeout" : 300, 9 | "disable_udp": false 10 | }, 11 | "socks5": { 12 | "listen": "127.0.0.1:1080", 13 | "timeout": 300, 14 | "disable_udp": false 15 | }, 16 | "obfs": "", 17 | "auth_str": "Trz2alKwzCImRAXI3nXfpo1ylpHfqOL8s1vageWKoyjjvWeMVs", 18 | "alpn": "h3", 19 | "server_name": "youku.com", 20 | "insecure": true, 21 | "recv_window_conn": 5767168, 22 | "recv_window": 23068672, 23 | "disable_mtu_discovery": true, 24 | "resolver": "https://223.5.5.5/dns-query", 25 | "retry": 3, 26 | "retry_interval": 3, 27 | "quit_on_disconnect": false, 28 | "handshake_timeout": 15, 29 | "idle_timeout": 30, 30 | "fast_open": true, 31 | "hop_interval": 120 32 | } 33 | -------------------------------------------------------------------------------- /ChromeGo/hysteria1/ip_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": "173.234.25.52:20164", 3 | "protocol": "udp", 4 | "up_mbps": 11, 5 | "down_mbps": 55, 6 | "http": { 7 | "listen": "127.0.0.1:1081", 8 | "timeout" : 250, 9 | "disable_udp": false 10 | }, 11 | "socks5": { 12 | "listen": "127.0.0.1:1080", 13 | "timeout": 250, 14 | "disable_udp": false 15 | }, 16 | "obfs": "", 17 | "auth_str": "Ljg6NNEATDqP97hdAdHe1lJv7ggtKc0h7zmCCZKCX3qY0LR64F", 18 | "alpn": "h3", 19 | "server_name": "www.microsoft.com", 20 | "insecure": true, 21 | "recv_window_conn": 5767168, 22 | "recv_window": 23068672, 23 | "disable_mtu_discovery": true, 24 | "resolver": "https://223.5.5.5/dns-query", 25 | "retry": 3, 26 | "retry_interval": 3, 27 | "quit_on_disconnect": false, 28 | "handshake_timeout": 15, 29 | "idle_timeout": 30, 30 | "fast_open": true, 31 | "hop_interval": 120 32 | } 33 | -------------------------------------------------------------------------------- /ChromeGo/hysteria1/ip_3.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": "109.104.152.149:48406", 3 | "protocol": "udp", 4 | "up_mbps": 11, 5 | "down_mbps": 55, 6 | "http": { 7 | "listen": "127.0.0.1:1081", 8 | "timeout" : 300, 9 | "disable_udp": false 10 | }, 11 | "socks5": { 12 | "listen": "127.0.0.1:1080", 13 | "timeout": 300, 14 | "disable_udp": false 15 | }, 16 | "obfs": "", 17 | "auth_str": "xfNhrunYJ9GvDXCTktY2bIwhc1EyeyyAbiUMx1UtBOWgI4cMVB", 18 | "alpn": "h3", 19 | "server_name": "www.amazon.cn", 20 | "insecure": true, 21 | "recv_window_conn": 5767168, 22 | "recv_window": 23068672, 23 | "disable_mtu_discovery": true, 24 | "resolver": "https://223.5.5.5/dns-query", 25 | "retry": 3, 26 | "retry_interval": 3, 27 | "quit_on_disconnect": false, 28 | "handshake_timeout": 15, 29 | "idle_timeout": 30, 30 | "fast_open": true, 31 | "hop_interval": 120 32 | } 33 | -------------------------------------------------------------------------------- /ChromeGo/hysteria2/ip_0.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "server": "108.181.22.155:56091", 4 | "auth": "dongtaiwang.com", 5 | "tls": { 6 | "sni": "www.bing.com", 7 | "insecure": true 8 | }, 9 | "quic": { 10 | "initStreamReceiveWindow": 16777216, 11 | "maxStreamReceiveWindow": 16777216, 12 | "initConnReceiveWindow": 33554432, 13 | "maxConnReceiveWindow": 33554432 14 | }, 15 | "fastOpen": true, 16 | "socks5": { 17 | "listen": "127.0.0.1:1080" 18 | }, 19 | "transport": { 20 | "udp": { 21 | "hopInterval": "30s" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ChromeGo/hysteria2/ip_1.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "server": "www.dtku46.xyz:13579", 4 | "auth": "dongtaiwang.com", 5 | "tls": { 6 | "sni": "www.bing.com", 7 | "insecure": true 8 | }, 9 | "quic": { 10 | "initStreamReceiveWindow": 16777216, 11 | "maxStreamReceiveWindow": 16777216, 12 | "initConnReceiveWindow": 33554432, 13 | "maxConnReceiveWindow": 33554432 14 | }, 15 | "fastOpen": true, 16 | "socks5": { 17 | "listen": "127.0.0.1:1080" 18 | }, 19 | "transport": { 20 | "udp": { 21 | "hopInterval": "30s" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ChromeGo/hysteria2/ip_2.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "server": "108.181.22.155:56091", 4 | "auth": "dongtaiwang.com", 5 | "tls": { 6 | "sni": "www.bing.com", 7 | "insecure": true 8 | }, 9 | "quic": { 10 | "initStreamReceiveWindow": 16777216, 11 | "maxStreamReceiveWindow": 16777216, 12 | "initConnReceiveWindow": 33554432, 13 | "maxConnReceiveWindow": 33554432 14 | }, 15 | "fastOpen": true, 16 | "socks5": { 17 | "listen": "127.0.0.1:1080" 18 | }, 19 | "transport": { 20 | "udp": { 21 | "hopInterval": "30s" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ChromeGo/hysteria2/ip_3.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "server": "www.dtku48.xyz:26458", 4 | "auth": "dongtaiwang.com", 5 | "tls": { 6 | "sni": "www.bing.com", 7 | "insecure": true 8 | }, 9 | "quic": { 10 | "initStreamReceiveWindow": 16777216, 11 | "maxStreamReceiveWindow": 16777216, 12 | "initConnReceiveWindow": 33554432, 13 | "maxConnReceiveWindow": 33554432 14 | }, 15 | "fastOpen": true, 16 | "socks5": { 17 | "listen": "127.0.0.1:1080" 18 | }, 19 | "transport": { 20 | "udp": { 21 | "hopInterval": "30s" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ChromeGo/naiveproxy/ip_0.json: -------------------------------------------------------------------------------- 1 | { 2 | "listen": "socks://127.0.0.1:1080", 3 | "proxy": "https://dongtaiwang.com:dongtaiwang.com@www.dtku48.xyz:443" 4 | } 5 | -------------------------------------------------------------------------------- /ChromeGo/naiveproxy/ip_1.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "listen": "socks://127.0.0.1:1080", 4 | "proxy": "https://dongtaiwang.com:dongtaiwang.com@naive16.cfcdn3.xyz:443" 5 | } 6 | -------------------------------------------------------------------------------- /ChromeGo/singbox/ip_0.json: -------------------------------------------------------------------------------- 1 | { 2 | "inbounds": [ 3 | { 4 | "type": "mixed", 5 | "tag": "mixed-in", 6 | "listen": "::", 7 | "listen_port": 1080, 8 | "sniff": true, 9 | "set_system_proxy": false 10 | } 11 | ], 12 | "outbounds": [ 13 | { 14 | "type": "hysteria", 15 | "tag": "Hysteria-3166", 16 | "server": "www.dtku50.xyz", 17 | "server_port": 28877, 18 | "up_mbps": 50, 19 | "down_mbps": 100, 20 | "auth_str": "y6Sf5xTFyNx5", 21 | "tls": { 22 | "enabled": true, 23 | "server_name": "www.dtku50.xyz", 24 | "alpn": [ 25 | "h3" 26 | ] 27 | 28 | } 29 | } 30 | ] 31 | 32 | } 33 | -------------------------------------------------------------------------------- /ChromeGo/singbox/ip_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "inbounds": [ 3 | { 4 | "type": "mixed", 5 | "tag": "mixed-in", 6 | "listen": "::", 7 | "listen_port": 1080, 8 | "sniff": true, 9 | "set_system_proxy": false 10 | } 11 | ], 12 | "outbounds": [ 13 | { 14 | "type": "tuic", 15 | "tag": "tuic-6132", 16 | "server": "sing2.dtku47.xyz", 17 | "server_port": 55667, 18 | "uuid": "2dca51f2-8968-479b-b086-4a62269f3f37", 19 | "password": "dongtaiwang", 20 | "congestion_control": "bbr", 21 | "udp_relay_mode": "native", 22 | "zero_rtt_handshake": false, 23 | "heartbeat": "10s", 24 | "tls": { 25 | "enabled": true, 26 | "server_name": "sing2.dtku47.xyz", 27 | "alpn": [ 28 | "h3" 29 | ] 30 | 31 | } 32 | } 33 | ] 34 | 35 | } 36 | -------------------------------------------------------------------------------- /ChromeGo/xray/ip_0.json: -------------------------------------------------------------------------------- 1 | { 2 | "log": { 3 | "access": "", 4 | "error": "", 5 | "loglevel": "warning" 6 | }, 7 | "inbounds": [ 8 | { 9 | "tag": "socks", 10 | "port": 1080, 11 | "listen": "127.0.0.1", 12 | "protocol": "socks", 13 | "sniffing": { 14 | "enabled": true, 15 | "destOverride": [ 16 | "http", 17 | "tls" 18 | ], 19 | "routeOnly": false 20 | }, 21 | "settings": { 22 | "auth": "noauth", 23 | "udp": true, 24 | "allowTransparent": false 25 | } 26 | }, 27 | { 28 | "tag": "http", 29 | "port": 1081, 30 | "listen": "127.0.0.1", 31 | "protocol": "http", 32 | "sniffing": { 33 | "enabled": true, 34 | "destOverride": [ 35 | "http", 36 | "tls" 37 | ], 38 | "routeOnly": false 39 | }, 40 | "settings": { 41 | "auth": "noauth", 42 | "udp": true, 43 | "allowTransparent": false 44 | } 45 | } 46 | ], 47 | "outbounds": [ 48 | { 49 | "tag": "proxy", 50 | "protocol": "vless", 51 | "settings": { 52 | "vnext": [ 53 | { 54 | "address": "dongtaiwang3.com", 55 | "port": 443, 56 | "users": [ 57 | { 58 | "id": "0773256c-d020-436d-afea-6eee7cb6c872", 59 | "alterId": 0, 60 | "email": "t@t.tt", 61 | "security": "auto", 62 | "encryption": "none", 63 | "flow": "" 64 | } 65 | ] 66 | } 67 | ] 68 | }, 69 | "streamSettings": { 70 | "network": "ws", 71 | "security": "tls", 72 | "tlsSettings": { 73 | "allowInsecure": false, 74 | "serverName": "xray1.freegradely.xyz", 75 | "fingerprint": "chrome", 76 | "show": false 77 | }, 78 | "wsSettings": { 79 | "path": "/bodhws", 80 | "headers": { 81 | "Host": "xray1.freegradely.xyz" 82 | } 83 | } 84 | }, 85 | "mux": { 86 | "enabled": false, 87 | "concurrency": -1 88 | } 89 | }, 90 | { 91 | "tag": "direct", 92 | "protocol": "freedom", 93 | "settings": {} 94 | }, 95 | { 96 | "tag": "block", 97 | "protocol": "blackhole", 98 | "settings": { 99 | "response": { 100 | "type": "http" 101 | } 102 | } 103 | } 104 | ], 105 | "routing": { 106 | "domainStrategy": "AsIs", 107 | "rules": [ 108 | { 109 | "type": "field", 110 | "inboundTag": [ 111 | "api" 112 | ], 113 | "outboundTag": "api", 114 | "enabled": true 115 | }, 116 | { 117 | "id": "4903912855803990739", 118 | "type": "field", 119 | "outboundTag": "direct", 120 | "domain": [ 121 | "domain:example-example.com", 122 | "domain:example-example2.com" 123 | ], 124 | "enabled": true 125 | }, 126 | { 127 | "id": "5708028511442260423", 128 | "type": "field", 129 | "outboundTag": "block", 130 | "domain": [ 131 | "geosite:category-ads-all" 132 | ], 133 | "enabled": true 134 | }, 135 | { 136 | "id": "5285280340381945458", 137 | "type": "field", 138 | "outboundTag": "direct", 139 | "domain": [ 140 | "geosite:cn" 141 | ], 142 | "enabled": true 143 | }, 144 | { 145 | "id": "5063426339087196734", 146 | "type": "field", 147 | "outboundTag": "direct", 148 | "ip": [ 149 | "geoip:private", 150 | "geoip:cn" 151 | ], 152 | "enabled": true 153 | }, 154 | { 155 | "id": "4919950405029472934", 156 | "type": "field", 157 | "port": "0-65535", 158 | "outboundTag": "proxy", 159 | "enabled": true 160 | } 161 | ] 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /ChromeGo/xray/ip_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "log": { 3 | "access": "", 4 | "error": "", 5 | "loglevel": "warning" 6 | }, 7 | "inbounds": [ 8 | { 9 | "tag": "socks", 10 | "port": 1080, 11 | "listen": "127.0.0.1", 12 | "protocol": "socks", 13 | "sniffing": { 14 | "enabled": true, 15 | "destOverride": [ 16 | "http", 17 | "tls" 18 | ], 19 | "routeOnly": false 20 | }, 21 | "settings": { 22 | "auth": "noauth", 23 | "udp": true, 24 | "allowTransparent": false 25 | } 26 | }, 27 | { 28 | "tag": "http", 29 | "port": 1081, 30 | "listen": "127.0.0.1", 31 | "protocol": "http", 32 | "sniffing": { 33 | "enabled": true, 34 | "destOverride": [ 35 | "http", 36 | "tls" 37 | ], 38 | "routeOnly": false 39 | }, 40 | "settings": { 41 | "auth": "noauth", 42 | "udp": true, 43 | "allowTransparent": false 44 | } 45 | } 46 | ], 47 | "outbounds": [ 48 | { 49 | "tag": "proxy", 50 | "protocol": "vless", 51 | "settings": { 52 | "vnext": [ 53 | { 54 | "address": "109.104.152.156", 55 | "port": 16717, 56 | "users": [ 57 | { 58 | "id": "a2971a3e-d013-47b2-93c8-2ff2a4bcff2a", 59 | "alterId": 0, 60 | "email": "t@t.tt", 61 | "security": "auto", 62 | "encryption": "none", 63 | "flow": "xtls-rprx-vision" 64 | } 65 | ] 66 | } 67 | ] 68 | }, 69 | "streamSettings": { 70 | "network": "tcp", 71 | "security": "reality", 72 | "realitySettings": { 73 | "serverName": "aod.itunes.apple.com", 74 | "fingerprint": "chrome", 75 | "show": false, 76 | "publicKey": "ydGuypY0EPIAxMpi8L-yhWBtjyavZbtwo9JJk2K5G0Y", 77 | "shortId": "6ba85179e30d4fc2", 78 | "spiderX": "" 79 | } 80 | }, 81 | "mux": { 82 | "enabled": false, 83 | "concurrency": -1 84 | } 85 | }, 86 | { 87 | "tag": "direct", 88 | "protocol": "freedom", 89 | "settings": {} 90 | }, 91 | { 92 | "tag": "block", 93 | "protocol": "blackhole", 94 | "settings": { 95 | "response": { 96 | "type": "http" 97 | } 98 | } 99 | } 100 | ], 101 | "routing": { 102 | "domainStrategy": "AsIs", 103 | "rules": [ 104 | { 105 | "type": "field", 106 | "inboundTag": [ 107 | "api" 108 | ], 109 | "outboundTag": "api", 110 | "enabled": true 111 | }, 112 | { 113 | "id": "4903912855803990739", 114 | "type": "field", 115 | "outboundTag": "direct", 116 | "domain": [ 117 | "domain:example-example.com", 118 | "domain:example-example2.com" 119 | ], 120 | "enabled": true 121 | }, 122 | { 123 | "id": "5708028511442260423", 124 | "type": "field", 125 | "outboundTag": "block", 126 | "domain": [ 127 | "geosite:category-ads-all" 128 | ], 129 | "enabled": true 130 | }, 131 | { 132 | "id": "5285280340381945458", 133 | "type": "field", 134 | "outboundTag": "direct", 135 | "domain": [ 136 | "geosite:cn" 137 | ], 138 | "enabled": true 139 | }, 140 | { 141 | "id": "5063426339087196734", 142 | "type": "field", 143 | "outboundTag": "direct", 144 | "ip": [ 145 | "geoip:private", 146 | "geoip:cn" 147 | ], 148 | "enabled": true 149 | }, 150 | { 151 | "id": "4919950405029472934", 152 | "type": "field", 153 | "port": "0-65535", 154 | "outboundTag": "proxy", 155 | "enabled": true 156 | } 157 | ] 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /ChromeGo/xray/ip_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "log": { 3 | "access": "", 4 | "error": "", 5 | "loglevel": "warning" 6 | }, 7 | "inbounds": [ 8 | { 9 | "tag": "socks", 10 | "port": 1080, 11 | "listen": "127.0.0.1", 12 | "protocol": "socks", 13 | "sniffing": { 14 | "enabled": true, 15 | "destOverride": [ 16 | "http", 17 | "tls" 18 | ], 19 | "routeOnly": false 20 | }, 21 | "settings": { 22 | "auth": "noauth", 23 | "udp": true, 24 | "allowTransparent": false 25 | } 26 | }, 27 | { 28 | "tag": "http", 29 | "port": 1081, 30 | "listen": "127.0.0.1", 31 | "protocol": "http", 32 | "sniffing": { 33 | "enabled": true, 34 | "destOverride": [ 35 | "http", 36 | "tls" 37 | ], 38 | "routeOnly": false 39 | }, 40 | "settings": { 41 | "auth": "noauth", 42 | "udp": true, 43 | "allowTransparent": false 44 | } 45 | } 46 | ], 47 | "outbounds": [ 48 | { 49 | "tag": "proxy", 50 | "protocol": "vless", 51 | "settings": { 52 | "vnext": [ 53 | { 54 | "address": "dongtaiwang2.com", 55 | "port": 443, 56 | "users": [ 57 | { 58 | "id": "f5c180eb-fbce-49ac-9029-482eca9385c0", 59 | "alterId": 0, 60 | "email": "t@t.tt", 61 | "security": "auto", 62 | "encryption": "none", 63 | "flow": "" 64 | } 65 | ] 66 | } 67 | ] 68 | }, 69 | "streamSettings": { 70 | "network": "ws", 71 | "security": "tls", 72 | "tlsSettings": { 73 | "allowInsecure": false, 74 | "serverName": "xray1.freeh1.xyz", 75 | "fingerprint": "chrome", 76 | "show": false 77 | }, 78 | "wsSettings": { 79 | "path": "/gzogws", 80 | "headers": { 81 | "Host": "xray1.freeh1.xyz" 82 | } 83 | } 84 | }, 85 | "mux": { 86 | "enabled": false, 87 | "concurrency": -1 88 | } 89 | }, 90 | { 91 | "tag": "direct", 92 | "protocol": "freedom", 93 | "settings": {} 94 | }, 95 | { 96 | "tag": "block", 97 | "protocol": "blackhole", 98 | "settings": { 99 | "response": { 100 | "type": "http" 101 | } 102 | } 103 | } 104 | ], 105 | "routing": { 106 | "domainStrategy": "AsIs", 107 | "rules": [ 108 | { 109 | "type": "field", 110 | "inboundTag": [ 111 | "api" 112 | ], 113 | "outboundTag": "api", 114 | "enabled": true 115 | }, 116 | { 117 | "id": "4903912855803990739", 118 | "type": "field", 119 | "outboundTag": "direct", 120 | "domain": [ 121 | "domain:example-example.com", 122 | "domain:example-example2.com" 123 | ], 124 | "enabled": true 125 | }, 126 | { 127 | "id": "5708028511442260423", 128 | "type": "field", 129 | "outboundTag": "block", 130 | "domain": [ 131 | "geosite:category-ads-all" 132 | ], 133 | "enabled": true 134 | }, 135 | { 136 | "id": "5285280340381945458", 137 | "type": "field", 138 | "outboundTag": "direct", 139 | "domain": [ 140 | "geosite:cn" 141 | ], 142 | "enabled": true 143 | }, 144 | { 145 | "id": "5063426339087196734", 146 | "type": "field", 147 | "outboundTag": "direct", 148 | "ip": [ 149 | "geoip:private", 150 | "geoip:cn" 151 | ], 152 | "enabled": true 153 | }, 154 | { 155 | "id": "4919950405029472934", 156 | "type": "field", 157 | "port": "0-65535", 158 | "outboundTag": "proxy", 159 | "enabled": true 160 | } 161 | ] 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /ChromeGo/xray/ip_3.json: -------------------------------------------------------------------------------- 1 | { 2 | "log": { 3 | "access": "", 4 | "error": "", 5 | "loglevel": "warning" 6 | }, 7 | "inbounds": [ 8 | { 9 | "tag": "socks", 10 | "port": 1080, 11 | "listen": "127.0.0.1", 12 | "protocol": "socks", 13 | "sniffing": { 14 | "enabled": true, 15 | "destOverride": [ 16 | "http", 17 | "tls" 18 | ], 19 | "routeOnly": false 20 | }, 21 | "settings": { 22 | "auth": "noauth", 23 | "udp": true, 24 | "allowTransparent": false 25 | } 26 | }, 27 | { 28 | "tag": "http", 29 | "port": 1081, 30 | "listen": "127.0.0.1", 31 | "protocol": "http", 32 | "sniffing": { 33 | "enabled": true, 34 | "destOverride": [ 35 | "http", 36 | "tls" 37 | ], 38 | "routeOnly": false 39 | }, 40 | "settings": { 41 | "auth": "noauth", 42 | "udp": true, 43 | "allowTransparent": false 44 | } 45 | } 46 | ], 47 | "outbounds": [ 48 | { 49 | "tag": "proxy", 50 | "protocol": "shadowsocks", 51 | "settings": { 52 | "servers": [ 53 | { 54 | "address": "www3.dtku49.xyz", 55 | "method": "2022-blake3-chacha20-poly1305", 56 | "ota": false, 57 | "password": "x3jy8UXDQj6OPEL/MLXqqtPqmidNFNbHzXo91Wd8tiw=", 58 | "port": 10088, 59 | "level": 1 60 | } 61 | ] 62 | }, 63 | "streamSettings": { 64 | "network": "tcp" 65 | }, 66 | "mux": { 67 | "enabled": false, 68 | "concurrency": -1 69 | } 70 | }, 71 | { 72 | "tag": "direct", 73 | "protocol": "freedom", 74 | "settings": {} 75 | }, 76 | { 77 | "tag": "block", 78 | "protocol": "blackhole", 79 | "settings": { 80 | "response": { 81 | "type": "http" 82 | } 83 | } 84 | } 85 | ], 86 | "routing": { 87 | "domainStrategy": "AsIs", 88 | "rules": [ 89 | { 90 | "type": "field", 91 | "inboundTag": [ 92 | "api" 93 | ], 94 | "outboundTag": "api", 95 | "enabled": true 96 | }, 97 | { 98 | "id": "4903912855803990739", 99 | "type": "field", 100 | "outboundTag": "direct", 101 | "domain": [ 102 | "domain:example-example.com", 103 | "domain:example-example2.com" 104 | ], 105 | "enabled": true 106 | }, 107 | { 108 | "id": "5708028511442260423", 109 | "type": "field", 110 | "outboundTag": "block", 111 | "domain": [ 112 | "geosite:category-ads-all" 113 | ], 114 | "enabled": true 115 | }, 116 | { 117 | "id": "5285280340381945458", 118 | "type": "field", 119 | "outboundTag": "direct", 120 | "domain": [ 121 | "geosite:cn" 122 | ], 123 | "enabled": true 124 | }, 125 | { 126 | "id": "5063426339087196734", 127 | "type": "field", 128 | "outboundTag": "direct", 129 | "ip": [ 130 | "geoip:private", 131 | "geoip:cn" 132 | ], 133 | "enabled": true 134 | }, 135 | { 136 | "id": "4919950405029472934", 137 | "type": "field", 138 | "port": "0-65535", 139 | "outboundTag": "proxy", 140 | "enabled": true 141 | } 142 | ] 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /ChromeGo_Merge/GeoLite2-City.mmdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/ChromeGo_Merge/GeoLite2-City.mmdb -------------------------------------------------------------------------------- /ChromeGo_Merge/LICENSE: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | -------------------------------------------------------------------------------- /ChromeGo_Merge/ReadMe.md: -------------------------------------------------------------------------------- 1 | ## 简介 2 | 3 | 油管:[绵阿羊](https://www.youtube.com/channel/UC9xYHJIRj7oXTPYYrTv2U2A) 4 | 5 | ## 注意事项 6 | 7 | 套上warp可绕过chromego封锁的网站(P,X) 8 | 9 | 开启浏览器自带doh以及客户端tun模式也可绕过封锁,参考:[开启chrome自带doh](https://blog.mareep.net/posts/9993/) 10 | 11 | ## 如何修改为自己的warp节点 12 | 13 |
14 | 点击展开/折叠 15 | 16 | 可以用warp+机器人和提取wg节点替换掉配置文件中的wg信息 17 | 18 | [warp提取wireguard网站](https://replit.com/@misaka-blog/wgcf-profile-generator) 19 | 20 | [warp+机器人](https://t.me/generatewarpplusbot) 21 | 22 | 然后本地创建一个yaml文件,参考:[issues #20](https://github.com/vveg26/chromego_merge/issues/20) 23 | 24 |
25 | 26 | ## 订阅链接分享 27 | ### 不套warp版本(clashmeta) 28 | 29 | ``` 30 | https://mareep.netlify.app/sub/merged_proxies_new.yaml 31 | ``` 32 | ### 套warp版本(clashmeta) 33 | 34 | ``` 35 | https://mareep.netlify.app/sub/merged_warp_proxies_new.yaml 36 | ``` 37 | 38 | ### 通用base64链接 (shadowrocket和nekoray系列) 39 | ``` 40 | https://mareep.netlify.app/sub/shadowrocket_base64.txt 41 | ``` 42 | 43 | ### sing-box订阅链接(1.8.0以上) 44 | 45 | ``` 46 | https://mareep.netlify.app/sub/sb.json 47 | ``` 48 | 49 | 50 | ## 客户端推荐 51 | ### Windows 52 | - [clash verge](https://github.com/zzzgydi/clash-verge/releases) 53 | - [nekoray](https://github.com/MatsuriDayo/nekoray) 54 | ### android 55 | - [nekobox](https://github.com/MatsuriDayo/NekoBoxForAndroid) 56 | - [clashmeta for android](https://github.com/MetaCubeX/ClashMetaForAndroid/releases) 57 | 58 | ### ios 59 | - shadowrocket 60 | 61 | ### macos 62 | - [clashx.meta](https://github.com/MetaCubeX/ClashX.Meta/releases) 63 | - [clash verge](https://github.com/zzzgydi/clash-verge/releases) 64 | - shadowrocket 65 | 66 | ## 致谢 67 | - [Alvin9999](https://github.com/Alvin9999/pac2/tree/master) 68 | - [sing-box-subscribe](https://github.com/Toperlock/sing-box-subscribe) 69 | 70 | 区域设置代码截取自: 71 | - [chromegopacs](https://github.com/markbang/chromegopacs) 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /ChromeGo_Merge/merge.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import json 3 | import urllib.request 4 | import yaml 5 | import codecs 6 | import logging 7 | import geoip2.database 8 | import socket 9 | import re 10 | 11 | # 提取节点 12 | def process_urls(url_file, processor): 13 | try: 14 | with open(url_file, 'r') as file: 15 | urls = file.read().splitlines() 16 | 17 | for index, url in enumerate(urls): 18 | try: 19 | response = urllib.request.urlopen(url) 20 | data = response.read().decode('utf-8') 21 | processor(data, index) 22 | except Exception as e: 23 | logging.error(f"Error processing URL {url}: {e}") 24 | except Exception as e: 25 | logging.error(f"Error reading file {url_file}: {e}") 26 | def get_physical_location(address): 27 | address = re.sub(':.*', '', address) # 用正则表达式去除端口部分 28 | try: 29 | ip_address = socket.gethostbyname(address) 30 | except socket.gaierror: 31 | ip_address = address 32 | 33 | try: 34 | reader = geoip2.database.Reader('GeoLite2-City.mmdb') # 这里的路径需要指向你自己的数据库文件 35 | response = reader.city(ip_address) 36 | country = response.country.name 37 | city = response.city.name 38 | #return f"{country}_{city}" 39 | return f"{country}" 40 | except geoip2.errors.AddressNotFoundError as e: 41 | print(f"Error: {e}") 42 | return "Unknown" 43 | #提取clash节点 44 | def process_clash(data, index): 45 | # 解析YAML格式的内容 46 | content = yaml.safe_load(data) 47 | 48 | # 提取proxies部分并合并到merged_proxies中 49 | proxies = content.get('proxies', []) 50 | 51 | for proxy in proxies: 52 | # 如果类型是vless 53 | if proxy['type'] == 'vless' : 54 | server = proxy.get("server", "") 55 | port = int(proxy.get("port", 443)) 56 | udp = proxy.get("udp", "") 57 | uuid = proxy.get("uuid", "") 58 | network = proxy.get("network", "") 59 | tls = int(proxy.get("tls", 0)) 60 | xudp = proxy.get("xudp", "") 61 | sni = proxy.get("servername", "") 62 | flow = proxy.get("flow", "") 63 | publicKey = proxy.get('reality-opts', {}).get('public-key', '') 64 | short_id = proxy.get('reality-opts', {}).get('short-id', '') 65 | fp = proxy.get("client-fingerprint", "") 66 | insecure = int(proxy.get("skip-cert-verify", 0)) 67 | grpc_serviceName = proxy.get('grpc-opts', {}).get('grpc-service-name', '') 68 | 69 | ws_path = proxy.get('ws-opts', {}).get('path', '') 70 | ws_headers_host = proxy.get('ws-opts', {}).get('headers', {}).get('Host', '') 71 | if tls == 0: 72 | security = 'none' 73 | elif tls == 1 and publicKey != '': 74 | security = 'reality' 75 | else: 76 | security = 'tls' 77 | location = get_physical_location(server) 78 | name = f"{location}_vless_{index}" 79 | vless_meta = f"vless://{uuid}@{server}:{port}?security={security}&allowInsecure{insecure}&flow={flow}&type={network}&fp={fp}&pbk={publicKey}&sid={short_id}&sni={sni}&serviceName={grpc_serviceName}&path={ws_path}&host={ws_headers_host}#{name}" 80 | 81 | merged_proxies.append(vless_meta) 82 | 83 | if proxy['type'] == 'vmess' : 84 | server = proxy.get("server", "") 85 | port = int(proxy.get("port", 443)) 86 | uuid = proxy.get("uuid", "") 87 | #cipher = proxy.get("cipher", "") 88 | alterId = proxy.get("alterId", "") 89 | network = proxy.get("network", "") 90 | tls = int(proxy.get("tls", 0)) 91 | if tls == 0: 92 | security = "none" 93 | elif tls == 1: 94 | security = "tls" 95 | sni = proxy.get("servername", "") 96 | ws_path = proxy.get('ws-opts', {}).get('path', '') 97 | ws_headers_host = proxy.get('ws-opts', {}).get('headers', {}).get('Host', '') 98 | location = get_physical_location(server) 99 | name = f"{location}_vmess_{index}" 100 | vmess_meta = f"vmess://{uuid}@{server}:{port}?security={security}&allowInsecure{insecure}&type={network}&fp={fp}&sni={sni}&path={ws_path}&host={ws_headers_host}#{name}" 101 | 102 | merged_proxies.append(vmess_meta) 103 | 104 | elif proxy['type'] == 'tuic': 105 | server = proxy.get("server", "") 106 | port = int(proxy.get("port", 443)) 107 | uuid = proxy.get("uuid", "") 108 | password = proxy.get("password", "") 109 | sni = proxy.get("sni", "") 110 | insecure = int(proxy.get("skip-cert-verify", 0)) 111 | udp_relay_mode = proxy.get("udp-relay-mode", "naive") 112 | congestion = proxy.get("congestion-controller", "bbr") 113 | alpn = proxy.get("alpn", [])[0] if proxy.get("alpn") and len(proxy["alpn"]) > 0 else None 114 | location = get_physical_location(server) 115 | name = f"{location}_tuic_{index}" 116 | #tuic_meta_neko = f"tuic://{server}:{port}?uuid={uuid}&version=5&password={password}&insecure={insecure}&alpn={alpn}&mode={udp_relay_mode}" 117 | tuic_meta = f"tuic://{uuid}:{password}@{server}:{port}?sni={sni}&congestion_control={congestion}&udp_relay_mode={udp_relay_mode}&alpn={alpn}&allow_insecure={insecure}#{name}" 118 | merged_proxies.append(tuic_meta) 119 | 120 | elif proxy['type'] == "hysteria2": 121 | server = proxy.get("server", "") 122 | port = int(proxy.get("port", 443)) 123 | auth = proxy.get("password", "") 124 | obfs = proxy.get("obfs", "") 125 | obfs_password = proxy.get("obfs-password","") 126 | sni = proxy.get("sni", "") 127 | insecure = int(proxy.get("skip-cert-verify", 0)) 128 | location = get_physical_location(server) 129 | name = f"{location}_hy2_{index}" 130 | hy2_meta = f"hysteria2://{auth}@{server}:{port}?insecure={insecure}&sni={sni}&obfs={obfs}&obfs-password={obfs_password}#{name}" 131 | merged_proxies.append(hy2_meta) 132 | 133 | elif proxy['type'] == 'hysteria': 134 | server = proxy.get("server", "") 135 | port = int(proxy.get("port", 443)) 136 | ports = proxy.get("port", "") 137 | protocol = proxy.get("protocol", "udp") 138 | up_mbps = 50 139 | down_mbps = 80 140 | alpn = proxy.get("alpn", [])[0] if proxy.get("alpn") and len(proxy["alpn"]) > 0 else None 141 | obfs = proxy.get("obfs", "") 142 | insecure = int(proxy.get("skip-cert-verify", 0)) 143 | sni = proxy.get("sni", "") 144 | fast_open = int(proxy.get("fast_open", 1)) 145 | auth = proxy.get("auth-str", "") 146 | # 生成URL 147 | location = get_physical_location(server) 148 | name = f"{location}_hy_{index}" 149 | hysteria_meta = f"hysteria://{server}:{port}?peer={sni}&auth={auth}&insecure={insecure}&upmbps={up_mbps}&downmbps={down_mbps}&alpn={alpn}&mport={ports}&obfs={obfs}&protocol={protocol}&fastopen={fast_open}#{name}" 150 | merged_proxies.append(hysteria_meta) 151 | 152 | elif proxy['type'] == 'ssr': 153 | server = proxy.get("server", "") 154 | port = int(proxy.get("port", 443)) 155 | password = proxy.get("password", "") 156 | password = base64.b64encode(password.encode()).decode() 157 | cipher = proxy.get("cipher", "") 158 | obfs = proxy.get("obfs", "") 159 | protocol = proxy.get("protocol", "") 160 | protocol_param = proxy.get("protocol-param", "") 161 | protocol_param = base64.b64encode(protocol_param.encode()).decode() 162 | obfs_param = proxy.get("obfs-param", "") 163 | obfs_param = base64.b64encode(obfs_param.encode()).decode() 164 | # 生成URL 165 | ssr_source=f"{server}:{port}:{protocol}:{cipher}:{obfs}:{password}/?obfsparam={obfs_param}&protoparam={protocol_param}&remarks=ssr_meta_{index}&protoparam{protocol_param}=&obfsparam={obfs_param}" 166 | ssr_source=base64.b64encode(ssr_source.encode()).decode() 167 | ssr_meta = f"ssr://{ssr_source}" 168 | merged_proxies.append(ssr_meta) 169 | #目前仅支持最原始版本ss,无插件支持 170 | elif proxy['type'] == 'sstest': 171 | server = proxy.get("server", "") 172 | port = int(proxy.get("port", 443)) 173 | password = proxy.get("password", "") 174 | cipher = proxy.get("cipher", "") 175 | # 生成URL 176 | ss_source=f"{cipher}:{password}@{server}:{port}" 177 | 178 | ss_source=base64.b64encode(ss_source.encode()).decode() 179 | ss_meta = f"ss://{ss_source}" 180 | merged_proxies.append(ss_meta) 181 | def process_naive(data, index): 182 | try: 183 | json_data = json.loads(data) 184 | 185 | proxy_str = json_data["proxy"] 186 | #proxy_str = proxy_str.replace("https://", "") 187 | naiveproxy = base64.b64encode(proxy_str.encode()).decode() 188 | merged_proxies.append(naiveproxy) 189 | 190 | 191 | except Exception as e: 192 | logging.error(f"Error processing naive data for index {index}: {e}") 193 | #处理sing-box节点,待办 194 | def process_sb(data, index): 195 | try: 196 | json_data = json.loads(data) 197 | # 处理 shadowtls 数据 198 | server = json_data["outbounds"][1].get("server", "") 199 | server_port = json_data["outbounds"][1].get("server_port", "") 200 | method = json_data["outbounds"][0].get("method", "") 201 | password = json_data["outbounds"][0].get("password", "") 202 | version = int(json_data["outbounds"][1].get("version", 0)) 203 | host = json_data["outbounds"][1]["tls"].get("server_name", "") 204 | shadowtls_password = json_data["outbounds"][1].get("password", "") 205 | 206 | ss = f"{method}:{password}@{server}:{server_port}" 207 | shadowtls = f'{{"version": "{version}", "host": "{host}","password":{shadowtls_password}}}' 208 | shadowtls_proxy = "ss://"+base64.b64encode(ss.encode()).decode()+"?shadow-tls="+base64.b64encode(shadowtls.encode()).decode()+f"#shadowtls{index}" 209 | 210 | merged_proxies.append(shadowtls_proxy) 211 | 212 | except Exception as e: 213 | logging.error(f"Error processing shadowtls data for index {index}: {e}") 214 | #hysteria 215 | def process_hysteria(data, index): 216 | try: 217 | json_data = json.loads(data) 218 | # 处理 hysteria 数据 219 | # 提取字段值 220 | server = json_data.get("server", "") 221 | protocol = json_data.get("protocol", "") 222 | up_mbps = json_data.get("up_mbps", "") 223 | down_mbps = json_data.get("down_mbps", "") 224 | alpn = json_data.get("alpn", "") 225 | obfs = json_data.get("obfs", "") 226 | insecure = int(json_data.get("insecure", 0)) 227 | server_name = json_data.get("server_name", "") 228 | fast_open = int(json_data.get("fast_open", 0)) 229 | auth = json_data.get("auth_str", "") 230 | # 生成URL 231 | location = get_physical_location(server) 232 | name = f"{location}_hysteria_{index}" 233 | hysteria = f"hysteria://{server}?peer={server_name}&auth={auth}&insecure={insecure}&upmbps={up_mbps}&downmbps={down_mbps}&alpn={alpn}&obfs={obfs}&protocol={protocol}&fastopen={fast_open}#{name}" 234 | merged_proxies.append(hysteria) 235 | 236 | 237 | except Exception as e: 238 | logging.error(f"Error processing hysteria data for index {index}: {e}") 239 | # 处理hysteria2 240 | def process_hysteria2(data, index): 241 | try: 242 | json_data = json.loads(data) 243 | # 处理 hysteria2 数据 244 | # 提取字段值 245 | server = json_data["server"] 246 | insecure = int(json_data["tls"]["insecure"]) 247 | sni = json_data["tls"]["sni"] 248 | auth = json_data["auth"] 249 | # 生成URL 250 | location = get_physical_location(server) 251 | name = f"{location}_hysteria2_{index}" 252 | hysteria2 = f"hysteria2://{auth}@{server}?insecure={insecure}&sni={sni}#{name}" 253 | 254 | merged_proxies.append(hysteria2) 255 | except Exception as e: 256 | logging.error(f"Error processing hysteria2 data for index {index}: {e}") 257 | 258 | #处理xray 259 | def process_xray(data, index): 260 | try: 261 | json_data = json.loads(data) 262 | # 处理 xray 数据 263 | protocol = json_data["outbounds"][0].get("protocol") 264 | 265 | if protocol == "vless": 266 | vnext = json_data["outbounds"][0]["settings"]["vnext"] 267 | 268 | if vnext: 269 | server = vnext[0].get("address", "") 270 | port = vnext[0].get("port", "") 271 | users = vnext[0]["users"] 272 | 273 | if users: 274 | user = users[0] 275 | uuid = user.get("id", "") 276 | flow = user.get("flow", "") 277 | 278 | stream_settings = json_data["outbounds"][0].get("streamSettings", {}) 279 | network = stream_settings.get("network", "") 280 | security = stream_settings.get("security", "") 281 | reality_settings = stream_settings.get("realitySettings", {}) 282 | 283 | publicKey = reality_settings.get("publicKey", "") 284 | short_id = reality_settings.get("shortId", "") 285 | sni = reality_settings.get("serverName", "") 286 | #tls 287 | tls_settings = stream_settings.get("tlsSettings", {}) 288 | sni = tls_settings.get("serverName", sni) 289 | insecure = int(tls_settings.get("allowInsecure", 0)) 290 | 291 | fp = reality_settings.get("fingerprint", "") 292 | fp = tls_settings.get("fingerprint", fp) 293 | spx = reality_settings.get("spiderX", "") 294 | 295 | grpc_settings = stream_settings.get("grpcSettings", {}) 296 | grpc_serviceName = grpc_settings.get("serviceName", "") 297 | 298 | ws_settings = stream_settings.get("wsSettings", {}) 299 | ws_path = ws_settings.get("path", "") 300 | ws_headers_host = ws_settings.get("headers", {}).get("Host", "") 301 | location = get_physical_location(server) 302 | name = f"{location}_vless_{index}" 303 | xray_proxy = f"vless://{uuid}@{server}:{port}?security={security}&allowInsecure={insecure}&flow={flow}&type={network}&fp={fp}&pbk={publicKey}&sid={short_id}&sni={sni}&serviceName={grpc_serviceName}&path={ws_path}&host={ws_headers_host}#{name}" 304 | 305 | # 将当前proxy字典添加到所有proxies列表中 306 | merged_proxies.append(xray_proxy) 307 | # 不支持插件 308 | if protocol == "shadowsocks": 309 | server = json_data["outbounds"][0]["settings"]["servers"]["address"] 310 | method = json_data["outbounds"][0]["settings"]["servers"]["method"] 311 | password = json_data["outbounds"][0]["settings"]["servers"]["password"] 312 | port = json_data["outbounds"][0]["settings"]["servers"]["port"] 313 | # 生成URL 314 | ss_source=f"{method}:{password}@{server}:{port}" 315 | ss_source=base64.b64encode(ss_source.encode()).decode() 316 | xray_proxy = f"ss://{ss_source}" 317 | 318 | # 将当前proxy字典添加到所有proxies列表中 319 | merged_proxies.append(xray_proxy) 320 | except Exception as e: 321 | logging.error(f"Error processing xray data for index {index}: {e}") 322 | 323 | # 定义一个空列表用于存储合并后的代理配置 324 | merged_proxies = [] 325 | 326 | # 处理 clash URLs 327 | process_urls('./urls/clash_urls.txt', process_clash) 328 | 329 | # 处理 shadowtls URLs 330 | #process_urls('./urls/sb_urls.txt', process_sb) 331 | 332 | # 处理 naive URLs 333 | process_urls('./urls/naiverproxy_urls.txt', process_naive) 334 | 335 | # 处理 hysteria URLs 336 | process_urls('./urls/hysteria_urls.txt', process_hysteria) 337 | 338 | # 处理 hysteria2 URLs 339 | process_urls('./urls/hysteria2_urls.txt', process_hysteria2) 340 | 341 | # 处理 xray URLs 342 | process_urls('./urls/xray_urls.txt', process_xray) 343 | 344 | # 将结果写入文件 345 | merged_content = "\n".join(merged_proxies) 346 | 347 | try: 348 | encoded_content = base64.b64encode(merged_content.encode("utf-8")).decode("utf-8") 349 | 350 | with open("./sub/shadowrocket_base64.txt", "w") as encoded_file: 351 | encoded_file.write(encoded_content) 352 | 353 | print("Content successfully encoded and written to shadowrocket_base64.txt.") 354 | except Exception as e: 355 | print(f"Error encoding and writing to file: {e}") 356 | 357 | -------------------------------------------------------------------------------- /ChromeGo_Merge/meta_merge.py: -------------------------------------------------------------------------------- 1 | import yaml 2 | import json 3 | import urllib.request 4 | import logging 5 | import geoip2.database 6 | import socket 7 | import re 8 | # 提取节点 9 | def process_urls(url_file, processor): 10 | try: 11 | with open(url_file, 'r') as file: 12 | urls = file.read().splitlines() 13 | 14 | for index, url in enumerate(urls): 15 | try: 16 | response = urllib.request.urlopen(url) 17 | data = response.read().decode('utf-8') 18 | processor(data, index) 19 | except Exception as e: 20 | logging.error(f"Error processing URL {url}: {e}") 21 | except Exception as e: 22 | logging.error(f"Error reading file {url_file}: {e}") 23 | #提取clash节点 24 | def process_clash(data, index): 25 | content = yaml.safe_load(data) 26 | proxies = content.get('proxies', []) 27 | for i, proxy in enumerate(proxies): 28 | location = get_physical_location(proxy['server']) 29 | proxy['name'] = f"{location}_{proxy['type']}_{index}{i+1}" 30 | merged_proxies.extend(proxies) 31 | 32 | def get_physical_location(address): 33 | address = re.sub(':.*', '', address) # 用正则表达式去除端口部分 34 | try: 35 | ip_address = socket.gethostbyname(address) 36 | except socket.gaierror: 37 | ip_address = address 38 | 39 | try: 40 | reader = geoip2.database.Reader('GeoLite2-City.mmdb') # 这里的路径需要指向你自己的数据库文件 41 | response = reader.city(ip_address) 42 | country = response.country.name 43 | city = response.city.name 44 | #return f"{country}_{city}" 45 | return f"油管绵阿羊_{country}" 46 | except geoip2.errors.AddressNotFoundError as e: 47 | print(f"Error: {e}") 48 | return "Unknown" 49 | 50 | # 处理sb,待办 51 | def process_sb(data, index): 52 | try: 53 | json_data = json.loads(data) 54 | # 处理 shadowtls 数据 55 | 56 | # 提取所需字段 57 | method = json_data["outbounds"][0]["method"] 58 | password = json_data["outbounds"][0]["password"] 59 | server = json_data["outbounds"][1]["server"] 60 | server_port = json_data["outbounds"][1]["server_port"] 61 | server_name = json_data["outbounds"][1]["tls"]["server_name"] 62 | shadowtls_password = json_data["outbounds"][1]["password"] 63 | version = json_data["outbounds"][1]["version"] 64 | location = get_physical_location(server) 65 | name = f"{location}_shadowtls_{index}" 66 | # 创建当前网址的proxy字典 67 | proxy = { 68 | "name": name, 69 | "type": "ss", 70 | "server": server, 71 | "port": server_port, 72 | "cipher": method, 73 | "password": password, 74 | "plugin": "shadow-tls", 75 | "client-fingerprint": "chrome", 76 | "plugin-opts": { 77 | "host": server_name, 78 | "password": shadowtls_password, 79 | "version": int(version) 80 | } 81 | } 82 | 83 | # 将当前proxy字典添加到所有proxies列表中 84 | merged_proxies.append(proxy) 85 | 86 | except Exception as e: 87 | logging.error(f"Error processing shadowtls data for index {index}: {e}") 88 | 89 | def process_hysteria(data, index): 90 | try: 91 | json_data = json.loads(data) 92 | # 处理 hysteria 数据 93 | # 提取所需字段 94 | auth = json_data["auth_str"] 95 | server_ports = json_data["server"] 96 | server_ports_slt = server_ports.split(":") 97 | server = server_ports_slt[0] 98 | ports = server_ports_slt[1] 99 | ports_slt = ports.split(",") 100 | server_port = int(ports_slt[0]) 101 | if len(ports_slt) > 1: 102 | mport = ports_slt[1] 103 | else: 104 | mport = server_port 105 | #fast_open = json_data["fast_open"] 106 | fast_open = True 107 | insecure = json_data["insecure"] 108 | server_name = json_data["server_name"] 109 | alpn = json_data["alpn"] 110 | protocol = json_data["protocol"] 111 | location = get_physical_location(server) 112 | name = f"{location}_hy_{index}" 113 | 114 | # 创建当前网址的proxy字典 115 | proxy = { 116 | "name": name, 117 | "type": "hysteria", 118 | "server": server, 119 | "port": server_port, 120 | "ports": mport, 121 | "auth_str": auth, 122 | "up": 80, 123 | "down": 100, 124 | "fast-open": fast_open, 125 | "protocol": protocol, 126 | "sni": server_name, 127 | "skip-cert-verify": insecure, 128 | "alpn": [alpn] 129 | } 130 | 131 | # 将当前proxy字典添加到所有proxies列表中 132 | merged_proxies.append(proxy) 133 | 134 | except Exception as e: 135 | logging.error(f"Error processing hysteria data for index {index}: {e}") 136 | # 处理hysteria2 137 | def process_hysteria2(data, index): 138 | try: 139 | json_data = json.loads(data) 140 | # 处理 hysteria2 数据 141 | # 提取所需字段 142 | auth = json_data["auth"] 143 | server_ports = json_data["server"] 144 | server_ports_slt = server_ports.split(":") 145 | server = server_ports_slt[0] 146 | ports = server_ports_slt[1] 147 | ports_slt = ports.split(",") 148 | server_port = int(ports_slt[0]) 149 | #fast_open = json_data["fastOpen"] 150 | fast_open = True 151 | insecure = json_data["tls"]["insecure"] 152 | sni = json_data["tls"]["sni"] 153 | location = get_physical_location(server) 154 | name = f"{location}_hy2_{index}" 155 | 156 | # 创建当前网址的proxy字典 157 | proxy = { 158 | "name": name, 159 | "type": "hysteria2", 160 | "server": server, 161 | "port": server_port, 162 | "password": auth, 163 | "fast-open": fast_open, 164 | "sni": sni, 165 | "skip-cert-verify": insecure 166 | } 167 | 168 | # 将当前proxy字典添加到所有proxies列表中 169 | merged_proxies.append(proxy) 170 | 171 | except Exception as e: 172 | logging.error(f"Error processing hysteria2 data for index {index}: {e}") 173 | 174 | #处理xray 175 | def process_xray(data, index): 176 | try: 177 | json_data = json.loads(data) 178 | # 处理 xray 数据 179 | protocol = json_data["outbounds"][0]["protocol"] 180 | #vless操作 181 | if protocol == "vless": 182 | # 提取所需字段 183 | server = json_data["outbounds"][0]["settings"]["vnext"][0]["address"] 184 | port = json_data["outbounds"][0]["settings"]["vnext"][0]["port"] 185 | uuid = json_data["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] 186 | istls = True 187 | flow = json_data["outbounds"][0]["settings"]["vnext"][0]["users"][0]["flow"] 188 | # 传输方式 189 | network = json_data["outbounds"][0]["streamSettings"]["network"] 190 | publicKey = json_data["outbounds"][0]["streamSettings"]["realitySettings"]["publicKey"] 191 | shortId = json_data["outbounds"][0]["streamSettings"]["realitySettings"]["shortId"] 192 | serverName = json_data["outbounds"][0]["streamSettings"]["realitySettings"]["serverName"] 193 | fingerprint = json_data["outbounds"][0]["streamSettings"]["realitySettings"]["fingerprint"] 194 | # udp转发 195 | isudp = True 196 | location = get_physical_location(server) 197 | name = f"{location}_reality_{index}" 198 | 199 | # 根据network判断tcp 200 | if network == "tcp": 201 | proxy = { 202 | "name": name, 203 | "type": protocol, 204 | "server": server, 205 | "port": port, 206 | "uuid": uuid, 207 | "network": network, 208 | "tls": istls, 209 | "udp": isudp, 210 | "flow": flow, 211 | "client-fingerprint": fingerprint, 212 | "servername": serverName, 213 | "reality-opts":{ 214 | "public-key": publicKey, 215 | "short-id": shortId} 216 | } 217 | 218 | # 根据network判断grpc 219 | elif network == "grpc": 220 | serviceName = json_data["outbounds"][0]["streamSettings"]["grpcSettings"]["serviceName"] 221 | 222 | # 创建当前网址的proxy字典 223 | proxy = { 224 | "name": name, 225 | "type": protocol, 226 | "server": server, 227 | "port": port, 228 | "uuid": uuid, 229 | "network": network, 230 | "tls": istls, 231 | "udp": isudp, 232 | "flow": flow, 233 | "client-fingerprint": fingerprint, 234 | "servername": serverName, 235 | "grpc-opts":{ 236 | "grpc-service-name": serviceName 237 | }, 238 | "reality-opts":{ 239 | "public-key": publicKey, 240 | "short-id": shortId} 241 | } 242 | 243 | # 将当前proxy字典添加到所有proxies列表中 244 | merged_proxies.append(proxy) 245 | except Exception as e: 246 | logging.error(f"Error processing xray data for index {index}: {e}") 247 | 248 | def update_proxy_groups(config_data, merged_proxies): 249 | for group in config_data['proxy-groups']: 250 | if group['name'] in ['自动选择', '节点选择']: 251 | if 'proxies' not in group or not group['proxies']: 252 | group['proxies'] = [proxy['name'] for proxy in merged_proxies] 253 | else: 254 | group['proxies'].extend(proxy['name'] for proxy in merged_proxies) 255 | 256 | def update_warp_proxy_groups(config_warp_data, merged_proxies): 257 | for group in config_warp_data['proxy-groups']: 258 | if group['name'] in ['自动选择', '手动选择', '负载均衡']: 259 | if 'proxies' not in group or not group['proxies']: 260 | group['proxies'] = [proxy['name'] for proxy in merged_proxies] 261 | else: 262 | group['proxies'].extend(proxy['name'] for proxy in merged_proxies) 263 | 264 | # 包含hysteria2 265 | merged_proxies = [] 266 | 267 | # 处理 clash URLs 268 | process_urls('./urls/clash_urls.txt', process_clash) 269 | 270 | # 处理 shadowtls URLs 271 | #process_urls('./urls/sb_urls.txt', process_sb) 272 | 273 | # 处理 hysteria URLs 274 | process_urls('./urls/hysteria_urls.txt', process_hysteria) 275 | 276 | # 处理 hysteria2 URLs 277 | process_urls('./urls/hysteria2_urls.txt', process_hysteria2) 278 | 279 | # 处理 xray URLs 280 | process_urls('./urls/xray_urls.txt', process_xray) 281 | 282 | # 读取普通的配置文件内容 283 | with open('./templates/clash_template.yaml', 'r', encoding='utf-8') as file: 284 | config_data = yaml.safe_load(file) 285 | 286 | # 读取warp配置文件内容 287 | with open('./templates/clash_warp_template.yaml', 'r', encoding='utf-8') as file: 288 | config_warp_data = yaml.safe_load(file) 289 | 290 | # 添加合并后的代理到proxies部分 291 | if 'proxies' not in config_data or not config_data['proxies']: 292 | config_data['proxies'] = merged_proxies 293 | else: 294 | config_data['proxies'].extend(merged_proxies) 295 | 296 | if 'proxies' not in config_warp_data or not config_warp_data['proxies']: 297 | config_warp_data['proxies'] = merged_proxies 298 | else: 299 | config_warp_data['proxies'].extend(merged_proxies) 300 | 301 | 302 | # 更新自动选择和节点选择的proxies的name部分 303 | update_proxy_groups(config_data, merged_proxies) 304 | update_warp_proxy_groups(config_warp_data, merged_proxies) 305 | 306 | # 将更新后的数据写入到一个YAML文件中,并指定编码格式为UTF-8 307 | with open('./sub/merged_proxies_new.yaml', 'w', encoding='utf-8') as file: 308 | yaml.dump(config_data, file, sort_keys=False, allow_unicode=True) 309 | 310 | with open('./sub/merged_warp_proxies_new.yaml', 'w', encoding='utf-8') as file: 311 | yaml.dump(config_warp_data, file, sort_keys=False, allow_unicode=True) 312 | 313 | print("聚合完成") 314 | 315 | 316 | -------------------------------------------------------------------------------- /ChromeGo_Merge/requirements.txt: -------------------------------------------------------------------------------- 1 | PyYAML==6.0.1 2 | geoip2 -------------------------------------------------------------------------------- /ChromeGo_Merge/sb.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | 4 | url = "https://sing-box-subscribe.vercel.app/config/https:/mareep.netlify.app/sub/shadowrocket_base64.txt" 5 | output_folder = "sub" 6 | output_filename = "sb.json" 7 | 8 | # 发送HTTP请求 9 | response = requests.get(url) 10 | 11 | # 检查请求是否成功 12 | if response.status_code == 200: 13 | # 创建输出 14 | # 确保输出文件夹存在 15 | if not os.path.exists(output_folder): 16 | os.makedirs(output_folder) 17 | 18 | # 构建输出文件路径 19 | output_path = os.path.join(output_folder, output_filename) 20 | 21 | # 将响应内容写入文件,使用utf-8编码 22 | with open(output_path, 'w', encoding='utf-8') as file: 23 | file.write(response.text) 24 | 25 | print(f"成功将内容写入 {output_path}") 26 | else: 27 | print(f"HTTP请求失败,状态码: {response.status_code}") 28 | -------------------------------------------------------------------------------- /ChromeGo_Merge/sub/shadowrocket_base64.txt: -------------------------------------------------------------------------------- 1 | aHlzdGVyaWE6Ly8yMDguODcuMjQzLjE1MToxNzU0OT9wZWVyPXd3dy5iaW5nLmNvbSZhdXRoPSZpbnNlY3VyZT0xJnVwbWJwcz01MCZkb3dubWJwcz04MCZhbHBuPWgzJm1wb3J0PTE3NTQ5Jm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI1VuaXRlZCBTdGF0ZXNfaHlfNgpoeXN0ZXJpYTovLzEwOC4xODEuMjQuNzc6MTE1MTI/cGVlcj1hcHBsZS5jb20mYXV0aD1kb25ndGFpd2FuZy5jb20maW5zZWN1cmU9MSZ1cG1icHM9NTAmZG93bm1icHM9ODAmYWxwbj1oMyZtcG9ydD0xMTUxMiZvYmZzPSZwcm90b2NvbD11ZHAmZmFzdG9wZW49MSNVbml0ZWQgU3RhdGVzX2h5XzcKaHlzdGVyaWE6Ly8xODUuMjIuMTU1LjcxOjEwODAzP3BlZXI9d3d3LmJpbmcuY29tJmF1dGg9Jmluc2VjdXJlPTEmdXBtYnBzPTUwJmRvd25tYnBzPTgwJmFscG49aDMmbXBvcnQ9MTA4MDMmb2Jmcz0mcHJvdG9jb2w9dWRwJmZhc3RvcGVuPTEjUnVzc2lhX2h5XzgKaHlzdGVyaWE6Ly8yMDguODcuMjQzLjE1MToxNzU0OT9wZWVyPXd3dy5iaW5nLmNvbSZhdXRoPSZpbnNlY3VyZT0xJnVwbWJwcz01MCZkb3dubWJwcz04MCZhbHBuPWgzJm1wb3J0PTE3NTQ5Jm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI1VuaXRlZCBTdGF0ZXNfaHlfOQphSFIwY0hNNkx5OWtiMjVuZEdGcGQyRnVaeTVqYjIwNlpHOXVaM1JoYVhkaGJtY3VZMjl0UUc1aGFYWmxNak11WTJaalpHNHpMbmg1ZWpvME5ETT0KYUhSMGNITTZMeTlrYjI1bmRHRnBkMkZ1Wnk1amIyMDZaRzl1WjNSaGFYZGhibWN1WTI5dFFHNWhhWFpsTWpRdVkyWmpaRzR6TG5oNWVqbzBORE09Cmh5c3RlcmlhOi8vMTg1LjIyLjE1NS43MToxMDgwMz9wZWVyPWFwcGxlLmNvbSZhdXRoPWRvbmd0YWl3YW5nLmNvbSZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI1J1c3NpYV9oeXN0ZXJpYV8wCmh5c3RlcmlhOi8vMTg1LjIyLjE1NS43MToxMDgwMz9wZWVyPWFwcGxlLmNvbSZhdXRoPWRvbmd0YWl3YW5nLmNvbSZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI1J1c3NpYV9oeXN0ZXJpYV8xCmh5c3RlcmlhOi8vMTg1LjIyLjE1NS43MToxMDgwMz9wZWVyPWFwcGxlLmNvbSZhdXRoPWRvbmd0YWl3YW5nLmNvbSZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI1J1c3NpYV9oeXN0ZXJpYV8yCmh5c3RlcmlhOi8vMTg1LjIyLjE1NS43MToxMDgwMz9wZWVyPWFwcGxlLmNvbSZhdXRoPWRvbmd0YWl3YW5nLmNvbSZpbnNlY3VyZT0xJnVwbWJwcz0xMSZkb3dubWJwcz01NSZhbHBuPWgzJm9iZnM9JnByb3RvY29sPXVkcCZmYXN0b3Blbj0xI1J1c3NpYV9oeXN0ZXJpYV8zCmh5c3RlcmlhMjovL2Rvbmd0YWl3YW5nLmNvbUA0NS4xMjkuMi4xMDg6MzAwMzM/aW5zZWN1cmU9MSZzbmk9d3d3LmJpbmcuY29tI1J1c3NpYV9oeXN0ZXJpYTJfMApoeXN0ZXJpYTI6Ly9kb25ndGFpd2FuZy5jb21ANDYuMTcuNDEuMjE3OjMwMDMzP2luc2VjdXJlPTEmc25pPXd3dy5iaW5nLmNvbSNSdXNzaWFfaHlzdGVyaWEyXzEKaHlzdGVyaWEyOi8vZG9uZ3RhaXdhbmcuY29tQDQ2LjI5LjE2My4xNzE6MzAwMzM/aW5zZWN1cmU9MSZzbmk9d3d3LmJpbmcuY29tI1J1c3NpYV9oeXN0ZXJpYTJfMgpoeXN0ZXJpYTI6Ly9kb25ndGFpd2FuZy5jb21ANDYuMjkuMTYzLjE3MTozMDAzMz9pbnNlY3VyZT0xJnNuaT13d3cuYmluZy5jb20jUnVzc2lhX2h5c3RlcmlhMl8zCnZsZXNzOi8vZWMzMDJkZTQtNmIzZC00ZjAzLWEyMjgtM2M2ZDMwM2VkMzcwQDEuMTYyLjUxLjEwNjozNzg5OD9zZWN1cml0eT1yZWFsaXR5JmFsbG93SW5zZWN1cmU9MCZmbG93PXh0bHMtcnByeC12aXNpb24mdHlwZT10Y3AmZnA9Y2hyb21lJnBiaz12NnVXSkptVkdGUGQwSzA0MFFLM1BKSENiUGM3NGtYRm9RbUFocHUzMGpRJnNpZD1lMTJkN2ZkYiZzbmk9d3d3LnlhaG9vLmNvbSZzZXJ2aWNlTmFtZT0mcGF0aD0maG9zdD0jVGFpd2FuX3ZsZXNzXzAKdmxlc3M6Ly9lYzMwMmRlNC02YjNkLTRmMDMtYTIyOC0zYzZkMzAzZWQzNzBAMS4xNjIuNTEuMTA2OjM3ODk4P3NlY3VyaXR5PXJlYWxpdHkmYWxsb3dJbnNlY3VyZT0wJmZsb3c9eHRscy1ycHJ4LXZpc2lvbiZ0eXBlPXRjcCZmcD1jaHJvbWUmcGJrPXY2dVdKSm1WR0ZQZDBLMDQwUUszUEpIQ2JQYzc0a1hGb1FtQWhwdTMwalEmc2lkPWUxMmQ3ZmRiJnNuaT13d3cueWFob28uY29tJnNlcnZpY2VOYW1lPSZwYXRoPSZob3N0PSNUYWl3YW5fdmxlc3NfMQp2bGVzczovL2VjMzAyZGU0LTZiM2QtNGYwMy1hMjI4LTNjNmQzMDNlZDM3MEAxLjE2Mi41MS4xMDY6Mzc4OTg/c2VjdXJpdHk9cmVhbGl0eSZhbGxvd0luc2VjdXJlPTAmZmxvdz14dGxzLXJwcngtdmlzaW9uJnR5cGU9dGNwJmZwPWNocm9tZSZwYms9djZ1V0pKbVZHRlBkMEswNDBRSzNQSkhDYlBjNzRrWEZvUW1BaHB1MzBqUSZzaWQ9ZTEyZDdmZGImc25pPXd3dy55YWhvby5jb20mc2VydmljZU5hbWU9JnBhdGg9Jmhvc3Q9I1RhaXdhbl92bGVzc18yCnZsZXNzOi8vZWMzMDJkZTQtNmIzZC00ZjAzLWEyMjgtM2M2ZDMwM2VkMzcwQDEuMTYyLjUxLjEwNjozNzg5OD9zZWN1cml0eT1yZWFsaXR5JmFsbG93SW5zZWN1cmU9MCZmbG93PXh0bHMtcnByeC12aXNpb24mdHlwZT10Y3AmZnA9Y2hyb21lJnBiaz12NnVXSkptVkdGUGQwSzA0MFFLM1BKSENiUGM3NGtYRm9RbUFocHUzMGpRJnNpZD1lMTJkN2ZkYiZzbmk9d3d3LnlhaG9vLmNvbSZzZXJ2aWNlTmFtZT0mcGF0aD0maG9zdD0jVGFpd2FuX3ZsZXNzXzM= -------------------------------------------------------------------------------- /ChromeGo_Merge/templates/clash_template.yaml: -------------------------------------------------------------------------------- 1 | port: 7890 2 | allow-lan: true 3 | mode: rule 4 | log-level: info 5 | unified-delay: true 6 | global-client-fingerprint: chrome 7 | dns: 8 | enable: true 9 | listen: :53 10 | ipv6: true 11 | enhanced-mode: fake-ip 12 | fake-ip-range: 198.18.0.1/16 13 | default-nameserver: 14 | - 223.5.5.5 15 | - 8.8.8.8 16 | nameserver: 17 | - https://dns.alidns.com/dns-query 18 | - https://doh.pub/dns-query 19 | fallback: 20 | - https://1.0.0.1/dns-query 21 | - tls://dns.google 22 | fallback-filter: 23 | geoip: true 24 | geoip-code: CN 25 | ipcidr: 26 | - 240.0.0.0/4 27 | proxies: 28 | 29 | proxy-groups: 30 | - name: 节点选择 31 | type: select 32 | proxies: 33 | - 自动选择 34 | - DIRECT 35 | 36 | - name: 自动选择 37 | type: url-test 38 | url: http://www.gstatic.com/generate_204 39 | interval: 300 40 | tolerance: 50 41 | proxies: 42 | 43 | 44 | rules: 45 | - DOMAIN,clash.razord.top,DIRECT 46 | - DOMAIN,yacd.haishan.me,DIRECT 47 | - GEOIP,LAN,DIRECT 48 | - GEOIP,CN,DIRECT 49 | - MATCH,节点选择 -------------------------------------------------------------------------------- /ChromeGo_Merge/templates/clash_warp_template.yaml: -------------------------------------------------------------------------------- 1 | port: 7890 2 | allow-lan: true 3 | mode: rule 4 | log-level: info 5 | unified-delay: true 6 | global-client-fingerprint: chrome 7 | dns: 8 | enable: true 9 | listen: :53 10 | ipv6: true 11 | enhanced-mode: fake-ip 12 | fake-ip-range: 198.18.0.1/16 13 | default-nameserver: 14 | - 223.5.5.5 15 | - 8.8.8.8 16 | nameserver: 17 | - https://dns.alidns.com/dns-query 18 | - https://doh.pub/dns-query 19 | fallback: 20 | - https://1.0.0.1/dns-query 21 | - tls://dns.google 22 | fallback-filter: 23 | geoip: true 24 | geoip-code: CN 25 | ipcidr: 26 | - 240.0.0.0/4 27 | proxies: 28 | 29 | - name: WARP 30 | type: wireguard 31 | server: 162.159.192.1 32 | port: 2408 33 | ip: 172.16.0.2 34 | ipv6: 2606:4700:110:87ad:b400:91:eadb:887f 35 | private-key: wIC19yRRSJkhVJcE09Qo9bE3P3PIwS3yyqyUnjwNO34= 36 | public-key: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo= 37 | udp: true 38 | ip-version: ipv6-prefer 39 | reserved: XiBe 40 | remote-dns-resolve: true 41 | dns: [ 1.1.1.1, 8.8.8.8 ] 42 | dialer-proxy: "WARP前置节点" 43 | 44 | proxy-groups: 45 | - name: 节点选择 46 | type: select 47 | proxies: 48 | - WARP 49 | - 自动选择 50 | - 负载均衡 51 | - 手动选择 52 | - DIRECT 53 | - name: WARP前置节点 54 | type: select 55 | proxies: 56 | - 自动选择 57 | - 负载均衡 58 | - 手动选择 59 | 60 | - name: 自动选择 61 | type: url-test 62 | url: http://www.gstatic.com/generate_204 63 | interval: 300 64 | tolerance: 50 65 | proxies: 66 | 67 | 68 | - name: 手动选择 69 | type: select 70 | proxies: 71 | 72 | 73 | - name: 负载均衡 74 | type: load-balance #负载均衡 75 | proxies: 76 | 77 | url: 'http://www.gstatic.com/generate_204' 78 | interval: 300 79 | #lazy: true 80 | #disable-udp: true 81 | strategy: round-robin #作为前置节点⽤这个⽐较好 82 | 83 | 84 | rules: 85 | - DOMAIN,clash.razord.top,DIRECT 86 | - DOMAIN,yacd.haishan.me,DIRECT 87 | - GEOIP,LAN,DIRECT 88 | - GEOIP,CN,DIRECT 89 | - MATCH,节点选择 90 | -------------------------------------------------------------------------------- /ChromeGo_Merge/urls/clash_urls.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/Alvin9999/pac2/master/clash.meta2/1/config.yaml 2 | https://raw.githubusercontent.com/Alvin9999/pac2/master/clash.meta2/config.yaml 3 | https://raw.githubusercontent.com/Alvin9999/pac2/master/clash.meta2/13/config.yaml 4 | https://raw.githubusercontent.com/Alvin9999/pac2/master/clash.meta2/15/config.yaml 5 | https://raw.githubusercontent.com/Alvin9999/pac2/master/clash.meta2/2/config.yaml 6 | https://raw.githubusercontent.com/Alvin9999/pac2/master/clash.meta2/3/config.yaml 7 | https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/4/config.yaml 8 | https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/1/config.yaml 9 | https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/config.yaml 10 | https://raw.githubusercontent.com/Alvin9999/pac2/master/quick/3/config.yaml 11 | -------------------------------------------------------------------------------- /ChromeGo_Merge/urls/hysteria2_urls.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria2/config.json 2 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria2/1/config.json 3 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria2/2/config.json 4 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria2/13/config.json -------------------------------------------------------------------------------- /ChromeGo_Merge/urls/hysteria_urls.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria/1/config.json 2 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria/13/config.json 3 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria/2/config.json 4 | https://raw.githubusercontent.com/Alvin9999/pac2/master/hysteria/config.json -------------------------------------------------------------------------------- /ChromeGo_Merge/urls/naiverproxy_urls.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/Alvin9999/PAC/master/naiveproxy/1/config.json 2 | https://raw.githubusercontent.com/Alvin9999/PAC/master/naiveproxy/config.json -------------------------------------------------------------------------------- /ChromeGo_Merge/urls/sb_urls.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/Alvin9999/pac2/master/singbox/1/config.json 2 | https://raw.githubusercontent.com/Alvin9999/pac2/master/singbox/config.json -------------------------------------------------------------------------------- /ChromeGo_Merge/urls/ss_urls.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/Alvin9999/pac2/master/ssr-wj/ssconfig.txt 2 | https://raw.githubusercontent.com/Alvin9999/pac2/master/ssr-wj/1/ssconfig.txt -------------------------------------------------------------------------------- /ChromeGo_Merge/urls/xray_urls.txt: -------------------------------------------------------------------------------- 1 | https://raw.githubusercontent.com/Alvin9999/pac2/master/xray/1/config.json 2 | https://raw.githubusercontent.com/Alvin9999/pac2/master/xray/2/config.json 3 | https://raw.githubusercontent.com/Alvin9999/pac2/master/xray/3/config.json 4 | https://raw.githubusercontent.com/Alvin9999/pac2/master/xray/config.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 lgf4591 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /main.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from subprocess import getoutput\n", 10 | "import os" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": null, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "# https://github.com/bannedbook/fanqiang/releases/download/ChromeGo-latest/ChromeGo.7z\n", 20 | "# https://github.com/bannedbook/fanqiang/releases/download/ChromeGo-latest/ChromeGoMac.tar.gz\n", 21 | "# https://github.com/bannedbook/fanqiang/releases/download/ChromeGo-latest/EdgeGo.7z\n", 22 | "# https://github.com/bannedbook/fanqiang/releases/download/ChromeGo-latest/FirefoxFQ.7z\n", 23 | "# https://github.com/bannedbook/fanqiang/releases/download/ChromeGo-latest/FirefoxFqLinux.tar.gz\n", 24 | "\n", 25 | "\n", 26 | "\n", 27 | "\n" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 4, 33 | "metadata": {}, 34 | "outputs": [ 35 | { 36 | "name": "stdout", 37 | "output_type": "stream", 38 | "text": [ 39 | " % Total % Received % Xferd Average Speed Time Time Time Current\n", 40 | " Dload Upload Total Spent Left Speed\n", 41 | "\n", 42 | " 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\n", 43 | " 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\n", 44 | " 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0\n", 45 | " 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0\n", 46 | " 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0\n", 47 | "100 445 100 445 0 0 87 0 0:00:05 0:00:05 --:--:-- 87\n", 48 | "\n", 49 | "{\n", 50 | " \"server\": \"108.181.22.155:56091\",\n", 51 | " \"auth\": \"dongtaiwang.com\",\n", 52 | " \"tls\": {\n", 53 | " \"sni\": \"www.bing.com\",\n", 54 | " \"insecure\": true\n", 55 | " },\n", 56 | " \"quic\": {\n", 57 | " \"initStreamReceiveWindow\": 16777216,\n", 58 | " \"maxStreamReceiveWindow\": 16777216,\n", 59 | " \"initConnReceiveWindow\": 33554432,\n", 60 | " \"maxConnReceiveWindow\": 33554432\n", 61 | " },\n", 62 | " \"fastOpen\": true,\n", 63 | " \"socks5\": {\n", 64 | " \"listen\": \"127.0.0.1:1080\"\n", 65 | " },\n", 66 | " \"transport\": {\n", 67 | " \"udp\": {\n", 68 | " \"hopInterval\": \"30s\"\n", 69 | " }\n", 70 | " }\n", 71 | "}\n" 72 | ] 73 | } 74 | ], 75 | "source": [ 76 | "hysteria2_1=getoutput('curl https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/1/config.json',encoding='utf-8')\n", 77 | "print(hysteria2_1)" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 3, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "import urllib.request\n", 87 | "import json\n", 88 | "\n", 89 | "def curl(url):\n", 90 | " try:\n", 91 | " response = urllib.request.urlopen(url)\n", 92 | " if response.status == 200:\n", 93 | " # 响应状态码为200表示请求成功\n", 94 | " data = response.read().decode('utf-8')\n", 95 | " # json_data = json.loads(data)\n", 96 | " # print(json_data)\n", 97 | " return data\n", 98 | " else:\n", 99 | " print(f'Error: {response.status} {response.reason}')\n", 100 | " except urllib.error.URLError as e:\n", 101 | " print(f'Error: {e.reason}')\n", 102 | "\n", 103 | "# 使用curl函数发送GET请求并解析JSON数据\n", 104 | "# curl('https://api.example.com/data')\n", 105 | "\n", 106 | "# 使用curl函数发送POST请求并处理错误状态码\n", 107 | "# data = {'key1': 'value1', 'key2': 'value2'}\n", 108 | "# curl('https://api.example.com/data', data=data)\n", 109 | "\n", 110 | "# result = curl('https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/1/config.json')\n", 111 | "# print(result)\n" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 5, 117 | "metadata": {}, 118 | "outputs": [ 119 | { 120 | "data": { 121 | "text/plain": [ 122 | "['https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/1/config.json',\n", 123 | " 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/config.json']" 124 | ] 125 | }, 126 | "execution_count": 5, 127 | "metadata": {}, 128 | "output_type": "execute_result" 129 | } 130 | ], 131 | "source": [ 132 | "hysteria1_address = ['https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/1/config.json','https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/config.json']\n", 133 | "\n", 134 | "hysteria1_address\n" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 9, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "data": { 144 | "text/plain": [ 145 | "['{\\n\"server\": \"108.181.22.239:17727\",\\n\"protocol\": \"udp\",\\n\"up_mbps\": 11,\\n\"down_mbps\": 55,\\n\"http\": {\\n\"listen\": \"127.0.0.1:1081\",\\n\"timeout\" : 250,\\n\"disable_udp\": false\\n},\\n\"socks5\": {\\n\"listen\": \"127.0.0.1:1080\",\\n\"timeout\": 250,\\n\"disable_udp\": false\\n},\\n\"obfs\": \"\",\\n\"auth_str\": \"7YxfKsXdTnB226S8j4OjaA9M0nLcXATvgnXhVJbCRG7e9KKU7i\",\\n\"alpn\": \"h3\",\\n\"server_name\": \"youku.com\",\\n\"insecure\": true,\\n\"recv_window_conn\": 5767168,\\n\"recv_window\": 23068672,\\n\"disable_mtu_discovery\": true,\\n\"resolver\": \"https://223.5.5.5/dns-query\",\\n\"retry\": 3,\\n\"retry_interval\": 3,\\n\"quit_on_disconnect\": false,\\n\"handshake_timeout\": 15,\\n\"idle_timeout\": 30,\\n\"fast_open\": true,\\n\"hop_interval\": 120\\n}\\n',\n", 146 | " '{\\n\"server\": \"51.158.54.46:11926\",\\n\"protocol\": \"udp\",\\n\"up_mbps\": 11,\\n\"down_mbps\": 55,\\n\"http\": {\\n\"listen\": \"127.0.0.1:1081\",\\n\"timeout\" : 300,\\n\"disable_udp\": false\\n},\\n\"socks5\": {\\n\"listen\": \"127.0.0.1:1080\",\\n\"timeout\": 300,\\n\"disable_udp\": false\\n},\\n\"obfs\": \"\",\\n\"auth_str\": \"Trz2alKwzCImRAXI3nXfpo1ylpHfqOL8s1vageWKoyjjvWeMVs\",\\n\"alpn\": \"h3\",\\n\"server_name\": \"youku.com\",\\n\"insecure\": true,\\n\"recv_window_conn\": 5767168,\\n\"recv_window\": 23068672,\\n\"disable_mtu_discovery\": true,\\n\"resolver\": \"https://223.5.5.5/dns-query\",\\n\"retry\": 3,\\n\"retry_interval\": 3,\\n\"quit_on_disconnect\": false,\\n\"handshake_timeout\": 15,\\n\"idle_timeout\": 30,\\n\"fast_open\": true,\\n\"hop_interval\": 120\\n}\\n']" 147 | ] 148 | }, 149 | "execution_count": 9, 150 | "metadata": {}, 151 | "output_type": "execute_result" 152 | } 153 | ], 154 | "source": [ 155 | "hysteria1_config = list(map(curl,hysteria1_address))\n", 156 | "hysteria1_config" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 12, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [ 165 | "hysteria1_urls = [\n", 166 | " 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/1/config.json',\n", 167 | " 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/config.json',\n", 168 | " 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/13/config.json',\n", 169 | " 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/2/config.json'\n", 170 | " ]\n", 171 | "hysteria2_urls = [\n", 172 | " 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/1/config.json',\n", 173 | " 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria2/config.json',\n", 174 | " 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/13/config.json',\n", 175 | " 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria2/2/config.json'\n", 176 | "]\n", 177 | "naiveproxy_urls = [\n", 178 | " 'https://www.gitlabip.xyz/Alvin9999/PAC/master/naiveproxy/1/config.json',\n", 179 | " 'https://www.githubip.xyz/Alvin9999/PAC/master/naiveproxy/config.json'\n", 180 | "]\n", 181 | "singbox_urls = [\n", 182 | " 'https://www.gitlabip.xyz/Alvin9999/pac2/master/singbox/1/config.json',\n", 183 | " 'https://www.githubip.xyz/Alvin9999/pac2/master/singbox/config.json'\n", 184 | "]\n", 185 | "\n", 186 | "hysteria1_configs = list(map(curl, hysteria1_urls))\n", 187 | "hysteria2_configs = list(map(curl, hysteria2_urls))\n", 188 | "naiveproxy_configs = list(map(curl, naiveproxy_urls))\n", 189 | "singbox_configs = list(map(curl, singbox_urls))\n", 190 | " \n" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 14, 196 | "metadata": {}, 197 | "outputs": [], 198 | "source": [ 199 | "for (index,config) in enumerate(hysteria1_configs):\n", 200 | " with open(f\"./ChromeGo/hysteria1/ip_{index}.json\", \"w\",encoding=\"utf-8\") as config_file:\n", 201 | " config_file.write(config)" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 16, 207 | "metadata": {}, 208 | "outputs": [ 209 | { 210 | "name": "stdout", 211 | "output_type": "stream", 212 | "text": [ 213 | "Error: Forbidden\n" 214 | ] 215 | } 216 | ], 217 | "source": [ 218 | "vless_node = curl('https://vless-node.lgf4591.workers.dev/0d9163eb-b54f-4144-b7a2-96efda0f4ee7')\n", 219 | "vless_node\n", 220 | "\n" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 15, 226 | "metadata": {}, 227 | "outputs": [ 228 | { 229 | "data": { 230 | "text/plain": [ 231 | "['{\\n \"listen\": \"socks://127.0.0.1:1080\",\\n \"proxy\": \"https://dongtaiwang.com:dongtaiwang.com@www.dtku48.xyz:443\"\\n}\\n',\n", 232 | " '\\n{\\n \"listen\": \"socks://127.0.0.1:1080\",\\n \"proxy\": \"https://dongtaiwang.com:dongtaiwang.com@naive16.cfcdn3.xyz:443\"\\n}\\n']" 233 | ] 234 | }, 235 | "execution_count": 15, 236 | "metadata": {}, 237 | "output_type": "execute_result" 238 | } 239 | ], 240 | "source": [ 241 | "naiveproxy_configs" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 11, 247 | "metadata": {}, 248 | "outputs": [ 249 | { 250 | "name": "stdout", 251 | "output_type": "stream", 252 | "text": [ 253 | "{\n", 254 | "\"server\": \"108.181.22.239:17727\",\n", 255 | "\"protocol\": \"udp\",\n", 256 | "\"up_mbps\": 11,\n", 257 | "\"down_mbps\": 55,\n", 258 | "\"http\": {\n", 259 | "\"listen\": \"127.0.0.1:1081\",\n", 260 | "\"timeout\" : 250,\n", 261 | "\"disable_udp\": false\n", 262 | "},\n", 263 | "\"socks5\": {\n", 264 | "\"listen\": \"127.0.0.1:1080\",\n", 265 | "\"timeout\": 250,\n", 266 | "\"disable_udp\": false\n", 267 | "},\n", 268 | "\"obfs\": \"\",\n", 269 | "\"auth_str\": \"7YxfKsXdTnB226S8j4OjaA9M0nLcXATvgnXhVJbCRG7e9KKU7i\",\n", 270 | "\"alpn\": \"h3\",\n", 271 | "\"server_name\": \"youku.com\",\n", 272 | "\"insecure\": true,\n", 273 | "\"recv_window_conn\": 5767168,\n", 274 | "\"recv_window\": 23068672,\n", 275 | "\"disable_mtu_discovery\": true,\n", 276 | "\"resolver\": \"https://223.5.5.5/dns-query\",\n", 277 | "\"retry\": 3,\n", 278 | "\"retry_interval\": 3,\n", 279 | "\"quit_on_disconnect\": false,\n", 280 | "\"handshake_timeout\": 15,\n", 281 | "\"idle_timeout\": 30,\n", 282 | "\"fast_open\": true,\n", 283 | "\"hop_interval\": 120\n", 284 | "}\n", 285 | "\n" 286 | ] 287 | } 288 | ], 289 | "source": [ 290 | "print(hysteria1_config[0])" 291 | ] 292 | }, 293 | { 294 | "cell_type": "code", 295 | "execution_count": null, 296 | "metadata": {}, 297 | "outputs": [], 298 | "source": [] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 2, 303 | "metadata": {}, 304 | "outputs": [ 305 | { 306 | "data": { 307 | "text/plain": [ 308 | "'电信172.64.135.119\\n电信172.67.107.111\\n电信172.67.31.30\\n\\n联通198.41.209.80\\n联通172.67.72.167\\n联通172.67.132.80\\n\\n移动172.67.68.222\\n移动172.64.138.59\\n移动172.64.202.80\\n'" 309 | ] 310 | }, 311 | "execution_count": 2, 312 | "metadata": {}, 313 | "output_type": "execute_result" 314 | } 315 | ], 316 | "source": [ 317 | "cf_ips = curl('https://raw.githubusercontent.com/Alvin9999/new-pac/master/CloudFlare%E4%BC%98%E8%B4%A8IP')\n", 318 | "cf_ips" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": null, 324 | "metadata": {}, 325 | "outputs": [], 326 | "source": [] 327 | }, 328 | { 329 | "cell_type": "code", 330 | "execution_count": null, 331 | "metadata": {}, 332 | "outputs": [], 333 | "source": [] 334 | }, 335 | { 336 | "cell_type": "code", 337 | "execution_count": null, 338 | "metadata": {}, 339 | "outputs": [], 340 | "source": [] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": null, 345 | "metadata": {}, 346 | "outputs": [], 347 | "source": [] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": null, 352 | "metadata": {}, 353 | "outputs": [], 354 | "source": [] 355 | }, 356 | { 357 | "cell_type": "code", 358 | "execution_count": null, 359 | "metadata": {}, 360 | "outputs": [], 361 | "source": [] 362 | }, 363 | { 364 | "cell_type": "code", 365 | "execution_count": null, 366 | "metadata": {}, 367 | "outputs": [], 368 | "source": [] 369 | }, 370 | { 371 | "cell_type": "code", 372 | "execution_count": null, 373 | "metadata": {}, 374 | "outputs": [], 375 | "source": [] 376 | }, 377 | { 378 | "cell_type": "code", 379 | "execution_count": null, 380 | "metadata": {}, 381 | "outputs": [], 382 | "source": [] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "execution_count": null, 387 | "metadata": {}, 388 | "outputs": [], 389 | "source": [] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "execution_count": null, 394 | "metadata": {}, 395 | "outputs": [], 396 | "source": [] 397 | } 398 | ], 399 | "metadata": { 400 | "kernelspec": { 401 | "display_name": "Python 3", 402 | "language": "python", 403 | "name": "python3" 404 | }, 405 | "language_info": { 406 | "codemirror_mode": { 407 | "name": "ipython", 408 | "version": 3 409 | }, 410 | "file_extension": ".py", 411 | "mimetype": "text/x-python", 412 | "name": "python", 413 | "nbconvert_exporter": "python", 414 | "pygments_lexer": "ipython3", 415 | "version": "3.11.6" 416 | } 417 | }, 418 | "nbformat": 4, 419 | "nbformat_minor": 2 420 | } 421 | -------------------------------------------------------------------------------- /main.ps1: -------------------------------------------------------------------------------- 1 | 2 | python main.py 3 | 4 | python markdown_to_html.py 5 | 6 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | 2 | from subprocess import getoutput 3 | import os 4 | import time 5 | import urllib.request 6 | import json 7 | 8 | 9 | def curl(url): 10 | try: 11 | response = urllib.request.urlopen(url) 12 | if response.status == 200: 13 | # 响应状态码为200表示请求成功 14 | data = response.read().decode('utf-8') 15 | # json_data = json.loads(data) 16 | # print(json_data) 17 | return data 18 | else: 19 | print(f'Error: {response.status} {response.reason}') 20 | except urllib.error.URLError as e: 21 | print(f'Error: {e.reason}') 22 | 23 | # 使用curl函数发送GET请求并解析JSON数据 24 | # curl('https://api.example.com/data') 25 | 26 | # 使用curl函数发送POST请求并处理错误状态码 27 | # data = {'key1': 'value1', 'key2': 'value2'} 28 | # curl('https://api.example.com/data', data=data) 29 | # xx=os.popen('curl www.baidu.com').readlines() # BUG 中文乱码 30 | 31 | 32 | # better_cf_ips = getoutput('curl https://raw.githubusercontent.com/Alvin9999/new-pac/master/CloudFlare%E4%BC%98%E8%B4%A8IP',encoding='utf-8') 33 | # freefq_doc = getoutput('curl https://raw.githubusercontent.com/freefq/free/master/README.md',encoding='utf-8') 34 | 35 | better_cf_ips = curl('https://raw.githubusercontent.com/Alvin9999/new-pac/master/CloudFlare%E4%BC%98%E8%B4%A8IP') 36 | freefq_doc = curl('https://raw.githubusercontent.com/freefq/free/master/README.md') 37 | vless_node = curl('https://vless-node.lgf4591.workers.dev/0d9163eb-b54f-4144-b7a2-96efda0f4ee7') 38 | 39 | update_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) 40 | 41 | hysteria1_urls = [ 42 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/1/config.json', 43 | 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/config.json', 44 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria/13/config.json', 45 | 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria/2/config.json' 46 | ] 47 | hysteria2_urls = [ 48 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/1/config.json', 49 | 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria2/config.json', 50 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/hysteria2/13/config.json', 51 | 'https://www.githubip.xyz/Alvin9999/pac2/master/hysteria2/2/config.json' 52 | ] 53 | naiveproxy_urls = [ 54 | 'https://www.gitlabip.xyz/Alvin9999/PAC/master/naiveproxy/1/config.json', 55 | 'https://www.githubip.xyz/Alvin9999/PAC/master/naiveproxy/config.json' 56 | ] 57 | singbox_urls = [ 58 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/singbox/1/config.json', 59 | 'https://www.githubip.xyz/Alvin9999/pac2/master/singbox/config.json' 60 | ] 61 | xray_urls = [ 62 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/xray/1/config.json', 63 | 'https://www.githubip.xyz/Alvin9999/pac2/master/xray/config.json', 64 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/xray/3/config.json', 65 | 'https://www.githubip.xyz/Alvin9999/pac2/master/xray/2/config.json' 66 | ] 67 | clashMeta_urls = [ 68 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/clash.meta/1/config.yaml', 69 | 'https://www.githubip.xyz/Alvin9999/pac2/master/clash.meta/config.yaml', 70 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/clash.meta/13/config.yaml', 71 | 'https://www.githubip.xyz/Alvin9999/pac2/master/clash.meta/2/config.yaml', 72 | 'https://www.gitlabip.xyz/Alvin9999/pac2/master/clash.meta/15/config.yaml', 73 | 'https://www.githubip.xyz/Alvin9999/pac2/master/clash.meta/3/config.yaml' 74 | ] 75 | psiphon_urls = [ 76 | '' 77 | ] 78 | 79 | 80 | hysteria1_configs = list(map(curl, hysteria1_urls)) 81 | hysteria2_configs = list(map(curl, hysteria2_urls)) 82 | naiveproxy_configs = list(map(curl, naiveproxy_urls)) 83 | singbox_configs = list(map(curl, singbox_urls)) 84 | xray_configs = list(map(curl, xray_urls)) 85 | clashMeta_configs = list(map(curl, clashMeta_urls)) 86 | 87 | for (index,config) in enumerate(hysteria1_configs): 88 | with open(f"./ChromeGo/hysteria1/ip_{index}.json", "w",encoding="utf-8") as config_file: 89 | config_file.write(config) 90 | 91 | for (index,config) in enumerate(hysteria2_configs): 92 | with open(f"./ChromeGo/hysteria2/ip_{index}.json", "w",encoding="utf-8") as config_file: 93 | config_file.write(config) 94 | 95 | for (index,config) in enumerate(naiveproxy_configs): 96 | with open(f"./ChromeGo/naiveproxy/ip_{index}.json", "w",encoding="utf-8") as config_file: 97 | config_file.write(config) 98 | 99 | for (index,config) in enumerate(singbox_configs): 100 | with open(f"./ChromeGo/singbox/ip_{index}.json", "w",encoding="utf-8") as config_file: 101 | config_file.write(config) 102 | 103 | for (index,config) in enumerate(xray_configs): 104 | with open(f"./ChromeGo/xray/ip_{index}.json", "w",encoding="utf-8") as config_file: 105 | config_file.write(config) 106 | 107 | for (index,config) in enumerate(clashMeta_configs): 108 | with open(f"./ChromeGo/clashMeta/ip_{index}.yaml", "w",encoding="utf-8") as config_file: 109 | config_file.write(config) 110 | 111 | 112 | readme_doc = """ 113 | 114 | ================================= Last Update Time: {} ============================================= 115 | 116 | # cloudflare-pages-vpn 117 | 118 | ##### https://replit.com/@lgf4591/WarpKey 119 | ##### [wireguad-config-generator](https://github.com/lgf4591/wireguad-config-generator) 120 | ##### [fanqiang](https://github.com/bannedbook/fanqiang) 121 | ##### [chromego_merge](https://github.com/vveg26/chromego_merge) 122 | 123 | ``` 124 | need install packages: 125 | 126 | sudo apt update && sudo apt upgrade -y 127 | sudo apt install -y qrencode 128 | 129 | cp -r /mnt/c/Users/lgf/.ssh ~ 130 | cd ~/.ssh 131 | chmod 600 *id_rsa 132 | chmod 644 *id_rsa.pub 133 | ssh -T git@github.com 134 | 135 | git clone git@github.com:lgf4591/cloudflare-pages-vpn.git 136 | git config --global user.name "lgf4591" 137 | git config --global user.email "lgf4591@outlook.com" 138 | git pull origin main 139 | 140 | ``` 141 | 142 | ## [cloudfare免费代理节点: v2ray-nodes](https://v2ray-nodes.lgf4591.workers.dev/b58a6cd1-43da-4506-aaec-308045412f2d) 143 | 144 | ## [cloudfare免费vless节点: vless-node](https://vless-node.lgf4591.workers.dev/0d9163eb-b54f-4144-b7a2-96efda0f4ee7) 145 | ``` 146 | 147 | {} 148 | 149 | ``` 150 | 151 | 152 | ## 免费的ChormeGo节点汇总 (test) 153 | 154 | ### [clashmeta-全平台通用](https://github.com/vveg26/chromego_merge/tree/main#%E4%B8%8D%E5%A5%97warp%E7%89%88%E6%9C%ACclashmeta-%E5%85%A8%E5%B9%B3%E5%8F%B0%E9%80%9A%E7%94%A8-%E8%8A%82%E7%82%B9%E6%9C%80%E5%85%A8) 155 | 156 | #### 所有ChromeGo代理节点订阅地址(不可以访问一些敏感资源) 157 | 158 | ``` 159 | 160 | https://cloudflare-pages-vpn.pages.dev/ChromeGo/all_merged_proxies.yaml 161 | https://cloudflare-pages-vpn.pages.dev/ChromeGo_Merge/sub/merged_proxies_new.yaml (推荐用这个) 162 | 163 | ``` 164 | 165 | #### 套warp的所有ChromeGo代理节点订阅地址(可以访问一些敏感资源) 166 | 167 | ``` 168 | 169 | https://cloudflare-pages-vpn.pages.dev/ChromeGo/all_merged_proxies_with_warp.yaml 170 | https://cloudflare-pages-vpn.pages.dev/ChromeGo_Merge/sub/merged_warp_proxies_new.yaml (推荐用这个) 171 | 172 | ``` 173 | 174 | 175 | ### [通用链接 shadowrocket-nekoray](https://github.com/vveg26/chromego_merge/tree/main#%E9%80%9A%E7%94%A8%E9%93%BE%E6%8E%A5-shadowrocket-nekoray) 176 | 177 | ``` 178 | 179 | https://cloudflare-pages-vpn.pages.dev/ChromeGo/all_merged_proxies_shadowrocket_nekoray.txt 180 | https://cloudflare-pages-vpn.pages.dev/ChromeGo_Merge/sub/shadowrocket_base64.txt (推荐用这个) 181 | 182 | ``` 183 | 184 | # CloudFlare优质IP 185 | ``` 186 | {} 187 | ``` 188 | 189 | # [freefq](https://github.com/freefq/free) 190 | 191 | {} 192 | 193 | 194 | # [ChromeGo Config](https://github.com/bannedbook/fanqiang/releases/tag/ChromeGo-latest) 195 | 196 | ## hysteria1 config json 197 | ### [hysteria1 ip_1]({}) 198 | ``` 199 | {} 200 | ``` 201 | 202 | ### [hysteria1 ip_2]({}) 203 | ``` 204 | {} 205 | ``` 206 | 207 | ### [hysteria1 ip_3]({}) 208 | ``` 209 | {} 210 | ``` 211 | 212 | ### [hysteria1 ip_4]({}) 213 | ``` 214 | {} 215 | ``` 216 | 217 | ## hysteria2 config json 218 | ### [hysteria2 ip_1]({}) 219 | ``` 220 | {} 221 | ``` 222 | 223 | ### [hysteria2 ip_2]({}) 224 | ``` 225 | {} 226 | ``` 227 | 228 | ### [hysteria2 ip_3]({}) 229 | ``` 230 | {} 231 | ``` 232 | 233 | ### [hysteria2 ip_4]({}) 234 | ``` 235 | {} 236 | ``` 237 | 238 | 239 | ## naiveproxy config json 240 | 241 | ### [naiveproxy ip_1]({}) 242 | ``` 243 | {} 244 | ``` 245 | 246 | ### [naiveproxy ip_2]({}) 247 | ``` 248 | {} 249 | ``` 250 | 251 | 252 | ## singbox config json 253 | 254 | ### [singbox ip_1]({}) 255 | ``` 256 | {} 257 | ``` 258 | 259 | ### [singbox ip_2]({}) 260 | ``` 261 | {} 262 | ``` 263 | 264 | 265 | ## xray config json 266 | 267 | ### [xray ip_1]({}) 268 | ``` 269 | {} 270 | ``` 271 | 272 | ### [xray ip_2]({}) 273 | ``` 274 | {} 275 | ``` 276 | 277 | 278 | 279 | ## clashMeta config yaml 280 | 281 | ### [clashMeta ip_1]({}) 282 | ``` 283 | {} 284 | ``` 285 | 286 | ### [clashMeta ip_2]({}) 287 | ``` 288 | {} 289 | ``` 290 | 291 | ### [clashMeta ip_3]({}) 292 | ``` 293 | {} 294 | ``` 295 | 296 | ### [clashMeta ip_4]({}) 297 | ``` 298 | {} 299 | ``` 300 | 301 | ### [clashMeta ip_5]({}) 302 | ``` 303 | {} 304 | ``` 305 | 306 | ### [clashMeta ip_6]({}) 307 | ``` 308 | {} 309 | ``` 310 | 311 | """ 312 | 313 | markdown_doc = readme_doc.format(update_time,vless_node,better_cf_ips,freefq_doc,hysteria1_urls[0],hysteria1_configs[0],hysteria1_urls[1],hysteria1_configs[1],hysteria1_urls[2],hysteria1_configs[2],hysteria1_urls[3],hysteria1_configs[3],hysteria2_urls[0],hysteria2_configs[0],hysteria2_urls[1],hysteria2_configs[1],hysteria2_urls[2],hysteria2_configs[2],hysteria2_urls[3],hysteria2_configs[3],naiveproxy_urls[0],naiveproxy_configs[0],naiveproxy_urls[1],naiveproxy_configs[1],singbox_urls[0],singbox_configs[0],singbox_urls[1],singbox_configs[1],xray_urls[0],xray_configs[0],xray_urls[1],xray_configs[1],clashMeta_urls[0],clashMeta_configs[0],clashMeta_urls[1],clashMeta_configs[1],clashMeta_urls[2],clashMeta_configs[2],clashMeta_urls[3],clashMeta_configs[3],clashMeta_urls[4],clashMeta_configs[4],clashMeta_urls[5],clashMeta_configs[5]) 314 | 315 | try: 316 | with open("./README.md", "w",encoding="utf-8") as readme_file: 317 | readme_file.write(markdown_doc) 318 | 319 | print("Content successfully encoded and written to README.md file.") 320 | except Exception as e: 321 | print(f"Error encoding file content: {e}") 322 | 323 | -------------------------------------------------------------------------------- /main.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | cd ./ChromeGo && sh get_all_proxies.sh && cd .. 3 | 4 | wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_windows_amd64.exe -O ./warp/windows/wgcf.exe 5 | wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_linux_amd64 -O ./warp/linux/wgcf 6 | wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_darwin_amd64 -O ./warp/macos/wgcf 7 | wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_freebsd_amd64 -O ./warp/unix/wgcf-freebsd 8 | 9 | python main.py 10 | 11 | python markdown_to_html.py 12 | 13 | cd ChromeGo_Merge 14 | 15 | # print("Install dependencies") # BUG: 在cloudfare部署时出现这个错误 -> main.sh: 15: Syntax error: word unexpected (expecting ")") 16 | pip install -r requirements.txt 17 | 18 | # print("Run merge script") 19 | python meta_merge.py 20 | 21 | # print("Run shadowrocket merge script") 22 | python merge.py 23 | 24 | # print("Run sb script") 25 | python sb.py 26 | 27 | # print("finished!!!") 28 | -------------------------------------------------------------------------------- /markdown_to_html copy.py: -------------------------------------------------------------------------------- 1 | 2 | # https://www.cnblogs.com/bpf-1024/p/14118167.html 3 | 4 | 5 | import os 6 | try: 7 | from markdown import markdown 8 | except ModuleNotFoundError as e: 9 | os.system("pip install markdown") 10 | os.system("pip install python-markdown-math") 11 | os.system("pip install markdown_checklist") 12 | from markdown import markdown 13 | 14 | try: 15 | from pymdownx import superfences 16 | except ModuleNotFoundError as e: 17 | os.system("pip install pymdown-extensions") 18 | from pymdownx import superfences 19 | 20 | class mdtox: 21 | def __init__(self, md_filename, encoding='utf-8'): 22 | self.md_filename = md_filename 23 | self.encoding = encoding 24 | self.__args() 25 | 26 | def __args(self): 27 | self.html = ''' 28 | 29 | 30 | 31 | 32 | {} 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 | {} 47 |
48 | 49 | 50 | ''' 51 | 52 | # 扩展配置 53 | self.extensions = [ 54 | 'toc', # 目录,[toc] 55 | 'extra', # 缩写词、属性列表、释义列表、围栏式代码块、脚注、在HTML的Markdown、表格 56 | ] 57 | third_party_extensions = [ 58 | 'mdx_math', # KaTeX数学公式,$E=mc^2$和$$E=mc^2$$ 59 | 'markdown_checklist.extension', # checklist,- [ ]和- [x] 60 | 'pymdownx.magiclink', # 自动转超链接, 61 | 'pymdownx.caret', # 上标下标, 62 | 'pymdownx.superfences', # 多种块功能允许嵌套,各种图表 63 | 'pymdownx.betterem', # 改善强调的处理(粗体和斜体) 64 | 'pymdownx.mark', # 亮色突出文本 65 | 'pymdownx.highlight', # 高亮显示代码 66 | 'pymdownx.tasklist', # 任务列表 67 | 'pymdownx.tilde', # 删除线 68 | ] 69 | self.extensions.extend(third_party_extensions) 70 | self.extension_configs = { 71 | 'mdx_math': { 72 | 'enable_dollar_delimiter': True # 允许单个$ 73 | }, 74 | 'pymdownx.superfences': { 75 | "custom_fences": [ 76 | { 77 | 'name': 'mermaid', # 开启流程图等图 78 | 'class': 'mermaid', 79 | 'format': superfences.fence_div_format 80 | } 81 | ] 82 | }, 83 | 'pymdownx.highlight': { 84 | 'linenums': True, # 显示行号 85 | 'linenums_style': 'pymdownx-inline' # 代码和行号分开 86 | }, 87 | 'pymdownx.tasklist': { 88 | 'clickable_checkbox': True, # 任务列表可点击 89 | } 90 | } 91 | 92 | def to_html(self, html_name): 93 | try: 94 | with open(self.md_filename, "r", encoding=self.encoding) as file_md: 95 | md_text = file_md.read() 96 | except Exception as e: 97 | print("", e) 98 | return False 99 | 100 | title = '.'.join(os.path.basename(self.md_filename).split('.')[:-1]) 101 | html_text = markdown(md_text, output_format='html', extensions=self.extensions, extension_configs=self.extension_configs) # MarkDown转HTML 102 | self.html = self.html.format(title, html_text) 103 | 104 | try: 105 | with open(html_name, 'w', encoding=self.encoding) as file_html: 106 | file_html.write(self.html) 107 | except Exception as e: 108 | print("", e) 109 | return False 110 | 111 | return True 112 | 113 | 114 | # 本测试与上述代码在同个文件中 115 | if __name__ == '__main__': 116 | md_name = "README.md" 117 | html_name = "index.html" 118 | 119 | if(mdtox(md_name).to_html(html_name)): 120 | print('转换完成') 121 | 122 | -------------------------------------------------------------------------------- /markdown_to_html.py: -------------------------------------------------------------------------------- 1 | 2 | # https://www.cnblogs.com/bpf-1024/p/14118167.html 3 | 4 | 5 | import os 6 | # os.system("pip install markdown") 7 | # os.system("pip install python-markdown-math") 8 | # os.system("pip install markdown_checklist") 9 | # os.system("pip install pymdown-extensions") 10 | # from markdown import markdown 11 | # from pymdownx import superfences 12 | 13 | try: 14 | from markdown import markdown # BUG: on github actions:ModuleNotFoundError: No module named 'markdown' 15 | except ModuleNotFoundError as e: 16 | os.system("pip install markdown") 17 | os.system("pip install python-markdown-math") 18 | os.system("pip install markdown_checklist") 19 | from markdown import markdown 20 | 21 | try: 22 | from pymdownx import superfences 23 | except ModuleNotFoundError as e: 24 | os.system("pip install pymdown-extensions") 25 | from pymdownx import superfences 26 | 27 | 28 | 29 | class mdtox: 30 | def __init__(self, md_filename, encoding='utf-8'): 31 | self.md_filename = md_filename 32 | self.encoding = encoding 33 | self.__args() 34 | 35 | def __args(self): 36 | self.html = ''' 37 | 38 | 39 | 40 | 41 | {} 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
55 | {} 56 |
57 | 58 | 59 | ''' 60 | 61 | # 扩展配置 62 | self.extensions = [ 63 | 'toc', # 目录,[toc] 64 | 'extra', # 缩写词、属性列表、释义列表、围栏式代码块、脚注、在HTML的Markdown、表格 65 | ] 66 | third_party_extensions = [ 67 | 'mdx_math', # KaTeX数学公式,$E=mc^2$和$$E=mc^2$$ 68 | 'markdown_checklist.extension', # checklist,- [ ]和- [x] 69 | 'pymdownx.magiclink', # 自动转超链接, 70 | 'pymdownx.caret', # 上标下标, 71 | 'pymdownx.superfences', # 多种块功能允许嵌套,各种图表 72 | 'pymdownx.betterem', # 改善强调的处理(粗体和斜体) 73 | 'pymdownx.mark', # 亮色突出文本 74 | 'pymdownx.highlight', # 高亮显示代码 75 | 'pymdownx.tasklist', # 任务列表 76 | 'pymdownx.tilde', # 删除线 77 | ] 78 | self.extensions.extend(third_party_extensions) 79 | self.extension_configs = { 80 | 'mdx_math': { 81 | 'enable_dollar_delimiter': True # 允许单个$ 82 | }, 83 | 'pymdownx.superfences': { 84 | "custom_fences": [ 85 | { 86 | 'name': 'mermaid', # 开启流程图等图 87 | 'class': 'mermaid', 88 | 'format': superfences.fence_div_format 89 | } 90 | ] 91 | }, 92 | 'pymdownx.highlight': { 93 | 'linenums': True, # 显示行号 94 | 'linenums_style': 'pymdownx-inline' # 代码和行号分开 95 | }, 96 | 'pymdownx.tasklist': { 97 | 'clickable_checkbox': True, # 任务列表可点击 98 | } 99 | } 100 | 101 | def to_html(self, html_name): 102 | try: 103 | with open(self.md_filename, "r", encoding=self.encoding) as file_md: 104 | md_text = file_md.read() 105 | except Exception as e: 106 | print("", e) 107 | return False 108 | 109 | title = '.'.join(os.path.basename(self.md_filename).split('.')[:-1]) 110 | html_text = markdown(md_text, output_format='html', extensions=self.extensions, extension_configs=self.extension_configs) # MarkDown转HTML 111 | self.html = self.html.format(title, html_text) 112 | 113 | try: 114 | with open(html_name, 'w', encoding=self.encoding) as file_html: 115 | file_html.write(self.html) 116 | except Exception as e: 117 | print("", e) 118 | return False 119 | 120 | return True 121 | 122 | 123 | # 本测试与上述代码在同个文件中 124 | if __name__ == '__main__': 125 | md_name = "README.md" 126 | html_name = "index.html" 127 | 128 | if(mdtox(md_name).to_html(html_name)): 129 | print('转换完成') 130 | 131 | -------------------------------------------------------------------------------- /src/css/codehighlight.css: -------------------------------------------------------------------------------- 1 | pre { line-height: 125%; } 2 | td.linenos pre { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } 3 | span.linenos { color: #000000; background-color: #f0f0f0; padding-left: 5px; padding-right: 5px; } 4 | td.linenos pre.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 5 | span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 6 | .highlight .hll { background-color: #ffffcc } 7 | .highlight { background: #f8f8f8; } 8 | .highlight .c { color: #408080; font-style: italic } /* Comment */ 9 | .highlight .err { border: 1px solid #FF0000 } /* Error */ 10 | .highlight .k { color: #008000; font-weight: bold } /* Keyword */ 11 | .highlight .o { color: #666666 } /* Operator */ 12 | .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ 13 | .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ 14 | .highlight .cp { color: #BC7A00 } /* Comment.Preproc */ 15 | .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ 16 | .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ 17 | .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ 18 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 19 | .highlight .ge { font-style: italic } /* Generic.Emph */ 20 | .highlight .gr { color: #FF0000 } /* Generic.Error */ 21 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 22 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ 23 | .highlight .go { color: #888888 } /* Generic.Output */ 24 | .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ 25 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 26 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 27 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ 28 | .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ 29 | .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ 30 | .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ 31 | .highlight .kp { color: #008000 } /* Keyword.Pseudo */ 32 | .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ 33 | .highlight .kt { color: #B00040 } /* Keyword.Type */ 34 | .highlight .m { color: #666666 } /* Literal.Number */ 35 | .highlight .s { color: #BA2121 } /* Literal.String */ 36 | .highlight .na { color: #7D9029 } /* Name.Attribute */ 37 | .highlight .nb { color: #008000 } /* Name.Builtin */ 38 | .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ 39 | .highlight .no { color: #880000 } /* Name.Constant */ 40 | .highlight .nd { color: #AA22FF } /* Name.Decorator */ 41 | .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ 42 | .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ 43 | .highlight .nf { color: #0000FF } /* Name.Function */ 44 | .highlight .nl { color: #A0A000 } /* Name.Label */ 45 | .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ 46 | .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ 47 | .highlight .nv { color: #19177C } /* Name.Variable */ 48 | .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ 49 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 50 | .highlight .mb { color: #666666 } /* Literal.Number.Bin */ 51 | .highlight .mf { color: #666666 } /* Literal.Number.Float */ 52 | .highlight .mh { color: #666666 } /* Literal.Number.Hex */ 53 | .highlight .mi { color: #666666 } /* Literal.Number.Integer */ 54 | .highlight .mo { color: #666666 } /* Literal.Number.Oct */ 55 | .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ 56 | .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ 57 | .highlight .sc { color: #BA2121 } /* Literal.String.Char */ 58 | .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ 59 | .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ 60 | .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ 61 | .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ 62 | .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ 63 | .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ 64 | .highlight .sx { color: #008000 } /* Literal.String.Other */ 65 | .highlight .sr { color: #BB6688 } /* Literal.String.Regex */ 66 | .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ 67 | .highlight .ss { color: #19177C } /* Literal.String.Symbol */ 68 | .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ 69 | .highlight .fm { color: #0000FF } /* Name.Function.Magic */ 70 | .highlight .vc { color: #19177C } /* Name.Variable.Class */ 71 | .highlight .vg { color: #19177C } /* Name.Variable.Global */ 72 | .highlight .vi { color: #19177C } /* Name.Variable.Instance */ 73 | .highlight .vm { color: #19177C } /* Name.Variable.Magic */ 74 | .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /src/css/directory.css: -------------------------------------------------------------------------------- 1 | /*生成博客目录的CSS*/ 2 | #uprightsideBar{ 3 | font-size:12px; 4 | font-family:Arial, Helvetica, sans-serif; 5 | text-align:left; 6 | position:fixed;/*将div的位置固定到距离top:50px,right:0px的位置,这样div就会处在最右边的位置,距离顶部50px*/ 7 | top:50px; 8 | right:0px; 9 | width: auto; 10 | height: auto; 11 | } 12 | #sideBarTab{ 13 | float:left; 14 | width:30px; 15 | border:1px solid #e5e5e5; 16 | border-right:none; 17 | text-align:center; 18 | background:#ffffff; 19 | } 20 | 21 | #sideBarContents{ 22 | float:left; 23 | overflow:auto; 24 | overflow-x:hidden;!important; 25 | width:200px; 26 | min-height:108px; 27 | max-height:460px; 28 | border:1px solid #e5e5e5; 29 | border-right:none; 30 | background:#ffffff; 31 | } 32 | #sideBarContents dl{ 33 | margin:0; 34 | padding:0; 35 | } 36 | 37 | #sideBarContents dt{ 38 | margin-top:5px; 39 | margin-left:5px; 40 | } 41 | 42 | #sideBarContents dd, dt { 43 | cursor: pointer; 44 | } 45 | 46 | #sideBarContents dd:hover, dt:hover { 47 | color:#A7995A; 48 | } 49 | #sideBarContents dd{ 50 | margin-left:20px; 51 | } 52 | 53 | /*溢出隐藏设置*/ 54 | #topics, #mainContent { 55 | overflow: visible; 56 | } 57 | #postDesc { 58 | float: none; 59 | } -------------------------------------------------------------------------------- /src/css/katex.min.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.9"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} -------------------------------------------------------------------------------- /src/css/linenum.css: -------------------------------------------------------------------------------- 1 | [data-linenos]:before { 2 | content: attr(data-linenos); 3 | } -------------------------------------------------------------------------------- /src/css/markdown.css: -------------------------------------------------------------------------------- 1 | .markdown-body .octicon { 2 | display: inline-block; 3 | fill: currentColor; 4 | vertical-align: text-bottom; 5 | } 6 | 7 | .markdown-body .anchor { 8 | float: left; 9 | line-height: 1; 10 | margin-left: -20px; 11 | padding-right: 4px; 12 | } 13 | 14 | .markdown-body .anchor:focus { 15 | outline: none; 16 | } 17 | 18 | .markdown-body h1 .octicon-link, 19 | .markdown-body h2 .octicon-link, 20 | .markdown-body h3 .octicon-link, 21 | .markdown-body h4 .octicon-link, 22 | .markdown-body h5 .octicon-link, 23 | .markdown-body h6 .octicon-link { 24 | color: #1b1f23; 25 | vertical-align: middle; 26 | visibility: hidden; 27 | } 28 | 29 | .markdown-body h1:hover .anchor, 30 | .markdown-body h2:hover .anchor, 31 | .markdown-body h3:hover .anchor, 32 | .markdown-body h4:hover .anchor, 33 | .markdown-body h5:hover .anchor, 34 | .markdown-body h6:hover .anchor { 35 | text-decoration: none; 36 | } 37 | 38 | .markdown-body h1:hover .anchor .octicon-link, 39 | .markdown-body h2:hover .anchor .octicon-link, 40 | .markdown-body h3:hover .anchor .octicon-link, 41 | .markdown-body h4:hover .anchor .octicon-link, 42 | .markdown-body h5:hover .anchor .octicon-link, 43 | .markdown-body h6:hover .anchor .octicon-link { 44 | visibility: visible; 45 | } 46 | 47 | .markdown-body h1:hover .anchor .octicon-link:before, 48 | .markdown-body h2:hover .anchor .octicon-link:before, 49 | .markdown-body h3:hover .anchor .octicon-link:before, 50 | .markdown-body h4:hover .anchor .octicon-link:before, 51 | .markdown-body h5:hover .anchor .octicon-link:before, 52 | .markdown-body h6:hover .anchor .octicon-link:before { 53 | width: 16px; 54 | height: 16px; 55 | content: ' '; 56 | display: inline-block; 57 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' width='16' height='16' aria-hidden='true'%3E%3Cpath fill-rule='evenodd' d='M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z'%3E%3C/path%3E%3C/svg%3E"); 58 | } 59 | 60 | .markdown-body { 61 | -ms-text-size-adjust: 100%; 62 | -webkit-text-size-adjust: 100%; 63 | line-height: 1.5; 64 | color: #24292e; 65 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji; 66 | font-size: 15px; 67 | line-height: 1.5; 68 | word-wrap: break-word; 69 | padding: 20px; 70 | } 71 | 72 | .markdown-body details { 73 | display: block; 74 | } 75 | 76 | .markdown-body summary { 77 | display: list-item; 78 | } 79 | 80 | .markdown-body a { 81 | background-color: initial; 82 | } 83 | 84 | .markdown-body a:active, 85 | .markdown-body a:hover { 86 | outline-width: 0; 87 | } 88 | 89 | .markdown-body strong { 90 | font-weight: inherit; 91 | font-weight: bolder; 92 | } 93 | 94 | .markdown-body h1 { 95 | font-size: 2em; 96 | margin: .67em 0; 97 | } 98 | 99 | .markdown-body img { 100 | border-style: none; 101 | } 102 | 103 | .markdown-body code, 104 | .markdown-body kbd, 105 | .markdown-body pre { 106 | font-family: monospace, monospace; 107 | font-size: 1em; 108 | } 109 | 110 | .markdown-body hr { 111 | box-sizing: initial; 112 | height: 0; 113 | overflow: visible; 114 | } 115 | 116 | .markdown-body input { 117 | font: inherit; 118 | margin: 0; 119 | } 120 | 121 | .markdown-body input { 122 | overflow: visible; 123 | } 124 | 125 | .markdown-body [type=checkbox] { 126 | box-sizing: border-box; 127 | padding: 0; 128 | } 129 | 130 | .markdown-body * { 131 | box-sizing: border-box; 132 | } 133 | 134 | .markdown-body input { 135 | font-family: inherit; 136 | font-size: inherit; 137 | line-height: inherit; 138 | } 139 | 140 | .markdown-body a { 141 | color: #0366d6; 142 | text-decoration: none; 143 | } 144 | 145 | .markdown-body a:hover { 146 | text-decoration: underline; 147 | } 148 | 149 | .markdown-body strong { 150 | font-weight: 600; 151 | } 152 | 153 | .markdown-body hr { 154 | height: 0; 155 | margin: 15px 0; 156 | overflow: hidden; 157 | background: transparent; 158 | border: 0; 159 | border-bottom: 1px solid #dfe2e5; 160 | } 161 | 162 | .markdown-body hr:after, 163 | .markdown-body hr:before { 164 | display: table; 165 | content: ""; 166 | } 167 | 168 | .markdown-body hr:after { 169 | clear: both; 170 | } 171 | 172 | .markdown-body table { 173 | border-spacing: 0; 174 | border-collapse: collapse; 175 | } 176 | 177 | .markdown-body td, 178 | .markdown-body th { 179 | padding: 0; 180 | } 181 | 182 | .markdown-body details summary { 183 | cursor: pointer; 184 | } 185 | 186 | .markdown-body kbd { 187 | display: inline-block; 188 | padding: 3px 5px; 189 | font: 11px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 190 | line-height: 10px; 191 | color: #444d56; 192 | vertical-align: middle; 193 | background-color: #fafbfc; 194 | border: 1px solid #d1d5da; 195 | border-radius: 3px; 196 | box-shadow: inset 0 -1px 0 #d1d5da; 197 | } 198 | 199 | .markdown-body h1, 200 | .markdown-body h2, 201 | .markdown-body h3, 202 | .markdown-body h4, 203 | .markdown-body h5, 204 | .markdown-body h6 { 205 | margin-top: 0; 206 | margin-bottom: 0; 207 | } 208 | 209 | .markdown-body h1 { 210 | font-size: 32px; 211 | } 212 | 213 | .markdown-body h1, 214 | .markdown-body h2 { 215 | font-weight: 600; 216 | } 217 | 218 | .markdown-body h2 { 219 | font-size: 24px; 220 | } 221 | 222 | .markdown-body h3 { 223 | font-size: 20px; 224 | } 225 | 226 | .markdown-body h3, 227 | .markdown-body h4 { 228 | font-weight: 600; 229 | } 230 | 231 | .markdown-body h4 { 232 | font-size: 16px; 233 | } 234 | 235 | .markdown-body h5 { 236 | font-size: 14px; 237 | } 238 | 239 | .markdown-body h5, 240 | .markdown-body h6 { 241 | font-weight: 600; 242 | } 243 | 244 | .markdown-body h6 { 245 | font-size: 12px; 246 | } 247 | 248 | .markdown-body p { 249 | margin-top: 0; 250 | margin-bottom: 10px; 251 | } 252 | 253 | .markdown-body blockquote { 254 | margin: 0; 255 | } 256 | 257 | .markdown-body ol, 258 | .markdown-body ul { 259 | padding-left: 0; 260 | margin-top: 0; 261 | margin-bottom: 0; 262 | } 263 | 264 | .markdown-body ol ol, 265 | .markdown-body ul ol { 266 | list-style-type: lower-roman; 267 | } 268 | 269 | .markdown-body ol ol ol, 270 | .markdown-body ol ul ol, 271 | .markdown-body ul ol ol, 272 | .markdown-body ul ul ol { 273 | list-style-type: lower-alpha; 274 | } 275 | 276 | .markdown-body dd { 277 | margin-left: 0; 278 | } 279 | 280 | .markdown-body code, 281 | .markdown-body pre { 282 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 283 | font-size: 12px; 284 | } 285 | 286 | .markdown-body pre { 287 | margin-top: 0; 288 | margin-bottom: 0; 289 | } 290 | 291 | .markdown-body input::-webkit-inner-spin-button, 292 | .markdown-body input::-webkit-outer-spin-button { 293 | margin: 0; 294 | -webkit-appearance: none; 295 | appearance: none; 296 | } 297 | 298 | .markdown-body :checked+.radio-label { 299 | position: relative; 300 | z-index: 1; 301 | border-color: #0366d6; 302 | } 303 | 304 | .markdown-body .border { 305 | border: 1px solid #e1e4e8!important; 306 | } 307 | 308 | .markdown-body .border-0 { 309 | border: 0!important; 310 | } 311 | 312 | .markdown-body .border-bottom { 313 | border-bottom: 1px solid #e1e4e8!important; 314 | } 315 | 316 | .markdown-body .rounded-1 { 317 | border-radius: 3px!important; 318 | } 319 | 320 | .markdown-body .bg-white { 321 | background-color: #fff!important; 322 | } 323 | 324 | .markdown-body .bg-gray-light { 325 | background-color: #fafbfc!important; 326 | } 327 | 328 | .markdown-body .text-gray-light { 329 | color: #6a737d!important; 330 | } 331 | 332 | .markdown-body .mb-0 { 333 | margin-bottom: 0!important; 334 | } 335 | 336 | .markdown-body .my-2 { 337 | margin-top: 8px!important; 338 | margin-bottom: 8px!important; 339 | } 340 | 341 | .markdown-body .pl-0 { 342 | padding-left: 0!important; 343 | } 344 | 345 | .markdown-body .py-0 { 346 | padding-top: 0!important; 347 | padding-bottom: 0!important; 348 | } 349 | 350 | .markdown-body .pl-1 { 351 | padding-left: 4px!important; 352 | } 353 | 354 | .markdown-body .pl-2 { 355 | padding-left: 8px!important; 356 | } 357 | 358 | .markdown-body .py-2 { 359 | padding-top: 8px!important; 360 | padding-bottom: 8px!important; 361 | } 362 | 363 | .markdown-body .pl-3, 364 | .markdown-body .px-3 { 365 | padding-left: 16px!important; 366 | } 367 | 368 | .markdown-body .px-3 { 369 | padding-right: 16px!important; 370 | } 371 | 372 | .markdown-body .pl-4 { 373 | padding-left: 24px!important; 374 | } 375 | 376 | .markdown-body .pl-5 { 377 | padding-left: 32px!important; 378 | } 379 | 380 | .markdown-body .pl-6 { 381 | padding-left: 40px!important; 382 | } 383 | 384 | .markdown-body .f6 { 385 | font-size: 12px!important; 386 | } 387 | 388 | .markdown-body .lh-condensed { 389 | line-height: 1.25!important; 390 | } 391 | 392 | .markdown-body .text-bold { 393 | font-weight: 600!important; 394 | } 395 | 396 | .markdown-body .pl-c { 397 | color: #6a737d; 398 | } 399 | 400 | .markdown-body .pl-c1, 401 | .markdown-body .pl-s .pl-v { 402 | color: #005cc5; 403 | } 404 | 405 | .markdown-body .pl-e, 406 | .markdown-body .pl-en { 407 | color: #6f42c1; 408 | } 409 | 410 | .markdown-body .pl-s .pl-s1, 411 | .markdown-body .pl-smi { 412 | color: #24292e; 413 | } 414 | 415 | .markdown-body .pl-ent { 416 | color: #22863a; 417 | } 418 | 419 | .markdown-body .pl-k { 420 | color: #d73a49; 421 | } 422 | 423 | .markdown-body .pl-pds, 424 | .markdown-body .pl-s, 425 | .markdown-body .pl-s .pl-pse .pl-s1, 426 | .markdown-body .pl-sr, 427 | .markdown-body .pl-sr .pl-cce, 428 | .markdown-body .pl-sr .pl-sra, 429 | .markdown-body .pl-sr .pl-sre { 430 | color: #032f62; 431 | } 432 | 433 | .markdown-body .pl-smw, 434 | .markdown-body .pl-v { 435 | color: #e36209; 436 | } 437 | 438 | .markdown-body .pl-bu { 439 | color: #b31d28; 440 | } 441 | 442 | .markdown-body .pl-ii { 443 | color: #fafbfc; 444 | background-color: #b31d28; 445 | } 446 | 447 | .markdown-body .pl-c2 { 448 | color: #fafbfc; 449 | background-color: #d73a49; 450 | } 451 | 452 | .markdown-body .pl-c2:before { 453 | content: "^M"; 454 | } 455 | 456 | .markdown-body .pl-sr .pl-cce { 457 | font-weight: 700; 458 | color: #22863a; 459 | } 460 | 461 | .markdown-body .pl-ml { 462 | color: #735c0f; 463 | } 464 | 465 | .markdown-body .pl-mh, 466 | .markdown-body .pl-mh .pl-en, 467 | .markdown-body .pl-ms { 468 | font-weight: 700; 469 | color: #005cc5; 470 | } 471 | 472 | .markdown-body .pl-mi { 473 | font-style: italic; 474 | color: #24292e; 475 | } 476 | 477 | .markdown-body .pl-mb { 478 | font-weight: 700; 479 | color: #24292e; 480 | } 481 | 482 | .markdown-body .pl-md { 483 | color: #b31d28; 484 | background-color: #ffeef0; 485 | } 486 | 487 | .markdown-body .pl-mi1 { 488 | color: #22863a; 489 | background-color: #f0fff4; 490 | } 491 | 492 | .markdown-body .pl-mc { 493 | color: #e36209; 494 | background-color: #ffebda; 495 | } 496 | 497 | .markdown-body .pl-mi2 { 498 | color: #f6f8fa; 499 | background-color: #005cc5; 500 | } 501 | 502 | .markdown-body .pl-mdr { 503 | font-weight: 700; 504 | color: #6f42c1; 505 | } 506 | 507 | .markdown-body .pl-ba { 508 | color: #586069; 509 | } 510 | 511 | .markdown-body .pl-sg { 512 | color: #959da5; 513 | } 514 | 515 | .markdown-body .pl-corl { 516 | text-decoration: underline; 517 | color: #032f62; 518 | } 519 | 520 | .markdown-body .mb-0 { 521 | margin-bottom: 0!important; 522 | } 523 | 524 | .markdown-body .my-2 { 525 | margin-bottom: 8px!important; 526 | } 527 | 528 | .markdown-body .my-2 { 529 | margin-top: 8px!important; 530 | } 531 | 532 | .markdown-body .pl-0 { 533 | padding-left: 0!important; 534 | } 535 | 536 | .markdown-body .py-0 { 537 | padding-top: 0!important; 538 | padding-bottom: 0!important; 539 | } 540 | 541 | .markdown-body .pl-1 { 542 | padding-left: 4px!important; 543 | } 544 | 545 | .markdown-body .pl-2 { 546 | padding-left: 8px!important; 547 | } 548 | 549 | .markdown-body .py-2 { 550 | padding-top: 8px!important; 551 | padding-bottom: 8px!important; 552 | } 553 | 554 | .markdown-body .pl-3 { 555 | padding-left: 16px!important; 556 | } 557 | 558 | .markdown-body .pl-4 { 559 | padding-left: 24px!important; 560 | } 561 | 562 | .markdown-body .pl-5 { 563 | padding-left: 32px!important; 564 | } 565 | 566 | .markdown-body .pl-6 { 567 | padding-left: 40px!important; 568 | } 569 | 570 | .markdown-body .pl-7 { 571 | padding-left: 48px!important; 572 | } 573 | 574 | .markdown-body .pl-8 { 575 | padding-left: 64px!important; 576 | } 577 | 578 | .markdown-body .pl-9 { 579 | padding-left: 80px!important; 580 | } 581 | 582 | .markdown-body .pl-10 { 583 | padding-left: 96px!important; 584 | } 585 | 586 | .markdown-body .pl-11 { 587 | padding-left: 112px!important; 588 | } 589 | 590 | .markdown-body .pl-12 { 591 | padding-left: 128px!important; 592 | } 593 | 594 | .markdown-body hr { 595 | border-bottom-color: #eee; 596 | } 597 | 598 | .markdown-body kbd { 599 | display: inline-block; 600 | padding: 3px 5px; 601 | font: 11px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 602 | line-height: 10px; 603 | color: #444d56; 604 | vertical-align: middle; 605 | background-color: #fafbfc; 606 | border: 1px solid #d1d5da; 607 | border-radius: 3px; 608 | box-shadow: inset 0 -1px 0 #d1d5da; 609 | } 610 | 611 | .markdown-body:after, 612 | .markdown-body:before { 613 | display: table; 614 | content: ""; 615 | } 616 | 617 | .markdown-body:after { 618 | clear: both; 619 | } 620 | 621 | .markdown-body>:first-child { 622 | margin-top: 0!important; 623 | } 624 | 625 | .markdown-body>:last-child { 626 | margin-bottom: 0!important; 627 | } 628 | 629 | .markdown-body a:not([href]) { 630 | color: inherit; 631 | text-decoration: none; 632 | } 633 | 634 | .markdown-body blockquote, 635 | .markdown-body details, 636 | .markdown-body dl, 637 | .markdown-body ol, 638 | .markdown-body p, 639 | .markdown-body pre, 640 | .markdown-body table, 641 | .markdown-body ul { 642 | margin-top: 0; 643 | margin-bottom: 16px; 644 | } 645 | 646 | .markdown-body hr { 647 | height: .25em; 648 | padding: 0; 649 | margin: 24px 0; 650 | background-color: #e1e4e8; 651 | border: 0; 652 | } 653 | 654 | .markdown-body blockquote { 655 | padding: 0 1em; 656 | color: #6a737d; 657 | border-left: .25em solid #dfe2e5; 658 | } 659 | 660 | .markdown-body blockquote>:first-child { 661 | margin-top: 0; 662 | } 663 | 664 | .markdown-body blockquote>:last-child { 665 | margin-bottom: 0; 666 | } 667 | 668 | .markdown-body h1, 669 | .markdown-body h2, 670 | .markdown-body h3, 671 | .markdown-body h4, 672 | .markdown-body h5, 673 | .markdown-body h6 { 674 | margin-top: 24px; 675 | margin-bottom: 16px; 676 | font-weight: 600; 677 | line-height: 1.25; 678 | } 679 | 680 | .markdown-body h1 { 681 | font-size: 2em; 682 | } 683 | 684 | .markdown-body h1, 685 | .markdown-body h2 { 686 | padding-bottom: .3em; 687 | border-bottom: 1px solid #eaecef; 688 | } 689 | 690 | .markdown-body h2 { 691 | font-size: 1.5em; 692 | } 693 | 694 | .markdown-body h3 { 695 | font-size: 1.25em; 696 | } 697 | 698 | .markdown-body h4 { 699 | font-size: 1em; 700 | } 701 | 702 | .markdown-body h5 { 703 | font-size: .875em; 704 | } 705 | 706 | .markdown-body h6 { 707 | font-size: .85em; 708 | color: #6a737d; 709 | } 710 | 711 | .markdown-body ol, 712 | .markdown-body ul { 713 | padding-left: 2em; 714 | } 715 | 716 | .markdown-body ol ol, 717 | .markdown-body ol ul, 718 | .markdown-body ul ol, 719 | .markdown-body ul ul { 720 | margin-top: 0; 721 | margin-bottom: 0; 722 | } 723 | 724 | .markdown-body li { 725 | word-wrap: break-all; 726 | } 727 | 728 | .markdown-body li>p { 729 | margin-top: 16px; 730 | } 731 | 732 | 733 | /* .markdown-body li+li { 734 | margin-top: .25em; 735 | } */ 736 | 737 | .markdown-body dl { 738 | padding: 0; 739 | } 740 | 741 | .markdown-body dl dt { 742 | padding: 0; 743 | margin-top: 16px; 744 | font-size: 1em; 745 | font-style: italic; 746 | font-weight: 600; 747 | } 748 | 749 | .markdown-body dl dd { 750 | padding: 0 16px; 751 | margin-bottom: 16px; 752 | } 753 | 754 | .markdown-body table { 755 | display: table; 756 | width: 99%; 757 | overflow: auto; 758 | table-layout: fixed; 759 | } 760 | 761 | .markdown-body table th { 762 | font-weight: 600; 763 | } 764 | 765 | .markdown-body table td, 766 | .markdown-body table th { 767 | padding: 6px 13px; 768 | border: 1px solid #dfe2e5; 769 | font-size: 13px; 770 | } 771 | 772 | .markdown-body table tr { 773 | background-color: #fff; 774 | border-top: 1px solid #c6cbd1; 775 | } 776 | 777 | .markdown-body table tr:nth-child(2n) { 778 | background-color: #f6f8fa; 779 | } 780 | 781 | .markdown-body img { 782 | align-content: center; 783 | max-width: 90%; 784 | box-sizing: initial; 785 | background-color: #fff; 786 | } 787 | 788 | .markdown-body img[align=right] { 789 | padding-left: 20px; 790 | } 791 | 792 | .markdown-body img[align=left] { 793 | padding-right: 20px; 794 | } 795 | 796 | .markdown-body code { 797 | padding: .2em .4em; 798 | margin: 0; 799 | font-size: 85%; 800 | background-color: rgba(27, 31, 35, .05); 801 | border-radius: 3px; 802 | } 803 | 804 | .markdown-body pre { 805 | word-wrap: normal; 806 | } 807 | 808 | .markdown-body pre>code { 809 | padding: 0; 810 | margin: 0; 811 | font-size: 100%; 812 | word-break: normal; 813 | white-space: pre; 814 | background: transparent; 815 | border: 0; 816 | } 817 | 818 | .markdown-body .highlight { 819 | margin-bottom: 16px; 820 | } 821 | 822 | .markdown-body .highlight pre { 823 | margin-bottom: 0; 824 | word-break: normal; 825 | } 826 | 827 | .markdown-body .highlight pre, 828 | .markdown-body pre { 829 | padding: 16px; 830 | overflow: auto; 831 | font-size: 85%; 832 | line-height: 1.45; 833 | background-color: #f6f8fa; 834 | border-radius: 3px; 835 | } 836 | 837 | .markdown-body pre code { 838 | display: inline; 839 | max-width: auto; 840 | padding: 0; 841 | margin: 0; 842 | overflow: visible; 843 | line-height: inherit; 844 | word-wrap: normal; 845 | background-color: initial; 846 | border: 0; 847 | } 848 | 849 | .markdown-body .commit-tease-sha { 850 | display: inline-block; 851 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 852 | font-size: 90%; 853 | color: #444d56; 854 | } 855 | 856 | .markdown-body .full-commit .btn-outline:not(:disabled):hover { 857 | color: #005cc5; 858 | border-color: #005cc5; 859 | } 860 | 861 | .markdown-body .blob-wrapper { 862 | overflow-x: auto; 863 | overflow-y: hidden; 864 | } 865 | 866 | .markdown-body .blob-wrapper-embedded { 867 | max-height: 240px; 868 | overflow-y: auto; 869 | } 870 | 871 | .markdown-body .blob-num { 872 | width: 1%; 873 | min-width: 50px; 874 | padding-right: 10px; 875 | padding-left: 10px; 876 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 877 | font-size: 12px; 878 | line-height: 20px; 879 | color: rgba(27, 31, 35, .3); 880 | text-align: right; 881 | white-space: nowrap; 882 | vertical-align: top; 883 | cursor: pointer; 884 | -webkit-user-select: none; 885 | -moz-user-select: none; 886 | -ms-user-select: none; 887 | user-select: none; 888 | } 889 | 890 | .markdown-body .blob-num:hover { 891 | color: rgba(27, 31, 35, .6); 892 | } 893 | 894 | .markdown-body .blob-num:before { 895 | content: attr(data-line-number); 896 | } 897 | 898 | .markdown-body .blob-code { 899 | position: relative; 900 | padding-right: 10px; 901 | padding-left: 10px; 902 | line-height: 20px; 903 | vertical-align: top; 904 | } 905 | 906 | .markdown-body .blob-code-inner { 907 | overflow: visible; 908 | font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; 909 | font-size: 12px; 910 | color: #24292e; 911 | word-wrap: normal; 912 | white-space: pre; 913 | } 914 | 915 | .markdown-body .pl-token.active, 916 | .markdown-body .pl-token:hover { 917 | cursor: pointer; 918 | background: #ffea7f; 919 | } 920 | 921 | .markdown-body .tab-size[data-tab-size="1"] { 922 | -moz-tab-size: 1; 923 | tab-size: 1; 924 | } 925 | 926 | .markdown-body .tab-size[data-tab-size="2"] { 927 | -moz-tab-size: 2; 928 | tab-size: 2; 929 | } 930 | 931 | .markdown-body .tab-size[data-tab-size="3"] { 932 | -moz-tab-size: 3; 933 | tab-size: 3; 934 | } 935 | 936 | .markdown-body .tab-size[data-tab-size="4"] { 937 | -moz-tab-size: 4; 938 | tab-size: 4; 939 | } 940 | 941 | .markdown-body .tab-size[data-tab-size="5"] { 942 | -moz-tab-size: 5; 943 | tab-size: 5; 944 | } 945 | 946 | .markdown-body .tab-size[data-tab-size="6"] { 947 | -moz-tab-size: 6; 948 | tab-size: 6; 949 | } 950 | 951 | .markdown-body .tab-size[data-tab-size="7"] { 952 | -moz-tab-size: 7; 953 | tab-size: 7; 954 | } 955 | 956 | .markdown-body .tab-size[data-tab-size="8"] { 957 | -moz-tab-size: 8; 958 | tab-size: 8; 959 | } 960 | 961 | .markdown-body .tab-size[data-tab-size="9"] { 962 | -moz-tab-size: 9; 963 | tab-size: 9; 964 | } 965 | 966 | .markdown-body .tab-size[data-tab-size="10"] { 967 | -moz-tab-size: 10; 968 | tab-size: 10; 969 | } 970 | 971 | .markdown-body .tab-size[data-tab-size="11"] { 972 | -moz-tab-size: 11; 973 | tab-size: 11; 974 | } 975 | 976 | .markdown-body .tab-size[data-tab-size="12"] { 977 | -moz-tab-size: 12; 978 | tab-size: 12; 979 | } 980 | 981 | .markdown-body .task-list-item { 982 | list-style-type: none; 983 | } 984 | 985 | .markdown-body .task-list-item+.task-list-item { 986 | margin-top: 3px; 987 | } 988 | 989 | .markdown-body .task-list-item input { 990 | margin: 0 .2em .25em -1.6em; 991 | vertical-align: middle; 992 | } 993 | 994 | div svg { 995 | width: 100%; 996 | } -------------------------------------------------------------------------------- /src/css/tasklist.css: -------------------------------------------------------------------------------- 1 | .markdown-body .task-list-item { 2 | list-style-type: none !important; 3 | } 4 | 5 | .markdown-body .task-list-item input[type="checkbox"] { 6 | margin: 0 4px 0.25em -20px; 7 | vertical-align: middle; 8 | } -------------------------------------------------------------------------------- /src/js/directory.js: -------------------------------------------------------------------------------- 1 | /* 2 | 功能:生成博客目录的JS工具 3 | 测试:IE8,火狐,google测试通过 4 | 孤傲苍狼 5 | 2014-5-11 6 | */ 7 | var BlogDirectory = { 8 | /* 9 | 获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top) 10 | */ 11 | getElementPosition: function(ele) { 12 | var topPosition = 0; 13 | var leftPosition = 0; 14 | while (ele) { 15 | topPosition += ele.offsetTop; 16 | leftPosition += ele.offsetLeft; 17 | ele = ele.offsetParent; 18 | } 19 | return { top: topPosition, left: leftPosition }; 20 | }, 21 | 22 | /* 23 | 获取滚动条当前位置 24 | */ 25 | getScrollBarPosition: function() { 26 | var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop; 27 | return scrollBarPosition; 28 | }, 29 | 30 | /* 31 | 移动滚动条,finalPos 为目的位置,internal 为移动速度 32 | */ 33 | moveScrollBar: function(finalpos, interval) { 34 | 35 | //若不支持此方法,则退出 36 | if (!window.scrollTo) { 37 | return false; 38 | } 39 | 40 | //窗体滚动时,禁用鼠标滚轮 41 | window.onmousewheel = function() { 42 | return false; 43 | }; 44 | 45 | //清除计时 46 | if (document.body.movement) { 47 | clearTimeout(document.body.movement); 48 | } 49 | 50 | var currentpos = BlogDirectory.getScrollBarPosition(); //获取滚动条当前位置 51 | 52 | var dist = 0; 53 | if (currentpos == finalpos) { //到达预定位置,则解禁鼠标滚轮,并退出 54 | window.onmousewheel = function() { 55 | return true; 56 | } 57 | return true; 58 | } 59 | if (currentpos < finalpos) { //未到达,则计算下一步所要移动的距离 60 | dist = Math.ceil((finalpos - currentpos) / 10); 61 | currentpos += dist; 62 | } 63 | if (currentpos > finalpos) { 64 | dist = Math.ceil((currentpos - finalpos) / 10); 65 | currentpos -= dist; 66 | } 67 | 68 | var scrTop = BlogDirectory.getScrollBarPosition(); //获取滚动条当前位置 69 | window.scrollTo(0, currentpos); //移动窗口 70 | if (BlogDirectory.getScrollBarPosition() == scrTop) //若已到底部,则解禁鼠标滚轮,并退出 71 | { 72 | window.onmousewheel = function() { 73 | return true; 74 | } 75 | return true; 76 | } 77 | 78 | //进行下一步移动 79 | var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")"; 80 | document.body.movement = setTimeout(repeat, interval); 81 | }, 82 | 83 | htmlDecode: function(text) { 84 | var temp = document.createElement("div"); 85 | temp.innerHTML = text; 86 | var output = temp.innerText || temp.textContent; 87 | temp = null; 88 | return output; 89 | }, 90 | 91 | /* 92 | 创建博客目录, 93 | id表示包含博文正文的 div 容器的 id, 94 | mt 和 st 分别表示主标题和次级标题的标签名称(如 H3、H4,大写或小写都可以!), 95 | interval 表示移动的速度 96 | */ 97 | createBlogDirectory: function(id, mt, st, interval) { 98 | //获取博文正文div容器 99 | var elem = document.getElementById(id); 100 | if (!elem) return false; 101 | //获取div中所有元素结点 102 | var nodes = elem.getElementsByTagName("*"); 103 | //创建博客目录的div容器 104 | var divSideBar = document.createElement('DIV'); 105 | divSideBar.className = 'uprightsideBar'; 106 | divSideBar.setAttribute('id', 'uprightsideBar'); 107 | var divSideBarTab = document.createElement('DIV'); 108 | divSideBarTab.setAttribute('id', 'sideBarTab'); 109 | divSideBar.appendChild(divSideBarTab); 110 | var h3 = document.createElement('H3'); 111 | divSideBarTab.appendChild(h3); 112 | var txt = document.createTextNode('目录导航'); 113 | h3.appendChild(txt); 114 | var divSideBarContents = document.createElement('DIV'); 115 | divSideBarContents.style.display = 'none'; 116 | divSideBarContents.setAttribute('id', 'sideBarContents'); 117 | divSideBar.appendChild(divSideBarContents); 118 | //创建自定义列表 119 | var dlist = document.createElement("dl"); 120 | divSideBarContents.appendChild(dlist); 121 | var num = 0; //统计找到的mt和st 122 | mt = mt.toUpperCase(); //转化成大写 123 | st = st.toUpperCase(); //转化成大写 124 | 125 | var h1_len = 0, 126 | h2_len = 0, 127 | h3_len = 0; 128 | for (var i = 0; i < nodes.length; i++) { 129 | if (nodes[i].nodeName == 'H1') { 130 | h1_len += 1; 131 | } else if (nodes[i].nodeName == 'H2') { 132 | h2_len += 1; 133 | } else if (nodes[i].nodeName == 'H3') { 134 | h3_len += 1; 135 | } 136 | } 137 | if (h1_len >= 1) { 138 | mt = 'H1'; 139 | st = 'H2'; 140 | } else if (h2_len >= 1) { 141 | mt = 'H2'; 142 | st = 'H3'; 143 | } 144 | 145 | //遍历所有元素结点 146 | for (var i = 0; i < nodes.length; i++) { 147 | if (nodes[i].nodeName == mt || nodes[i].nodeName == st) { 148 | //获取标题文本 149 | var nodetext = nodes[i].innerHTML.replace(/<\/?[^>]+>/g, ""); //innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签 150 | nodetext = nodetext.replace(/ /ig, ""); //替换掉所有的 151 | nodetext = BlogDirectory.htmlDecode(nodetext); 152 | //插入锚 153 | nodes[i].setAttribute("id", "blogTitle" + num); 154 | var item; 155 | switch (nodes[i].nodeName) { 156 | case mt: //若为主标题 157 | item = document.createElement("dt"); 158 | break; 159 | case st: //若为子标题 160 | item = document.createElement("dd"); 161 | break; 162 | } 163 | 164 | //创建锚链接 165 | var itemtext = document.createTextNode(nodetext); 166 | item.appendChild(itemtext); 167 | item.setAttribute("name", num); 168 | item.onclick = function() { //添加鼠标点击触发函数 169 | var pos = BlogDirectory.getElementPosition(document.getElementById("blogTitle" + this.getAttribute("name"))); 170 | if (!BlogDirectory.moveScrollBar(pos.top, interval)) return false; 171 | }; 172 | 173 | //将自定义表项加入自定义列表中 174 | dlist.appendChild(item); 175 | num++; 176 | } 177 | } 178 | 179 | if (num == 0) return false; 180 | /*鼠标进入时的事件处理*/ 181 | divSideBarTab.onmouseenter = function() { 182 | divSideBarContents.style.display = 'block'; 183 | } 184 | /*鼠标离开时的事件处理*/ 185 | divSideBar.onmouseleave = function() { 186 | divSideBarContents.style.display = 'none'; 187 | } 188 | 189 | document.body.appendChild(divSideBar); 190 | } 191 | 192 | }; 193 | 194 | window.onload = function() { 195 | /*页面加载完成之后生成博客目录*/ 196 | BlogDirectory.createBlogDirectory("markdown-body", "h3", "h4", 20); 197 | } -------------------------------------------------------------------------------- /src/js/mathtex-script-type.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],t);else{var r="object"==typeof exports?t(require("katex")):t(e.katex);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o,i,a,u={};return o=n(771),i=n.n(o),a=document.body.getElementsByTagName("script"),(a=Array.prototype.slice.call(a)).forEach((function(e){if(!e.type||!e.type.match(/math\/tex/i))return-1;var t=null!=e.type.match(/mode\s*=\s*display(;|\s|\n|$)/),r=document.createElement(t?"div":"span");r.setAttribute("class",t?"equation":"inline-equation");try{i().render(e.text,r,{displayMode:t})}catch(t){r.textContent=e.text}e.parentNode.replaceChild(r,e)})),u=u.default}()})); -------------------------------------------------------------------------------- /warp/README.md: -------------------------------------------------------------------------------- 1 | 2 | wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_windows_amd64.exe -O wgcf.exe 3 | -------------------------------------------------------------------------------- /warp/linux/placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/linux/placeholder -------------------------------------------------------------------------------- /warp/macos/placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/macos/placeholder -------------------------------------------------------------------------------- /warp/unix/placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/unix/placeholder -------------------------------------------------------------------------------- /warp/wgcf-account.toml: -------------------------------------------------------------------------------- 1 | access_token = 'a2f6dd84-6588-4a78-8afb-c883cdd2c728' 2 | device_id = '7af91e11-4d32-400e-b8ed-1860b5798024' 3 | license_key = '3M02paO4-158k7aqF-Y9VLQ341' 4 | private_key = 'GNa0BfeBqFtiKmLNQ2iYdALPA+BW9FE0wZAUbzxwcGU=' 5 | -------------------------------------------------------------------------------- /warp/wgcf-freebsd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/wgcf-freebsd -------------------------------------------------------------------------------- /warp/wgcf-linux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/wgcf-linux -------------------------------------------------------------------------------- /warp/wgcf-macos: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/wgcf-macos -------------------------------------------------------------------------------- /warp/wgcf-profile.conf: -------------------------------------------------------------------------------- 1 | [Interface] 2 | PrivateKey = GNa0BfeBqFtiKmLNQ2iYdALPA+BW9FE0wZAUbzxwcGU= 3 | Address = 172.16.0.2/32 4 | Address = 2606:4700:110:89f8:f73d:a5e7:cb56:2070/128 5 | DNS = 1.1.1.1 6 | MTU = 1280 7 | [Peer] 8 | PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo= 9 | AllowedIPs = 0.0.0.0/0 10 | AllowedIPs = ::/0 11 | Endpoint = engage.cloudflareclient.com:2408 12 | -------------------------------------------------------------------------------- /warp/wgcf.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/wgcf.exe -------------------------------------------------------------------------------- /warp/windows/placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lgf4591/cloudflare-pages-vpn/4851cf46af74d2b749657e610c93366f00c7de09/warp/windows/placeholder -------------------------------------------------------------------------------- /warp/wireguard-conf-generator.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | chcp 65001 > nul 3 | setlocal enabledelayedexpansion 4 | 5 | set /p key=请输入warp+的license_key: 6 | set /p ip=请输入warp+的优选Ip: 7 | 8 | echo create Cloudflare Warp account 9 | if exist wgcf-account.toml del wgcf-account.toml 2>nul 10 | @REM .\wgcf_2.2.19_windows_amd64.exe register 11 | .\wgcf_2.2.19_windows_amd64.exe register --accept-tos yes 12 | 13 | if exist temp.txt del temp.txt 2>nul 14 | ren wgcf-account.toml temp.txt 15 | 16 | @REM set /p m=请输入要删除的行 17 | set m=3 18 | for /f "tokens=*" %%i in (temp.txt) do ( 19 | set /a n+=1 20 | if !n! neq %m% echo %%i>>wgcf-account.toml 21 | ) 22 | if exist temp.txt del temp.txt 2>nul 23 | 24 | echo license_key = '%key%' >> wgcf-account.toml 25 | 26 | type wgcf-account.toml 27 | 28 | echo update Cloudflare Warp account 29 | if exist wgcf-profile.conf del wgcf-profile.conf 2>nul 30 | .\wgcf_2.2.19_windows_amd64.exe update 31 | 32 | echo generate WireGuard profile: wgcf-profile.conf 33 | .\wgcf_2.2.19_windows_amd64.exe generate 34 | 35 | 36 | @REM set "filename=wgcf-profile.conf" 37 | 38 | set row= 39 | for /F "delims=" %%j in (wgcf-profile.conf) do ( 40 | if defined row echo.!row!>> wgcf-profile.conf.new 41 | set row=%%j 42 | ) 43 | 44 | if exist wgcf-profile.conf del wgcf-profile.conf 2>nul 45 | ren wgcf-profile.conf.new wgcf-profile.conf 46 | 47 | @REM Endpoint = engage.cloudflareclient.com:2408 48 | echo Endpoint = %ip% >> wgcf-profile.conf 49 | type wgcf-profile.conf 50 | 51 | 52 | 53 | echo 请使用 wireguad 客户端扫描下面的二维码进行翻墙!!! 54 | @REM http://bbs.bathome.net/thread-63928-1-1.html 55 | @REM set /a n=0 56 | @REM for /f "tokens=*" %%a in (url.txt) do ( 57 | @REM set /a n+=1 58 | @REM qr %%a !n!.png 59 | 60 | endlocal 61 | pause -------------------------------------------------------------------------------- /warp/wireguard-conf-generator.ps1: -------------------------------------------------------------------------------- 1 | 2 | # Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 3 | # Install-Module -Name QRCodeGenerator 4 | Import-Module QRCodeGenerator 5 | 6 | # $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' 7 | # $PSDefaultParameterValues['*:Encoding'] = 'utf8' 8 | 9 | $PSDefaultParameterValues = @{ 10 | "default:endpoint"="engage.cloudflareclient.com:2408" 11 | "default:license_key"="cbX45J60-491Su7HZ-yz2st601" 12 | } 13 | 14 | $Endpoint = Read-Host -Prompt "Enter your endpoint(default:engage.cloudflareclient.com:2408)" 15 | $license_key = Read-Host -Prompt "Enter your license_key(default:cbX45J60-491Su7HZ-yz2st601)" 16 | 17 | # If($Endpoint) 18 | # { 19 | # $PSDefaultParameterValues["default:endpoint"] = $Endpoint 20 | # } 21 | # If($license_key) 22 | # { 23 | # $PSDefaultParameterValues["default:license_key"] = $license_key 24 | # } 25 | 26 | if ([String]::IsNullOrEmpty($Endpoint)) 27 | { 28 | $Endpoint = $PSDefaultParameterValues["default:endpoint"] 29 | } 30 | if ([String]::IsNullOrEmpty($license_key)) 31 | { 32 | $license_key = $PSDefaultParameterValues["default:license_key"] 33 | } 34 | 35 | 36 | $CONFIG_PATH="wgcf-account.toml" 37 | $TRUE_FALSE=(Test-Path $CONFIG_PATH) 38 | if($TRUE_FALSE -eq "True") 39 | { 40 | Remove-Item -Recurse -Force $CONFIG_PATH 41 | } 42 | 43 | .\wgcf_2.2.19_windows_amd64.exe register --accept-tos yes 44 | 45 | $wgcf_account = Get-Content wgcf-account.toml -Raw 46 | # $wgcf_account -replace "(?m)^license_key.*","license_key = '$($PSDefaultParameterValues['default:license_key'])'" 47 | $achive_wgcf_account = $wgcf_account -replace "(?m)^license_key.*","license_key = '$license_key'" 48 | # 文件保存格式有问题导致程序wgcf_2.2.19_windows_amd64.exe 读取文件的时候报错 49 | # $achive_wgcf_account > conf\${license_key}_wgcf-account.toml 此格式为带有BOM的UTF16 50 | # $achive_wgcf_account > wgcf-account.toml 此格式为带有BOM的UTF16 51 | # Write-Output $achive_wgcf_account | Out-File -Encoding UTF8NoBOM conf\${license_key}_wgcf-account.toml 提示没有UTF8NoBOM会报红色错误,但是能运行 52 | # Write-Output $achive_wgcf_account | Out-File -Encoding UTF8NoBOM wgcf-account.toml 提示没有UTF8NoBOM会报红色错误,但是能运行 53 | # Write-Output $achive_wgcf_account | Out-File -Encoding utf8 wgcf-account.toml 此格式为带有BOM的UTF8 54 | # Write-Output $achive_wgcf_account | Out-File -Encoding ASCII conf\${license_key}_wgcf-account.toml 55 | Write-Output $achive_wgcf_account | Out-File -Encoding ASCII wgcf-account.toml 56 | Get-Content wgcf-account.toml 57 | 58 | 59 | $CONFIG_PATH="wgcf-profile.conf" 60 | $TRUE_FALSE=(Test-Path $CONFIG_PATH) 61 | if($TRUE_FALSE -eq "True") 62 | { 63 | Remove-Item -Recurse -Force $CONFIG_PATH 64 | } 65 | 66 | .\wgcf_2.2.19_windows_amd64.exe update 67 | .\wgcf_2.2.19_windows_amd64.exe generate 68 | Get-Content wgcf-profile.conf 69 | 70 | if (Test-Path wgcf-profile.conf) { 71 | <# Action to perform if the condition is true #> 72 | $wgcf_profile = Get-Content wgcf-profile.conf -Raw 73 | $achive_wgcf_profile = $wgcf_profile -replace "(?m)^Endpoint.*","Endpoint = $Endpoint" 74 | # $achive_wgcf_profile > conf\${license_key}_wgcf-profile.conf 75 | # $achive_wgcf_profile > wgcf-profile.conf 76 | # Write-Output $achive_wgcf_profile | Out-File -Encoding ASCII conf\${license_key}_wgcf-profile.conf 77 | Write-Output $achive_wgcf_profile | Out-File -Encoding ASCII wgcf-profile.conf 78 | Get-Content wgcf-profile.conf 79 | 80 | New-PSOneQRCodeText -Text $achive_wgcf_profile -Show 81 | } 82 | 83 | $connect_success_flag = Read-Host -Prompt "请测试扫描链接是否成功,若成功则将相关文件进行归档" 84 | if ($connect_success_flag -eq "y") { 85 | <# Action to perform if the condition is true #> 86 | Write-Output "进行归档!!!" 87 | Write-Output $achive_wgcf_account | Out-File -Encoding ASCII conf\${license_key}_wgcf-account.toml 88 | Write-Output $achive_wgcf_profile | Out-File -Encoding ASCII conf\${license_key}_wgcf-profile.conf 89 | New-PSOneQRCodeText -Text $achive_wgcf_profile -OutPath qrcode\${license_key}_wgcf-qrcode.png 90 | } 91 | 92 | 93 | # $txtStr=@" 94 | # [Interface] 95 | # PrivateKey = +ORb0mHSwm3GgVf2yFLvQrG0R1VjpDPuvzPk+Lp2QFE= 96 | # Address = 172.16.0.2/32 97 | # Address = 2606:4700:110:8936:420e:cfd0:653b:6ca4/128 98 | # DNS = 1.1.1.1 99 | # MTU = 1280 100 | # [Peer] 101 | # PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo= 102 | # AllowedIPs = 0.0.0.0/0 103 | # AllowedIPs = ::/0 104 | # Endpoint = $Endpoint 105 | # "@ 106 | 107 | # New-PSOneQRCodeText -Text $txtStr -Show 108 | 109 | 110 | # Write-Output hello 111 | pause 112 | -------------------------------------------------------------------------------- /warp/wireguard-conf-generator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | red(){ 4 | echo -e "\033[31m\033[01m$1\033[0m" 5 | } 6 | 7 | green(){ 8 | echo -e "\033[32m\033[01m$1\033[0m" 9 | } 10 | 11 | yellow(){ 12 | echo -e "\033[33m\033[01m$1\033[0m" 13 | } 14 | 15 | wgcf_exec="./wgcf-linux" 16 | wgcf_exec_version="2.2.19" 17 | 18 | # wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_windows_amd64.exe -O wgcf.exe 19 | # https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_linux_amd64 20 | # https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_freebsd_amd64 21 | # https://github.com/ViRb3/wgcf/releases/download/v2.2.19/wgcf_2.2.19_darwin_amd64 22 | 23 | 24 | rm -f wgcf-account.toml wgcf-profile.conf 25 | echo | ${wgcf_exec} register --accept-tos yes 26 | chmod +x wgcf-account.toml 27 | 28 | # clear 29 | yellow "请选择需要使用的 WARP 账户类型" 30 | echo "" 31 | echo -e " ${GREEN}1.${PLAIN} WARP 免费账户 ${YELLOW}(默认)${PLAIN}" 32 | echo -e " ${GREEN}2.${PLAIN} WARP+" 33 | echo -e " ${GREEN}3.${PLAIN} WARP Teams" 34 | echo "" 35 | read -p "请输入选项 [1-3]: " account_type 36 | if [[ $account_type == 2 ]]; then 37 | yellow "获取 CloudFlare WARP 账号密钥信息方法: " 38 | green "电脑: 下载并安装 CloudFlare WARP → 设置 → 偏好设置 → 账户 →复制密钥到脚本中" 39 | green "手机: 下载并安装 1.1.1.1 APP → 菜单 → 账户 → 复制密钥到脚本中" 40 | echo "" 41 | yellow "重要:请确保手机或电脑的 1.1.1.1 APP 的账户状态为WARP+!" 42 | echo "" 43 | read -rp "输入 WARP 账户许可证密钥 (26个字符): " warpkey 44 | until [[ $warpkey =~ ^[A-Z0-9a-z]{8}-[A-Z0-9a-z]{8}-[A-Z0-9a-z]{8}$ ]]; do 45 | red "WARP 账户许可证密钥格式输入错误,请重新输入!" 46 | read -rp "输入 WARP 账户许可证密钥 (26个字符): " warpkey 47 | done 48 | sed -i "s/license_key.*/license_key = \"$warpkey\"/g" wgcf-account.toml 49 | read -rp "请输入自定义设备名,如未输入则使用默认随机设备名: " devicename 50 | green "注册 WARP+ 账户中, 如下方显示: 400 Bad Request, 则使用 WARP 免费版账户" 51 | if [[ -n $devicename ]]; then 52 | ${wgcf_exec} update --name $(echo $devicename | sed s/[[:space:]]/_/g) 53 | else 54 | ${wgcf_exec} update 55 | fi 56 | ${wgcf_exec} generate 57 | elif [[ $account_type == 3 ]]; then 58 | ${wgcf_exec} generate 59 | chmod +x wgcf-profile.conf 60 | 61 | yellow "请选择申请 WARP Teams 账户方式" 62 | echo "" 63 | echo -e " ${GREEN}1.${PLAIN} 使用 Teams TOKEN ${YELLOW}(默认)${PLAIN}" 64 | echo -e " ${GREEN}2.${PLAIN} 使用提取出来的 xml 配置文件" 65 | echo "" 66 | read -p "请输入选项 [1-2]: " team_type 67 | 68 | if [[ $team_type == 2 ]]; then 69 | yellow "获取 WARP Teams 账户 xml 配置文件方法:https://blog.misaka.rest/2023/02/11/wgcfteam-config/" 70 | yellow "请将提取到的 xml 配置文件上传至:https://gist.github.com" 71 | read -rp "请粘贴 WARP Teams 账户配置文件链接:" teamconfigurl 72 | if [[ -n $teamconfigurl ]]; then 73 | teams_config=$(curl -sSL "$teamconfigurl" | sed "s/\"/\"/g") 74 | private_key=$(expr "$teams_config" : '.*private_key">\([^<]*\).*') 75 | private_v6=$(expr "$teams_config" : '.*v6":"\([^[&]*\).*') 76 | sed -i "s#PrivateKey.*#PrivateKey = $private_key#g" wgcf-profile.conf; 77 | sed -i "s#Address.*128#Address = $private_v6/128#g" wgcf-profile.conf; 78 | else 79 | red "未提供WARP Teams 账户配置文件链接,脚本退出!" 80 | exit 1 81 | fi 82 | else 83 | # 询问用户 WARP Teams 账户 TOKEN,并提示获取方式 84 | yellow "请在此网站:https://web--public--warp-team-api--coia-mfs4.code.run/ 获取你的 WARP Teams 账户 TOKEN" 85 | read -rp "请输入 WARP Teams 账户的 TOKEN:" teams_token 86 | 87 | if [[ -n $teams_token ]]; then 88 | # 生成 WireGuard 公私钥及 WARP 设备 ID 和 FCM Token 89 | private_key=$(wg genkey) 90 | public_key=$(wg pubkey <<< "$private_key") 91 | install_id=$(tr -dc 'A-Za-z0-9'