first commit

main
jack 4 weeks ago
commit d950d8e527
  1. 67
      .gitignore
  2. 1
      README.md
  3. 11
      api_tools/3dos/account.txt
  4. 173
      api_tools/3dos/daily_3dos.go
  5. 151
      api_tools/3dos/daily_3dos.py
  6. 33
      api_tools/3dos/main.go
  7. 10
      api_tools/3dos/requirements.txt
  8. 5
      api_tools/Agnt/config.json
  9. 153
      api_tools/Agnt/main.py
  10. BIN
      api_tools/dawn/aa.jpg
  11. 1
      api_tools/dawn/config.json
  12. 39666
      api_tools/dawn/main.f4627661.js
  13. 285
      api_tools/dawn/main.py
  14. 7
      api_tools/dawn/test.py
  15. 69
      galxe/lottery_detail.py
  16. 28
      galxe/lottery_list.py
  17. 2
      galxe/test.py
  18. 78
      monad/async_monadscore_query.py
  19. 66
      monad/monadscore_query.py
  20. 10
      monad/wallet.txt
  21. 66
      porxy_tools/clash/check_all_proxy.py
  22. 96
      porxy_tools/clash/check_now_proxy.py
  23. 703
      porxy_tools/clash/config.yaml
  24. 66
      porxy_tools/clash/generate_node.py
  25. 185
      porxy_tools/clash/merge.yaml
  26. 43
      porxy_tools/clash/switch2global.py
  27. 163
      porxy_tools/clash/switch_random_proxy_depin.py
  28. 164
      porxy_tools/clash/switch_random_proxy_web3.py
  29. 133
      test/click_test.py
  30. BIN
      test/src/1.png
  31. BIN
      test/src/2.png
  32. BIN
      test/src/3.png
  33. 13
      test/temp.txt

67
.gitignore vendored

@ -0,0 +1,67 @@
.DS_Store
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
.idea/*
xml_files/
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/
other/split_clash_config/split_config
ai_news/save_data
manual/clash/clash_each_node
manual/singbox/singbox_each_node

@ -0,0 +1 @@
Initial commit

@ -0,0 +1,11 @@
jack0210_@hotmail.com|||aaaAAA111!!!
yujieccyj01@hotmail.com|||aaaAAA111!!!
yujieccyj02@hotmail.com|||aaaAAA111!!!
yujieccyj03@hotmail.com|||aaaAAA111!!!
yujieccyj04@hotmail.com|||aaaAAA111!!!
yujieccyj05@hotmail.com|||aaaaAA111!!!
yujieccyj06@hotmail.com|||aaaAAA111!!!
yujieccyj07@hotmail.com|||aaaAAA111!!!
yujieccyj08@hotmail.com|||aaaAAA111!!!
yujieccyj09@hotmail.com|||aaaAAA111!!!
yujieccyj10@hotmail.com|||aaaAAA111!!!

@ -0,0 +1,173 @@
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
"sync"
)
type LoginResponse struct {
Data struct {
AccessToken string `json:"access_token"`
TokenType string `json:"token_type"`
Token string `json:"token"`
} `json:"data"`
}
type ClaimResponse struct {
Message string `json:"message"`
}
func dailyClaim3DOS(email, password string) string {
client := &http.Client{}
loginURL := "https://api.dashboard.3dos.io/api/auth/login"
loginPayload := map[string]string{
"email": email,
"password": password,
}
loginPayloadJSON, _ := json.Marshal(loginPayload)
loginReq, _ := http.NewRequest("POST", loginURL, bytes.NewBuffer(loginPayloadJSON))
loginReq.Header.Set("Accept", "application/json, text/plain, */*")
loginReq.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd")
loginReq.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
loginReq.Header.Set("Content-Type", "application/json")
loginReq.Header.Set("Origin", "https://dashboard.3dos.io")
loginReq.Header.Set("Priority", "u=1, i")
loginReq.Header.Set("Referer", "https://dashboard.3dos.io/")
loginReq.Header.Set("Sec-CH-UA", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`)
loginReq.Header.Set("Sec-CH-UA-Mobile", "?0")
loginReq.Header.Set("Sec-CH-UA-Platform", `"Windows"`)
loginReq.Header.Set("Sec-Fetch-Dest", "empty")
loginReq.Header.Set("Sec-Fetch-Mode", "cors")
loginReq.Header.Set("Sec-Fetch-Site", "same-site")
loginReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36")
loginResp, err := client.Do(loginReq)
if err != nil {
return fmt.Sprintf("%s: 登录请求失败", email)
}
defer loginResp.Body.Close()
if loginResp.StatusCode != 200 {
return fmt.Sprintf("%s: 登录失败", email)
}
var loginData LoginResponse
json.NewDecoder(loginResp.Body).Decode(&loginData)
token := loginData.Data.AccessToken
if token == "" {
token = loginData.Data.Token
}
tokenType := loginData.Data.TokenType
if token == "" || tokenType == "" {
return fmt.Sprintf("%s: 登录响应中未找到 Token 或 Token 类型", email)
}
authorizationHeader := fmt.Sprintf("%s %s", tokenType, token)
optionsURL := "https://api.dashboard.3dos.io/api/claim-reward"
optionsReq, _ := http.NewRequest("OPTIONS", optionsURL, nil)
optionsReq.Header.Set("Accept", "*/*")
optionsReq.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd")
optionsReq.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
optionsReq.Header.Set("Access-Control-Request-Headers", "authorization,cache-control,content-type,expires,pragma")
optionsReq.Header.Set("Access-Control-Request-Method", "POST")
optionsReq.Header.Set("Origin", "https://dashboard.3dos.io")
optionsReq.Header.Set("Priority", "u=1, i")
optionsReq.Header.Set("Referer", "https://dashboard.3dos.io/")
optionsReq.Header.Set("Sec-Fetch-Dest", "empty")
optionsReq.Header.Set("Sec-Fetch-Mode", "cors")
optionsReq.Header.Set("Sec-Fetch-Site", "same-site")
optionsReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36")
optionsResp, err := client.Do(optionsReq)
if err != nil {
return fmt.Sprintf("%s: OPTIONS 请求失败", email)
}
defer optionsResp.Body.Close()
claimURL := "https://api.dashboard.3dos.io/api/claim-reward"
claimPayload := map[string]string{
"id": "daily-reward-api",
}
claimPayloadJSON, _ := json.Marshal(claimPayload)
claimReq, _ := http.NewRequest("POST", claimURL, bytes.NewBuffer(claimPayloadJSON))
claimReq.Header.Set("Accept", "application/json, text/plain, */*")
claimReq.Header.Set("Authorization", authorizationHeader)
claimReq.Header.Set("Cache-Control", "no-cache")
claimReq.Header.Set("Content-Type", "application/json")
claimReq.Header.Set("Expires", "0")
claimReq.Header.Set("Origin", "https://dashboard.3dos.io")
claimReq.Header.Set("Pragma", "no-cache")
claimReq.Header.Set("Priority", "u=1, i")
claimReq.Header.Set("Referer", "https://dashboard.3dos.io/")
claimReq.Header.Set("Sec-CH-UA", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`)
claimReq.Header.Set("Sec-CH-UA-Mobile", "?0")
claimReq.Header.Set("Sec-CH-UA-Platform", `"Windows"`)
claimReq.Header.Set("Sec-Fetch-Dest", "empty")
claimReq.Header.Set("Sec-Fetch-Mode", "cors")
claimReq.Header.Set("Sec-Fetch-Site", "same-site")
claimReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36")
claimResp, err := client.Do(claimReq)
if err != nil {
return fmt.Sprintf("%s: claim-reward 请求失败", email)
}
defer claimResp.Body.Close()
var claimData ClaimResponse
json.NewDecoder(claimResp.Body).Decode(&claimData)
if claimResp.StatusCode != 200 && claimResp.StatusCode != 429 {
return fmt.Sprintf("%s: claim 报错: %s, 状态码%d", email, claimData.Message, claimResp.StatusCode)
}
return fmt.Sprintf("%s: %s", email, claimData.Message)
}
func main() {
fmt.Println("开始执行...")
accountList := []string{
"jack0210_@hotmail.com|||aaaAAA111!!!",
"yujieccyj01@hotmail.com|||aaaAAA111!!!",
"yujieccyj02@hotmail.com|||aaaAAA111!!!",
"yujieccyj03@hotmail.com|||aaaAAA111!!!",
"yujieccyj04@hotmail.com|||aaaAAA111!!!",
"yujieccyj05@hotmail.com|||aaaaAA111!!!",
"yujieccyj06@hotmail.com|||aaaAAA111!!!",
"yujieccyj07@hotmail.com|||aaaAAA111!!!",
"yujieccyj08@hotmail.com|||aaaAAA111!!!",
"yujieccyj09@hotmail.com|||aaaAAA111!!!",
"yujieccyj10@hotmail.com|||aaaAAA111!!!",
}
var wg sync.WaitGroup
results := make(chan string, len(accountList))
for _, account := range accountList {
if account == "" {
continue
}
wg.Add(1)
go func(acc string) {
defer wg.Done()
email, password := strings.Split(acc, "|||")[0], strings.Split(acc, "|||")[1]
results <- dailyClaim3DOS(email, password)
}(account)
}
wg.Wait()
close(results)
for result := range results {
fmt.Println(result)
}
}

@ -0,0 +1,151 @@
# -*- coding: utf-8 -*-
import os
from httpx import Client
from concurrent.futures import ThreadPoolExecutor, as_completed
def daily_claim_3dos(email, password):
client = Client(proxy="http://127.0.0.1:7890")
# client = Client()
login_url = "https://api.dashboard.3dos.io/api/auth/login"
login_headers = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Content-Type": "application/json",
"Origin": "https://dashboard.3dos.io",
"Priority": "u=1, i",
"Referer": "https://dashboard.3dos.io/",
"Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
"Sec-CH-UA-Mobile": "?0",
"Sec-CH-UA-Platform": '"Windows"',
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
login_payload = {
"email": email,
"password": password
}
try:
login_response = client.post(login_url, json=login_payload, headers=login_headers)
except Exception as e:
print(f"登录请求失败:{e}")
return False
if login_response.status_code == 200:
# print(f"{email}: 登录成功!")
login_data = login_response.json()
# print("登录响应内容:", login_data)
data = login_data.get("data")
token = data.get("access_token") or data.get("token")
token_type = data.get("token_type")
if not token or not token_type:
print("登录响应中未找到 Token 或 Token 类型!")
return False
authorization_header = f"{token_type} {token}"
else:
print("登录失败!")
print("登录响应状态码:", login_response.status_code)
print("登录响应内容:", login_response.json())
return False
options_url = "https://api.dashboard.3dos.io/api/claim-reward"
options_headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Access-Control-Request-Headers": "authorization,cache-control,content-type,expires,pragma",
"Access-Control-Request-Method": "POST",
"Origin": "https://dashboard.3dos.io",
"Priority": "u=1, i",
"Referer": "https://dashboard.3dos.io/",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
try:
options_response = client.options(options_url, headers=options_headers)
except Exception as e:
print(f"OPTIONS 请求失败:{e}")
return False
# print("OPTIONS 请求响应状态码:", options_response.status_code)
claim_url = "https://api.dashboard.3dos.io/api/claim-reward"
claim_headers = {
"Accept": "application/json, text/plain, */*",
"Authorization": authorization_header,
"Cache-Control": "no-cache",
"Content-Type": "application/json",
"Expires": "0",
"Origin": "https://dashboard.3dos.io",
"Pragma": "no-cache",
"Priority": "u=1, i",
"Referer": "https://dashboard.3dos.io/",
"Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
"Sec-CH-UA-Mobile": "?0",
"Sec-CH-UA-Platform": '"Windows"',
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
claim_payload = {
"id": "daily-reward-api"
}
try:
claim_response = client.post(claim_url, json=claim_payload, headers=claim_headers)
except Exception as e:
print(f"{email} claim-reward 请求失败:{e}")
return False
message = claim_response.json().get("message")
if claim_response.status_code not in [200, 429]:
print(f"{email} claim 报错: {message}, 状态码{claim_response.status_code}")
return False
result = f"{email}: {message}"
return result
def main():
print("开始执行...")
account_list = [
"jack0210_@hotmail.com|||aaaAAA111!!!",
"yujieccyj01@hotmail.com|||aaaAAA111!!!",
"yujieccyj02@hotmail.com|||aaaAAA111!!!",
"yujieccyj03@hotmail.com|||aaaAAA111!!!",
"yujieccyj04@hotmail.com|||aaaAAA111!!!",
"yujieccyj05@hotmail.com|||aaaaAA111!!!",
"yujieccyj06@hotmail.com|||aaaAAA111!!!",
"yujieccyj07@hotmail.com|||aaaAAA111!!!",
"yujieccyj08@hotmail.com|||aaaAAA111!!!",
"yujieccyj09@hotmail.com|||aaaAAA111!!!",
"yujieccyj10@hotmail.com|||aaaAAA111!!!",
]
with ThreadPoolExecutor(max_workers=len(account_list)) as executor:
futures = []
for account in account_list:
email, password = account.split("|||")
futures.append(executor.submit(daily_claim_3dos, email, password))
for future in as_completed(futures):
result = future.result()
if result:
print(result)
if __name__ == "__main__":
main()

@ -0,0 +1,33 @@
package main
import (
"fmt"
)
type Account struct {
Email string
Password string
}
func main() {
// 直接写死的账户信息
accounts := []Account{
{Email: "jack0210_@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj01@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj02@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj03@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj04@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj05@hotmail.com", Password: "aaaaAA111!!!"},
{Email: "yujieccyj06@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj07@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj08@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj09@hotmail.com", Password: "aaaAAA111!!!"},
{Email: "yujieccyj10@hotmail.com", Password: "aaaAAA111!!!"},
}
// 遍历账户并执行操作
for _, account := range accounts {
fmt.Printf("Processing account: %s\n", account.Email)
// 在这里添加您需要的操作
}
}

@ -0,0 +1,10 @@
anyio==4.8.0
certifi==2025.1.31
h11==0.14.0
httpcore==1.0.7
httpx==0.27.2
idna==3.10
setuptools==75.8.0
sniffio==1.3.1
typing_extensions==4.12.2
wheel==0.45.1

@ -0,0 +1,5 @@
{
"cookies": [
"_ga=GA1.1.691286698.1738712937; privy-session=privy.agnthub.ai; _ga_HZ81TDGZGW=GS1.1.1741104719.42.1.1741105531.0.0.0; privy-token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlVZWDlVRXppSll1ajlpeTFEbmc5NnY3OXZQcGMtaV9DdXU0bm0wWnVCVkkifQ.eyJzaWQiOiJjbTZ3ZXR2eXQwMDBmOHNvajR3YXh0ZjQ4IiwiaXNzIjoicHJpdnkuaW8iLCJpYXQiOjE3NDExNDM1ODUsImF1ZCI6ImNtNmplc3V4ZDAwYTlvam8waTlybHh1ZGsiLCJzdWIiOiJkaWQ6cHJpdnk6Y202cjUzcHg2MDBid3A1aHlncW0zc3pxayIsImV4cCI6MTc0MTE0NzE4NX0.7DnKA0WG5b2CV2C5-iJlF0miKNP9t2ofGJbRe6C4-SOPnSm747ceG9RGUM15b1VdUFOOmXjc4vxUa4rlFVlbtg; privy-id-token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlVZWDlVRXppSll1ajlpeTFEbmc5NnY3OXZQcGMtaV9DdXU0bm0wWnVCVkkifQ.eyJjciI6IjE3Mzg3MTM0NjIiLCJsaW5rZWRfYWNjb3VudHMiOiJbe1widHlwZVwiOlwidHdpdHRlcl9vYXV0aFwiLFwic3ViamVjdFwiOlwiMTYzOTM3MzU1ODA5Mzg0MDM4NFwiLFwidXNlcm5hbWVcIjpcIkFsaXNoYU1hcnQxNjkzOFwiLFwibmFtZVwiOlwiQWxpc2hhIE1hcnRpblwiLFwicGZwXCI6XCJodHRwczovL3Bicy50d2ltZy5jb20vcHJvZmlsZV9pbWFnZXMvMTYzOTM3NDE0MDM1OTc0MTQ0MC9LUXg0U0h6al9ub3JtYWwuanBnXCIsXCJsdlwiOjE3MzkwMzIxMzB9LHtcInR5cGVcIjpcIndhbGxldFwiLFwiYWRkcmVzc1wiOlwiMHhjNTVEM2VhNEZmMTVkRDdGMTQ2MjUzNTEyOEZEYmZBQTlGYmQzZUEzXCIsXCJjaGFpbl90eXBlXCI6XCJldGhlcmV1bVwiLFwid2FsbGV0X2NsaWVudF90eXBlXCI6XCJwcml2eVwiLFwibHZcIjoxNzM4NzEzNDczfSx7XCJ0eXBlXCI6XCJkaXNjb3JkX29hdXRoXCIsXCJzdWJqZWN0XCI6XCI5NTI1MTEzNDk0MTY2NjEwMTJcIixcInVzZXJuYW1lXCI6XCJtYXJjaDQwNjQjMFwiLFwibHZcIjoxNzM4NzYzMzE5fV0iLCJpc3MiOiJwcml2eS5pbyIsImlhdCI6MTc0MTE0MzU4NSwiYXVkIjoiY202amVzdXhkMDBhOW9qbzBpOXJseHVkayIsInN1YiI6ImRpZDpwcml2eTpjbTZyNTNweDYwMGJ3cDVoeWdxbTNzenFrIiwiZXhwIjoxNzQxMTQ3MTg1fQ.esW33-NgR46Mf5HMA3rcNg06eigNvtExRNVk9jw94CWvVO4VrUktZ9XUsBoJrZKvs9lUu3n2kr_e14iS_aZzUA"
]
}

@ -0,0 +1,153 @@
# -*- coding: utf-8 -*-
import time
import os
import json
import httpx
class AgntTask:
def __init__(self, cookies_list):
self.cookies_list = cookies_list
def daily_task(self):
for cookies in self.cookies_list:
url = "https://hub-api.agnthub.ai/api/daily-rewards/claim"
headers = {
"accept": "application/json, text/plain, */*",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "zh-CN,zh;q=0.9",
"content-length": "0",
"cookie": cookies,
"origin": "https://quests.agnthub.ai",
"priority": "u=1, i",
"referer": "https://quests.agnthub.ai/",
"sec-ch-ua": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
try:
response = httpx.post(url, headers=headers)
print(response.json())
except Exception as e:
print(str(e))
def upload_task(self):
for cookies in self.cookies_list:
url = "https://hub-api.agnthub.ai/api/tasks/make-ai-laugh/34ecad1e-94df-48ba-b5f4-242fdd9d6546"
headers = {
"accept": "application/json, text/plain, */*",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "zh-CN,zh;q=0.9",
"content-length": "0",
"cookie": cookies,
"origin": "https://quests.agnthub.ai",
"priority": "u=1, i",
"referer": "https://quests.agnthub.ai/",
"sec-ch-ua": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
try:
response = httpx.post(url, headers=headers)
print(response.json())
except Exception as e:
print(str(e))
def tasks(self):
tasks_list = [
"6813de78-f821-4a84-8e8c-3aa89c15b2aa",
"fce2e806-a6c7-4de2-abc2-260d13bcfb2f",
"0bcb7d19-7c63-4933-96b0-00141ce54dbe",
"2f3241c5-29a0-4f47-acf3-9370baf94e74",
"d2b35062-40c1-48b8-bca5-c48779ccc66d",
"ab2fd158-b894-47bc-aadb-645259b46cc0",
"3861cd8e-5393-4285-b6ee-29a5ee301ee5",
"1a75844a-a108-4fbd-bfc3-c7476b26b73d",
"217e2f67-c110-4ef7-a636-8ac0623df3e8",
"49c1db40-8ecf-4454-af0a-fcc81b222135",
"2e6ff98c-132b-4886-8f38-6c89d1a7b02a",
"9fc278e8-4045-4130-9f52-6ce3b713318c",
"4f913da3-58b6-4636-a2c2-912fb01c73d4",
"6216f4e1-eafb-4442-a5d4-5b1830f89655",
"ebbba0a4-96d9-4fa4-85f9-6fb07fbc282a",
"5172f361-d28e-4aa2-a3ba-2adfe5057539",
"f81146e9-9ef9-4979-b0a0-437ea5c3e1bb",
"22301ec3-3a75-4758-a886-ab768312ffe5",
"6debaef3-844e-40f3-be6d-d99a6fd9f2a1",
"932d0c29-22ad-4be5-92b4-fc3a2e13aaed",
"05027b13-88a3-42a4-992a-0ce2a53068d4",
"9e0addfa-51fd-4f3b-a6f2-8dbe301265aa",
"4a42ba64-7822-469c-8899-bc07b5dd5d69",
"516d941e-b006-4744-a190-6c3207750854",
"bf9e7362-5eed-4110-bbe3-1289722a36b3",
"7eed7668-e71a-42ed-98ac-a0ded8bc0296",
"2cac41ba-36dd-4389-91b6-f8ee840083db",
"6f888d49-2b59-4ba9-a7be-199dceff45ab"
]
for cookies in cookies_list:
for tasks in tasks_list:
url = "https://hub-api.agnthub.ai/api/tasks/start/" + tasks
headers = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Content-Length": "0",
"Cookie": cookies,
"Origin": "https://quests.agnthub.ai",
"Priority": "u=1, i",
"Referer": "https://quests.agnthub.ai/",
"Sec-CH-UA": '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
"Sec-CH-UA-Mobile": "?0",
"Sec-CH-UA-Platform": '"Windows"',
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
for retry in range(1, 4):
try:
response = httpx.post(url, headers=headers)
if response.status_code == 201:
print("请求成功!")
print(response.json())
break
else:
print(f"请求失败,状态码:{response.status_code}")
print(response.text)
except Exception as e:
print(f"出现错误:{e}\n重试...")
time.sleep(0.5)
if __name__ == '__main__':
config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "config.json")
try:
with open(config_path, "r", encoding="utf-8") as file:
config_data = json.load(file)
except Exception as e:
print(f"读取配置失败:{e}")
exit(1)
cookies_list = config_data.get("cookies", [])
A = AgntTask(cookies_list)
A.daily_task()
A.upload_task()
A.tasks()

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

@ -0,0 +1 @@
{"version": "1.1.3", "username": "yujieccyj01@hotmail.com", "password": "aaaAAA111!!!", "appid": "67bc1b9b20f45f80e7c94634"}

File diff suppressed because one or more lines are too long

@ -0,0 +1,285 @@
import base64
import datetime
import json
import logging
import os.path
import time
import requests
import ddddocr
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 配置文件路径
CONFIG_FILE = "config.json"
# 初始化配置
def init_config():
if not os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
json.dump({}, f)
# 读取配置
def load_config():
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
return json.load(f)
# 保存配置
def save_config(config):
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
json.dump(config, f, indent=4)
# 获取版本号
def get_version(config):
if "version" not in config:
# 这里可以添加获取版本号的逻辑
config["version"] = "1.1.3"
save_config(config)
return config["version"]
# 获取App ID
def get_app_id(config):
if "appid" not in config:
response = requests.get(
f"https://www.aeropres.in/chromeapi/dawn/v1/appid/getappid?app_v={get_version(config)}",
proxies=config.get("proxy"),
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"},
verify=False,
timeout=15
)
if response.status_code != 200:
raise Exception("获取appid失败")
config["appid"] = response.json()["data"]["appid"]
save_config(config)
return config["appid"]
# 获取Puzzle ID
def get_puzzle_id(config):
app_id = get_app_id(config)
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Origin": "chrome-extension://fpdkjdnhkakefebpekbdhillbhonfjjp",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"priority": "u=1, i",
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
}
response = requests.get(
f"https://www.aeropres.in/chromeapi/dawn/v1/puzzle/get-puzzle?appid={app_id}",
proxies=config.get("proxy"),
headers=headers,
verify=False,
timeout=15
)
if response.status_code not in [200, 201]:
raise Exception("获取puzzle_id失败")
res_json = response.json()
if not res_json.get('success', False):
raise Exception("获取puzzle_id结果失败")
return res_json["puzzle_id"]
# 获取Puzzle Code
def get_puzzle_code(config):
puzzle_id = get_puzzle_id(config)
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Origin": "chrome-extension://fpdkjdnhkakefebpekbdhillbhonfjjp",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"priority": "u=1, i",
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
}
response = requests.get(
f"https://www.aeropres.in/chromeapi/dawn/v1/puzzle/get-puzzle-image?puzzle_id={puzzle_id}&appid={get_app_id(config)}",
proxies=config.get("proxy"),
headers=headers,
verify=False,
timeout=15
)
if response.status_code != 200:
raise Exception("获取puzzle_url失败")
res_json = response.json()
if not res_json.get('success', False):
raise Exception("获取puzzle_url结果失败")
imgBase64 = res_json["imgBase64"]
data = base64.b64decode(imgBase64)
return get_code_with_img(puzzle_id, img_data=data)
# 获取验证码
def get_code_with_img(puzzle_id, img_data):
print(puzzle_id)
with open(f'{str(int(time.time()))}.jpg', 'wb') as file:
file.write(img_data)
return False
# 获取Token
def get_token(config):
if "token" not in config:
retry_count = config.get('retry', 3)
code = ""
puzzle_id = ""
while retry_count > 0:
try:
puzzle_id = get_puzzle_id(config)
code = get_puzzle_code(config)
break
except Exception as e:
logging.error(f"获取token失败,{e}")
retry_count -= 1
if not code or not puzzle_id:
return False
data = {
"username": config.get("username", ""),
"password": config.get("password", ""),
"logindata": {"_v": {"version": get_version(config)},
"datetime": datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%fZ")[:-3]},
"puzzle_id": puzzle_id,
"ans": code,
"appid": get_app_id(config),
}
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Origin": "chrome-extension://fpdkjdnhkakefebpekbdhillbhonfjjp",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"priority": "u=1, i",
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
}
retry_count = config.get('retry', 3)
while retry_count > 0:
try:
response = requests.post(
f"https://www.aeropres.in/chromeapi/dawn/v1/user/login/v2?appid={get_app_id(config)}",
json=data,
proxies=config.get("proxy"),
verify=False,
timeout=15,
headers=headers
)
if response.status_code != 200:
raise Exception("获取token失败")
res_json = response.json()
if not res_json.get('success', False):
raise Exception("获取token结果失败")
config["token"] = res_json["data"]["token"]
save_config(config)
break
except Exception as e:
logging.error(f"获取token失败,{e}")
retry_count -= 1
return config.get("token", "")
# 获取积分
def get_point(config):
headers = {
"Authorization": f"Bearer {config.get('token', '')}",
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"sec-ch-ua": '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
}
response = requests.get(
f"https://www.aeropres.in/api/atom/v1/userreferral/getpoint?appid={get_app_id(config)}",
headers=headers,
proxies=config.get("proxy"),
verify=False,
timeout=15
)
if response.status_code != 200:
raise Exception(f"获取积分失败,{response.text}")
if not response.json().get('success', False):
raise Exception(f"获取积分失败,{response.json()}")
# 保持活跃
def keep_alive(config):
headers = {
"Authorization": f"Bearer {config.get('token', '')}",
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
}
data = {
"username": config.get("username", ""),
"extensionid": "fpdkjdnhkakefebpekbdhillbhonfjjp",
"numberoftabs": 0,
"_v": get_version(config)
}
response = requests.post(
f"https://www.aeropres.in/chromeapi/dawn/v1/userreward/keepalive?appid={get_app_id(config)}",
json=data,
headers=headers,
proxies=config.get("proxy"),
verify=False,
timeout=15
)
if response.status_code != 200:
raise Exception(f"保持活跃失败,{response.text}")
if not response.json().get('success', False):
raise Exception(f"保持活跃失败,{response.json()}")
# 主函数
def main():
init_config()
config = load_config()
while True:
token = get_token(config)
if not token:
time.sleep(60)
del config['token']
save_config(config)
continue
retry_count = 5
while retry_count > 0:
err = False
try:
get_point(config)
except Exception as e:
logging.error(f"获取积分失败,{e}")
err = True
try:
keep_alive(config)
except Exception as e:
logging.error(f"保持活跃失败,{e}")
err = True
if not err:
retry_count = 5
else:
retry_count -= 1
if retry_count <= 0:
break
time.sleep(5 * 60)
if __name__ == '__main__':
main()

@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
import ddddocr
with open('aa.jpg', 'rb') as f:
img_bytes = f.read()
res = ddddocr.DdddOcr(show_ad=False).classification(img_bytes)
print(res)

@ -0,0 +1,69 @@
import httpx
from bs4 import BeautifulSoup
proxy = "http://127.0.0.1:7890"
def get_lottery_info(url):
headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "max-age=0",
"cookie": 'wagmi.store={"state":{"connections":{"__type":"Map","value":[]},"chainId":42161,"current":null},"version":2}; _ga=GA1.1.1564597071.1751872255; _ga_F9J18S6WJV=GS2.1.s1751946352$o3$g1$t1751946355$j57$l0$h0; ph_phc_9sSugZ5bXYldHSU4TaDf0jB2RBFxxCLFKQ91N6CqWhL_posthog=%7B%22distinct_id%22%3A%220197e3b9-3085-7350-9fed-4a9ef545e3ab%22%2C%22%24sesid%22%3A%5Bnull%2Cnull%2Cnull%5D%7D',
"priority": "u=0, i",
"sec-ch-ua": '"Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"macOS"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
}
with httpx.Client(proxies={"http://": proxy, "https://": proxy}) as client:
response = client.get(url, headers=headers)
if response.status_code != 200:
print(f"请求失败,状态码: {response.status_code}")
return None
html = response.text
soup = BeautifulSoup(html, "html.parser")
data = {}
title_script_tags = soup.select("body > div.flex.flex-col.flex-nowrap.min-h-dvh.relative.pb-\[66px\].sm\:pb-0 > main > div.flex-1.max-w-\[100vw\].w-full > section > div > div.flex.justify-between.flex-col.w-full.md\:flex-row.sm\:justify-center > div > div.flex.flex-col.px-0.sm\:mb-5.w-full.sm\:px-0.sm\:py-0.sm\:flex-row.sm\:justify-between.sm\:gap-\[72px\] > div > div.flex.gap-2.mt-4.sm\:mt-5.sm\:gap-4 > div.font-mona.flex-1.flex.items-center.line-clamp-2.text-size-20.sm\:text-size-28.mh-20.font-extrabold")
description_script_tags = soup.select("#radix-«r2d» > div.flex-1.overflow-y-auto.mt-6.sm\:mt-7 > div > div")
print(description_script_tags)
for description_script_tag in description_script_tags:
print(description_script_tag.text)
return data
def main():
url = "https://app.galxe.com/quest/tiktrix/GCqaRtftKv"
result = get_lottery_info(url)
if not result:
print("获取数据失败")
return
if len(result) == 0:
print("获取数据失败")
return
try:
for data in result:
print(data.text) # 打印标签中的文本内容
except Exception as e:
print('数据格式错误: {}'.format(e))
if __name__ == "__main__":
main()

@ -0,0 +1,28 @@
import time
from playwright.sync_api import sync_playwright
def extract_content():
with sync_playwright() as p:
# 启动浏览器(无头)模式并设置代理
browser = p.chromium.launch(headless=True, proxy={"server": "http://127.0.0.1:7890"})
page = browser.new_page()
url = "https://app.galxe.com/quest/tiktrix/GCqaRtftKv"
page.goto(url)
page.wait_for_load_state()
time.sleep(5)
selector = r'body > div.flex.flex-col.flex-nowrap.min-h-dvh.relative.pb-\[66px\].sm\:pb-0 > main > div.flex-1.max-w-\[100vw\].w-full > section > div > div.flex.justify-between.flex-col.w-full.md\:flex-row.sm\:justify-center > div > div.flex.flex-col.px-0.sm\:mb-5.w-full.sm\:px-0.sm\:py-0.sm\:flex-row.sm\:justify-between.sm\:gap-\[72px\] > div > div.flex.gap-2.mt-4.sm\:mt-5.sm\:gap-4 > div.font-mona.flex-1.flex.items-center.line-clamp-2.text-size-20.sm\:text-size-28.mh-20.font-extrabold'
content_elements = page.query_selector_all(selector)
if content_elements:
for element in content_elements:
print(element.text_content())
# 关闭浏览器
browser.close()
if __name__ == "__main__":
extract_content()

@ -0,0 +1,2 @@
l = "__typename":"Campaign","id":"GCqaRtftKv","numberID":346610,"name":"Win a Share of 1,000 USDT u0026 50,000 $TRIX Airdrop (FCFS)","description":"TikTrix transforms social engagement by combining short-form media with casual gaming. nn**Complete these simple steps to join the TikTrix quest and claim your rewards**nn⚡ FCFS Airdrop on TikTrixn20 $TRIX for the first 2,500 verified users on TikTrix Event page (total: 50,000 $TRIX)nn🎟 Rafflen1,000 USDT raffle for users who complete the quest (100 winners will receive 10 USDT each)nn🎯 Just complete these 3 simple steps:n- Visit our event pagen- Join our Discordn- Follow us on Twittern","startTime":1751533200,"endTime":1752138000,"status":"Active","type":"Token","chain":"MATIC","inWatchList":false,"bannerUrl":"","watchlistPro":null,"participants":{"__typename":"CampaignParticipant","participants":{"__typename":"ParticipantsConnection","list":[{"__typename":"ParticipationRecord","address":{"__typename":"Address","id":"ch8taW4SJz7dadCdip7LNb","avatar":"https://api.galxe.com/v1/avatar?size=120u0026variant=marbleu0026name=0x000014d697d9040bd9c32904a3b1c821e83da4d4"}
print(len(l))

@ -0,0 +1,78 @@
import os
from playwright.sync_api import sync_playwright
from screeninfo import get_monitors
def get_wallet_detail(wallet_address: str, page):
# 定义输入框和按钮的选择器
input_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > input'
button_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > button.px-4.py-2.text-white.font-semibold.rounded-md.bg-purple-600.cursor-pointer.hover\\:bg-purple-700'
try:
# 等待输入框出现并确保其可交互
page.wait_for_selector(input_selector, state='visible', timeout=10000)
# 清除输入框内容(如果有默认值)
page.fill(input_selector, '')
# 填入钱包地址
page.fill(input_selector, wallet_address)
# 等待按钮出现并尝试点击,捕获异常以忽略找不到按钮的情况
page.wait_for_selector(button_selector, state='visible', timeout=10000)
try:
page.click(button_selector)
print(f"已成功点击按钮,查询钱包地址:{wallet_address}")
except Exception as e:
print(f"未找到按钮,跳过点击操作。钱包地址:{wallet_address}")
except Exception as e:
print(f"查询钱包 {wallet_address} 时出错: {str(e)}")
def main():
# 读取钱包地址
wallet_list = []
wallet_txt_path = os.path.join(os.getcwd(), "wallet.txt")
with open(wallet_txt_path, "r") as file:
wallet_list = [line.strip() for line in file]
if len(wallet_list) == 0:
print("未找到钱包地址,程序退出。")
return
if len(wallet_list) > 10:
print("钱包地址数量超过10个,仅处理前10个。")
wallet_list = wallet_list[:10]
# 获取屏幕大小
monitors = get_monitors()
screen_width = monitors[0].width
screen_height = monitors[0].height
# 每个窗口的大小
window_width = screen_width // 5
window_height = screen_height // 2
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, args=["--start-maximized"])
for i, wallet in enumerate(wallet_list):
# 计算窗口位置
row = i // 5
col = i % 5
x = col * window_width
y = row * window_height
# 创建新页面并设置窗口位置
context = browser.new_context()
page = context.new_page()
page.set_viewport_size({'width': window_width, 'height': window_height})
page.context.set_window_position(x, y)
page.goto("https://repute.monadscore.xyz/")
print(f"已打开浏览器实例,查询钱包地址:{wallet}")
get_wallet_detail(wallet, page)
print("所有浏览器已打开,可以手动操作。")
input("按任意键退出程序...")
# 关闭浏览器
browser.close()
if __name__ == "__main__":
main()

@ -0,0 +1,66 @@
import os
from playwright.sync_api import sync_playwright
import time
def get_wallet_detail(wallet_address: str, page):
# 定义输入框和按钮的选择器
input_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > input'
button_selector = '#root > div > div > div.min-h-screen.overflow-hidden.sm\\:ml-0 > div:nth-child(3) > div > div > div.flex.flex-col.space-y-4 > button.px-4.py-2.text-white.font-semibold.rounded-md.bg-purple-600.cursor-pointer.hover\\:bg-purple-700'
try:
# 等待输入框出现并确保其可交互
page.wait_for_selector(input_selector, state='visible', timeout=10000)
# 清除输入框内容(如果有默认值)
page.fill(input_selector, '')
# 填入钱包地址
page.fill(input_selector, wallet_address)
# 等待按钮出现并尝试点击,捕获异常以忽略找不到按钮的情况
page.wait_for_selector(button_selector, state='visible', timeout=10000)
try:
page.click(button_selector)
print(f"已成功点击按钮,查询钱包地址:{wallet_address}")
except Exception as e:
print(f"未找到按钮,跳过点击操作。钱包地址:{wallet_address}")
except Exception as e:
print(f"查询钱包 {wallet_address} 时出错: {str(e)}")
def run():
with sync_playwright() as p:
browser = p.chromium.launch(
headless=True,
args=["--start-maximized"]
)
wallet_list = []
wallet_txt_path = os.path.join(os.getcwd(), "wallet.txt")
with open(wallet_txt_path, "r") as file:
wallet_list = [line.strip() for line in file]
if len(wallet_list) == 0:
print("未找到钱包地址")
return
context = browser.new_context(no_viewport=True)
for i, wallet in enumerate(wallet_list, 1):
page = context.new_page()
page.goto("https://repute.monadscore.xyz/")
print(f"已打开第 {i} 个标签页")
time.sleep(1)
print(f'正在查询钱包 {i} : {wallet}')
get_wallet_detail(wallet, page)
time.sleep(3600)
context.close()
browser.close()
def main():
while True:
run()
time.sleep(5)
if __name__ == "__main__":
main()

@ -0,0 +1,10 @@
0xe50B77Cd771243b8Ae1d6ce33b4E13ECC5Fa28a6
0x9ea2ECAD4090E32916e03b77d7C75CbF6C8E0A55
0xE8A4b0C04300154DC9B1D0e565Ba70F996614690
0x1b623c5d70c93b437d93c305bf2cfa389095f636
0x06D25c3e0E1F753ac0486a3f8aaD7259149656cB
0x15cFEE34Ca4541CAc9a1c4B6F6aB47A65877E240
0x7aBF0dA8Ac07B6dE7206e467988455E1AD0b60B5
0xF736f45d4663a8D8DfF7EFA55b1Cf6Fe38D026c8
0x83173eECf3a6d9ABB79682568e16c2eAd361620e
0xa401b85B4849Fc7610Bd180cc937859C78528F47

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
# 检查所有代理延时
import asyncio
import aiohttp
nodes_select = 0
ip = "192.168.31.201"
nodes = [
['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010'],
['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', '32010', '32011', '32012']
]
node = nodes[nodes_select]
async def check(url, session):
for retry in range(3):
try:
async with session.get(url) as response:
if response.status == 200:
print(f"Success: {url}")
return True
else:
print(f"Failed: {url} (Status: {response.status})")
except Exception as e:
print(f"Error: {url} - {str(e)}")
return False
async def prepare_check(node_url, ports, proxy_name_list):
async with aiohttp.ClientSession() as session:
tasks = []
for port in ports:
proxy_url = f"{node_url}:{port}"
for proxy in proxy_name_list:
url = f"{proxy_url}/api/proxies/{proxy}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204"
tasks.append(check(url, session))
await asyncio.gather(*tasks)
async def load_nodes_details():
tasks = []
async with aiohttp.ClientSession() as session:
for port in node:
clash_tool_url = f"{ip}:{port}"
url = f"{clash_tool_url}/api/proxies"
try:
async with session.get(url) as response:
if response.status == 200:
proxies = await response.json()
proxy_name_list = list(proxies['proxies'].keys())
tasks.append(prepare_check(ip, port, proxy_name_list))
else:
print(f"Failed to load proxies from {url} (Status: {response.status})")
except Exception as e:
print(f"Error: {url} - {str(e)}")
await asyncio.gather(*tasks)
async def main():
await load_nodes_details()
if __name__ == "__main__":
asyncio.run(main())
print("All done!")

@ -0,0 +1,96 @@
# -*- coding: utf-8 -*-
# 获取当前使用代理, 并检查延时
from urllib.parse import quote
import subprocess
import httpx
nodes = [
["192.168.31.201", ['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009',
'58010'], ],
["192.168.31.201", ['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009',
'32010', '32011', '32012']],
["127.0.0.1", ['17888']]
]
selected_nodes = nodes[0]
def check_proxy(proxy_url, choose_proxy):
encode_proxy_name = quote(choose_proxy, safe="")
command = [
"curl",
"-X", "GET",
f"{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204"
]
try:
result = subprocess.run(command, capture_output=True, text=True, check=True)
# print("Output:", result.stdout)
if 'Timeout' in result.stdout:
return "Timeout"
res = eval(result.stdout).get("meanDelay")
return f"meanDelay: {res}"
except subprocess.CalledProcessError as e:
print("Error:", e.stderr)
return str(e)
def check_now_proxy(client: httpx.Client, ip, port):
url_and_port = f"{ip}:{port}"
url = f"http://{ip}:{port}/api/proxies"
headers = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.8",
"Connection": "keep-alive",
"Host": url_and_port,
"Referer": f"http://{url_and_port}/",
"Sec-CH-UA": '"Chromium";v="134", "Not:A-Brand";v="24", "Brave";v="134"',
"Sec-CH-UA-Mobile": "?0",
"Sec-CH-UA-Platform": '"macOS"',
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"Sec-GPC": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
}
try:
response = client.get(url, headers=headers)
json_data = response.json()
if not json_data or response.status_code != 200:
print("JSON data is empty or request failed")
return
proxies = json_data.get("proxies")
proxy_global = proxies.get("GLOBAL")
now_proxy = proxy_global.get("now")
check_result = check_proxy(url_and_port, now_proxy)
message = f"{url_and_port} --- {now_proxy} --- {check_result}"
print(message)
return now_proxy
except httpx.RequestError as e:
print(f"Request failed: {e}")
return None
def main():
ip = selected_nodes[0]
now_proxy_list = []
with httpx.Client() as client:
for port in selected_nodes[1]:
now_proxy = check_now_proxy(client, ip, port)
if now_proxy:
now_proxy_list.append(now_proxy)
# 查看当前代理节点有没有使用重复
if len(now_proxy_list) != len(set(now_proxy_list)):
print("当前代理节点有使用重复")
return
if __name__ == "__main__":
main()

@ -0,0 +1,703 @@
allow-lan: true
bind-address: '*'
dns:
enable: false
fallback: []
ipv6: false
nameserver: []
external-controller: 0.0.0.0:9090
log-level: info
mixed-port: 7890
mode: rule
proxies:
- alterId: 0
cipher: auto
name: JP-Detour 01 AEAD
port: 15601
server: jp-01.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: JP-Detour 02 AEAD
port: 15602
server: jp-02.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: JP-Detour 03 AEAD
port: 15603
server: jp-03.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: JP-Detour 04 AEAD
port: 15604
server: jp-04.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: JP-Detour 05 AEAD
port: 15605
server: jp-05.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: JP-Detour 06 AEAD
port: 15606
server: jp-06.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: SG-Detour 01 AEAD
port: 15301
server: sg-detour-01.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: SG-Detour 02 AEAD
port: 15302
server: sg-detour-02.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: SG-Detour 03 AEAD
port: 15303
server: sg-detour-03.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 01 AEAD
port: 15201
server: tw-detour-01.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 02 AEAD
port: 15202
server: tw-detour-02.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 03 AEAD
port: 15203
server: tw-detour-03.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 05 AEAD
port: 15205
server: tw-detour-05.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 06 AEAD
port: 15206
server: tw-detour-06.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 08 AEAD
port: 15208
server: tw-detour-08.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 09 AEAD
port: 15209
server: tw-detour-09.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 10 AEAD
port: 15210
server: tw-detour-10.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 12 AEAD
port: 15212
server: tw-detour-12.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 13 AEAD
port: 15213
server: tw-detour-13.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 15 AEAD
port: 15215
server: tw-detour-15.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 16 AEAD
port: 15216
server: tw-detour-16.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 18 AEAD
port: 15218
server: tw-detour-18.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 19 AEAD
port: 15219
server: tw-detour-19.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 20 AEAD
port: 15220
server: tw-detour-20.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 22 AEAD
port: 15222
server: tw-detour-22.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alterId: 0
cipher: auto
name: TW-Detour 23 AEAD
port: 15223
server: tw-detour-23.grabgo.pro
type: vmess
uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
ws-path: /
- alpn:
- h2
- http/1.1
name: 台湾-TW-1-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: tw-1.chianginc.com
skip-cert-verify: true
sni: tw-1.chianginc.com
type: trojan
- alpn:
- h2
- http/1.1
name: 台湾-TW-2-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: tw-2.chianginc.com
skip-cert-verify: true
sni: tw-2.chianginc.com
type: trojan
- alpn:
- h2
- http/1.1
name: 新加坡-SG-1-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: sg-1.victoriamitrepeak.com
skip-cert-verify: true
sni: sg-1.victoriamitrepeak.com
type: trojan
- alpn:
- h2
- http/1.1
name: 新加坡-SG-2-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: sg-2.victoriamitrepeak.com
skip-cert-verify: true
sni: sg-2.victoriamitrepeak.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-FW-JP-TEST1-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 5011
server: fw-jp-test1.trojanwheel.com
skip-cert-verify: true
sni: fw-jp-test1.trojanwheel.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-FW-JP-TEST2-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 5012
server: fw-jp-test2.trojanwheel.com
skip-cert-verify: true
sni: fw-jp-test2.trojanwheel.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-FW-JP1-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 5011
server: fw-jp1.rise-fuji.com
skip-cert-verify: true
sni: fw-jp1.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-FW-JP2-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 5012
server: fw-jp2.rise-fuji.com
skip-cert-verify: true
sni: fw-jp2.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-OS-1-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: os-1.rise-fuji.com
skip-cert-verify: true
sni: os-1.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-OS-2-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: os-2.rise-fuji.com
skip-cert-verify: true
sni: os-2.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-OS-3-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: os-3.rise-fuji.com
skip-cert-verify: true
sni: os-3.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-TY-1-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: ty-1.rise-fuji.com
skip-cert-verify: true
sni: ty-1.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-TY-2-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: ty-2.rise-fuji.com
skip-cert-verify: true
sni: ty-2.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-TY-3-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: ty-3.rise-fuji.com
skip-cert-verify: true
sni: ty-3.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 日本-TY-4-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: ty-4.rise-fuji.com
skip-cert-verify: true
sni: ty-4.rise-fuji.com
type: trojan
- alpn:
- h2
- http/1.1
name: 澳大利亚-AU-1-流量倍率:0.5
password: BWWGW01PcxMn5Xa6SW
port: 443
server: au-1.australiastudio.com
skip-cert-verify: true
sni: au-1.australiastudio.com
type: trojan
- alpn:
- h2
- http/1.1
name: 澳大利亚-AU-2-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: au-2.australiastudio.com
skip-cert-verify: true
sni: au-2.australiastudio.com
type: trojan
- alpn:
- h2
- http/1.1
name: 澳大利亚-AU-3-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: au-3.australiastudio.com
skip-cert-verify: true
sni: au-3.australiastudio.com
type: trojan
- alpn:
- h2
- http/1.1
name: 澳大利亚-AU-4-流量倍率:1.0
password: BWWGW01PcxMn5Xa6SW
port: 443
server: au-4.australiastudio.com
skip-cert-verify: true
sni: au-4.australiastudio.com
type: trojan
- name: 🇦🇺 澳大利亚 01
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12068
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇦🇺 澳大利亚-广东专线 GCore
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32023
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇦🇺 澳大利亚-广东专线 VUAU
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32012
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇨🇳 台湾 01
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12011
server: cn1.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇨🇳 台湾 02
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12012
server: cn1.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇯🇵 日本 01
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12031
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇯🇵 日本 02
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12032
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇯🇵 日本 03
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12033
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇯🇵 日本 04
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12034
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇯🇵 日本 05
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12035
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇯🇵 日本-广东专线 Akari
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32036
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇯🇵 日本-广东专线 BGP
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32004
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇯🇵 日本-广东专线 GCore
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32022
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇰🇷 韩国 01
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12041
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇰🇷 韩国-广东专线 VUKR
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32005
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇲🇾 马来西亚 01
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12067
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇲🇾 马来西亚-广东专线 Shin
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32038
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇵🇭 菲律宾-广东专线 Comfac
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32030
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇵🇭 菲律宾-广东专线 Zenlayer
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32013
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇸🇬 新加坡 01
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12021
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇸🇬 新加坡 02
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12022
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇸🇬 新加坡 03
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12023
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇸🇬 新加坡 04
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12024
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇸🇬 新加坡 05
password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
port: 12025
server: cn2.cdn.xfltd-cdn.top
skip-cert-verify: true
sni: cdn.alibaba.com
type: trojan
udp: true
- name: 🇸🇬 新加坡-广东专线 BGP
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32007
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇹🇼 台湾-广东专线 NeaRoute
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32003
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
- name: 🇹🇼 台湾-广东专线 STUIX
password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
port: 32040
server: lbso.bnnodeservice.com
skip-cert-verify: true
sni: cert.bitbyte.one
type: trojan
udp: true
proxy-groups:
- name: GLOBAL
proxies:
- JP-Detour 01 AEAD
- JP-Detour 02 AEAD
- JP-Detour 03 AEAD
- JP-Detour 04 AEAD
- JP-Detour 05 AEAD
- JP-Detour 06 AEAD
- SG-Detour 01 AEAD
- SG-Detour 02 AEAD
- SG-Detour 03 AEAD
- TW-Detour 01 AEAD
- TW-Detour 02 AEAD
- TW-Detour 03 AEAD
- TW-Detour 05 AEAD
- TW-Detour 06 AEAD
- TW-Detour 08 AEAD
- TW-Detour 09 AEAD
- TW-Detour 10 AEAD
- TW-Detour 12 AEAD
- TW-Detour 13 AEAD
- TW-Detour 15 AEAD
- TW-Detour 16 AEAD
- TW-Detour 18 AEAD
- TW-Detour 19 AEAD
- TW-Detour 20 AEAD
- TW-Detour 22 AEAD
- TW-Detour 23 AEAD
- 台湾-TW-1-流量倍率:1.0
- 台湾-TW-2-流量倍率:1.0
- 新加坡-SG-1-流量倍率:1.0
- 新加坡-SG-2-流量倍率:1.0
- 日本-FW-JP-TEST1-流量倍率:1.0
- 日本-FW-JP-TEST2-流量倍率:1.0
- 日本-FW-JP1-流量倍率:1.0
- 日本-FW-JP2-流量倍率:1.0
- 日本-OS-1-流量倍率:1.0
- 日本-OS-2-流量倍率:1.0
- 日本-OS-3-流量倍率:1.0
- 日本-TY-1-流量倍率:1.0
- 日本-TY-2-流量倍率:1.0
- 日本-TY-3-流量倍率:1.0
- 日本-TY-4-流量倍率:1.0
- 澳大利亚-AU-1-流量倍率:0.5
- 澳大利亚-AU-2-流量倍率:1.0
- 澳大利亚-AU-3-流量倍率:1.0
- 澳大利亚-AU-4-流量倍率:1.0
- 🇦🇺 澳大利亚 01
- 🇦🇺 澳大利亚-广东专线 GCore
- 🇦🇺 澳大利亚-广东专线 VUAU
- 🇨🇳 台湾 01
- 🇨🇳 台湾 02
- 🇯🇵 日本 01
- 🇯🇵 日本 02
- 🇯🇵 日本 03
- 🇯🇵 日本 04
- 🇯🇵 日本 05
- 🇯🇵 日本-广东专线 Akari
- 🇯🇵 日本-广东专线 BGP
- 🇯🇵 日本-广东专线 GCore
- 🇰🇷 韩国 01
- 🇰🇷 韩国-广东专线 VUKR
- 🇲🇾 马来西亚 01
- 🇲🇾 马来西亚-广东专线 Shin
- 🇵🇭 菲律宾-广东专线 Comfac
- 🇵🇭 菲律宾-广东专线 Zenlayer
- 🇸🇬 新加坡 01
- 🇸🇬 新加坡 02
- 🇸🇬 新加坡 03
- 🇸🇬 新加坡 04
- 🇸🇬 新加坡 05
- 🇸🇬 新加坡-广东专线 BGP
- 🇹🇼 台湾-广东专线 NeaRoute
- 🇹🇼 台湾-广东专线 STUIX
type: select
secret: ''

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
# 生成代理节点, 并过滤, 传入 merge.yaml 生成 config.yaml
import yaml
file_name = 'merge.yaml'
need_nodes = ['日本', 'JP', '新加坡', 'SG', '台湾', 'TW', '韩国', '澳门', '马来西亚', '澳大利亚', '菲律宾']
config_file = {
"mixed-port": 7890,
"allow-lan": True,
"bind-address": "*",
"mode": "rule",
"log-level": "info",
"external-controller": "0.0.0.0:9090",
"secret": "",
"dns": {
"enable": False,
"ipv6": False,
"nameserver": [],
"fallback": []
},
"proxies": [],
"proxy-groups": [{"name": "GLOBAL", "type": "select", "proxies": []}],
}
def process_yaml_file():
proxy_list = []
with open(file_name, 'r', encoding='utf-8') as file:
data = yaml.safe_load(file)
if not data:
print(f"Error reading {file_name}")
return
proxies = data['proxies']
for proxy in proxies:
if any(x in proxy['name'] for x in ['剩余流量', '套餐到期', '有效期']):
continue
if any(node in proxy['name'] for node in need_nodes):
proxy_list.append(proxy)
proxy_list_sorted = sorted(proxy_list, key=lambda x: x['name'] if 'name' in x else '')
return proxy_list_sorted
def create_config_file(proxy_list_sorted):
config_file['proxies'] = proxy_list_sorted
for proxy_list in proxy_list_sorted:
config_file['proxy-groups'][0]['proxies'].append(proxy_list['name'])
if __name__ == '__main__':
proxy_list_sorted = process_yaml_file()
create_config_file(proxy_list_sorted)
with open(f'config.yaml', 'w', encoding='utf-8') as file:
yaml.dump(config_file, file, allow_unicode=True, default_flow_style=False)
print('done!')

@ -0,0 +1,185 @@
proxies:
- {"name":"剩余流量:36.89 GB","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12001,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"套餐到期:长期有效","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12001,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇭🇰 香港 01","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12001,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇭🇰 香港 02","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12002,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇭🇰 香港 03","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12003,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇭🇰 香港 04","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12004,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇭🇰 香港 05","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12005,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇭🇰 香港 06","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12006,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇭🇰 香港 07","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12007,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇨🇳 台湾 01","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12011,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇨🇳 台湾 02","type":"trojan","server":"cn1.cdn.xfltd-cdn.top","port":12012,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇸🇬 新加坡 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12021,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇸🇬 新加坡 02","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12022,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇸🇬 新加坡 03","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12023,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇸🇬 新加坡 04","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12024,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇸🇬 新加坡 05","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12025,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇯🇵 日本 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12031,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇯🇵 日本 02","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12032,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇯🇵 日本 03","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12033,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇯🇵 日本 04","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12034,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇯🇵 日本 05","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12035,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇺🇸 美国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12051,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇺🇸 美国 02","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12052,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇺🇸 美国 03","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12053,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇺🇸 美国 04","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12054,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇰🇷 韩国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12041,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇮🇩 印尼 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12061,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇮🇹 意大利 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12062,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇹🇷 土耳其 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12064,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇫🇷 法国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12065,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇦🇷 阿根廷 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12066,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇲🇾 马来西亚 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12067,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇦🇺 澳大利亚 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12068,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇬🇧 英国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12069,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇩🇪 德国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12070,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇸🇪 瑞典 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12071,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇮🇳 印度 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12072,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇳🇬 尼日利亚 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12073,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇳🇱 荷兰 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12074,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇷🇺 俄罗斯 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12075,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"🇹🇭 泰国 01","type":"trojan","server":"cn2.cdn.xfltd-cdn.top","port":12076,"password":"d058a1cb-5dbd-4664-9d8b-ae26bc699ed4","udp":true,"sni":"cdn.alibaba.com","skip-cert-verify":true}
- {"name":"DE-Detour 01 AEAD","type":"vmess","server":"de-detour-01.grabgo.pro","port":15801,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"DE-Detour 02 AEAD","type":"vmess","server":"de-detour-02.grabgo.pro","port":15802,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"DE-Detour-03 AEAD","type":"vmess","server":"de-detour-03.grabgo.pro","port":15803,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 01 AEAD","type":"vmess","server":"hkt-detour-01.grabgo.pro","port":15101,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 02 AEAD","type":"vmess","server":"hkt-detour-02.grabgo.pro","port":15102,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 05 AEAD","type":"vmess","server":"hkt-detour-05.grabgo.pro","port":15105,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 06 AEAD","type":"vmess","server":"hkt-detour-06.grabgo.pro","port":15106,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 09 AEAD","type":"vmess","server":"hkt-detour-09.grabgo.pro","port":15109,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 10 AEAD","type":"vmess","server":"hkt-detour-10.grabgo.pro","port":15110,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 11 AEAD","type":"vmess","server":"hkt-detour-11.grabgo.pro","port":15111,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 12 AEAD","type":"vmess","server":"hkt-detour-12.grabgo.pro","port":15112,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 13 AEAD","type":"vmess","server":"hkt-detour-13.grabgo.pro","port":15113,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 14 AEAD","type":"vmess","server":"hkt-detour-14.grabgo.pro","port":15114,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 17 AEAD","type":"vmess","server":"hkt-detour-17.grabgo.pro","port":15117,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 18 AEAD","type":"vmess","server":"hkt-detour-18.grabgo.pro","port":15118,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 19 AEAD","type":"vmess","server":"hkt-detour-19.grabgo.pro","port":15119,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 20 AEAD","type":"vmess","server":"hkt-detour-20.grabgo.pro","port":15120,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 21 AEAD","type":"vmess","server":"hkt-detour-21.grabgo.pro","port":15131,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"HKT-Detour 23 AEAD","type":"vmess","server":"hkt-detour-23.grabgo.pro","port":15133,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"JP-Detour 01 AEAD","type":"vmess","server":"jp-01.grabgo.pro","port":15601,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"JP-Detour 02 AEAD","type":"vmess","server":"jp-02.grabgo.pro","port":15602,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"JP-Detour 03 AEAD","type":"vmess","server":"jp-03.grabgo.pro","port":15603,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"JP-Detour 04 AEAD","type":"vmess","server":"jp-04.grabgo.pro","port":15604,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"JP-Detour 05 AEAD","type":"vmess","server":"jp-05.grabgo.pro","port":15605,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"JP-Detour 06 AEAD","type":"vmess","server":"jp-06.grabgo.pro","port":15606,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"LA-Detour 02 AEAD","type":"vmess","server":"la-detour-02.grabgo.pro","port":15502,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"LA-Detour 03 AEAD","type":"vmess","server":"la-detour-03.grabgo.pro","port":15503,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"LA-Detour 05 AEAD","type":"vmess","server":"la-detour-05.grabgo.pro","port":15505,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"LA-Detour 07 AEAD","type":"vmess","server":"la-detour-07.grabgo.pro","port":15507,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"LA-Detour 09 AEAD","type":"vmess","server":"la-detour-09.grabgo.pro","port":15509,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"LA-Detour 10 AEAD","type":"vmess","server":"la-detour-10.grabgo.pro","port":15510,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"Oz-Detour 01 AEAD","type":"vmess","server":"oz-detour-01.grabgo.pro","port":15811,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"Oz-Detour 02 AEAD","type":"vmess","server":"oz-detour-02.grabgo.pro","port":15812,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"SG-Detour 01 AEAD","type":"vmess","server":"sg-detour-01.grabgo.pro","port":15301,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"SG-Detour 02 AEAD","type":"vmess","server":"sg-detour-02.grabgo.pro","port":15302,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"SG-Detour 03 AEAD","type":"vmess","server":"sg-detour-03.grabgo.pro","port":15303,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 01 AEAD","type":"vmess","server":"tw-detour-01.grabgo.pro","port":15201,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 02 AEAD","type":"vmess","server":"tw-detour-02.grabgo.pro","port":15202,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 03 AEAD","type":"vmess","server":"tw-detour-03.grabgo.pro","port":15203,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 05 AEAD","type":"vmess","server":"tw-detour-05.grabgo.pro","port":15205,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 06 AEAD","type":"vmess","server":"tw-detour-06.grabgo.pro","port":15206,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 08 AEAD","type":"vmess","server":"tw-detour-08.grabgo.pro","port":15208,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 09 AEAD","type":"vmess","server":"tw-detour-09.grabgo.pro","port":15209,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 10 AEAD","type":"vmess","server":"tw-detour-10.grabgo.pro","port":15210,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 12 AEAD","type":"vmess","server":"tw-detour-12.grabgo.pro","port":15212,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 13 AEAD","type":"vmess","server":"tw-detour-13.grabgo.pro","port":15213,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 15 AEAD","type":"vmess","server":"tw-detour-15.grabgo.pro","port":15215,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 16 AEAD","type":"vmess","server":"tw-detour-16.grabgo.pro","port":15216,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 18 AEAD","type":"vmess","server":"tw-detour-18.grabgo.pro","port":15218,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 19 AEAD","type":"vmess","server":"tw-detour-19.grabgo.pro","port":15219,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 20 AEAD","type":"vmess","server":"tw-detour-20.grabgo.pro","port":15220,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 22 AEAD","type":"vmess","server":"tw-detour-22.grabgo.pro","port":15222,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"TW-Detour 23 AEAD","type":"vmess","server":"tw-detour-23.grabgo.pro","port":15223,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"UK Detour-01 AEAD","type":"vmess","server":"uk-detour-01.grabgo.pro","port":15711,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"UK Detour-02 AEAD","type":"vmess","server":"uk-detour-02.grabgo.pro","port":15712,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"UK Detour-03 AEAD","type":"vmess","server":"uk-detour-03.grabgo.pro","port":15713,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"UK Detour-04 AEAD","type":"vmess","server":"uk-detour-04.grabgo.pro","port":15714,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"UK Detour-05 AEAD","type":"vmess","server":"uk-detour-05.grabgo.pro","port":15715,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"UK Detour-06 AEAD","type":"vmess","server":"uk-detour-06.grabgo.pro","port":15716,"uuid":"22a14509-a8ab-46cb-bb26-d47d4d18e1d6","alterId":0,"cipher":"auto","ws-path":"/"}
- {"name":"🇭🇰 香港-广东专线 BGP 1","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32443,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇭🇰 香港-广东专线 BGP 2","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32445,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇭🇰 香港-广东专线 Akari","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32037,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇭🇰 香港-广东专线 NeaRoute","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32029,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇭🇰 香港-广东专线 HKBN","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32000,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇭🇰 香港-广东专线 HGC","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32042,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇭🇰 香港-广东专线 HKT","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32033,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇭🇰 香港-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32027,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇺🇸 美国-广东专线 BGP 1","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32001,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇺🇸 美国-广东专线 BGP 2","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32028,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇺🇸 美国-广东专线 DAOport","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32031,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇺🇸 美国-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32021,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇹🇼 台湾-广东专线 NeaRoute","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32003,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇹🇼 台湾-广东专线 STUIX","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32040,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇯🇵 日本-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32004,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇯🇵 日本-广东专线 Akari","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32036,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇯🇵 日本-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32022,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇰🇷 韩国-广东专线 VUKR","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32005,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇸🇬 新加坡-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32007,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇷🇺 俄罗斯-广东专线 PQ","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32008,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇫🇷 法国-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32009,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇬🇧 英国-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32010,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇨🇦 加拿大-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32039,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇩🇪 德国-广东专线 BGP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32011,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇦🇺 澳大利亚-广东专线 VUAU","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32012,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇦🇺 澳大利亚-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32023,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇲🇾 马来西亚-广东专线 Shin","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32038,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇵🇭 菲律宾-广东专线 Zenlayer","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32013,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇵🇭 菲律宾-广东专线 Comfac","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32030,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇹🇭 泰国-广东专线 Bangmod","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32043,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇹🇷 土耳其-广东专线 Kapteyan","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32014,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇹🇷 土耳其-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32026,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇦🇷 阿根廷-广东专线 DonWeb","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32015,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇳🇬 尼日利亚-广东专线 Melbicom","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32034,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇺🇦 乌克兰-广东专线 Vik","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32019,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇧🇷 巴西-广东专线 GCore 1","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32016,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇧🇷 巴西-广东专线 GCore 2","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32025,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇮🇳 印度-广东专线 DOIN","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32017,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇮🇳 印度-广东专线 GCore","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32024,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇸🇦 沙特-广东专线 STC","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32035,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"🇦🇶 南极-广东专线 WARP","password":"f2e8e50c-ffb8-48a1-a460-2e72dfaf7845","port":32041,"server":"lbso.bnnodeservice.com","skip-cert-verify":true,"sni":"cert.bitbyte.one","type":"trojan","udp":true}
- {"name":"有效期2026/03/11,剩余:100.00GB","type":"trojan","server":"iplc-hk-1.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-1.trojanwheel.com"}
- {"name":"香港-IPLC-HK-1-流量倍率:1.0","type":"trojan","server":"iplc-hk-1.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-1.trojanwheel.com"}
- {"name":"香港-IPLC-HK-2-流量倍率:1.0","type":"trojan","server":"iplc-hk-2.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-2.trojanwheel.com"}
- {"name":"香港-IPLC-HK-3-流量倍率:1.0","type":"trojan","server":"iplc-hk-3.trojanwheel.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-3.trojanwheel.com"}
- {"name":"香港-IPLC-HK-4-流量倍率:1.0","type":"trojan","server":"iplc-hk-4.trojanwheel.com","port":5001,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-4.trojanwheel.com"}
- {"name":"香港-IPLC-HK-5-流量倍率:1.0","type":"trojan","server":"iplc-hk-5.trojanwheel.com","port":5002,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-5.trojanwheel.com"}
- {"name":"香港-IPLC-HK-6-流量倍率:1.0","type":"trojan","server":"iplc-hk-6.trojanwheel.com","port":5003,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-6.trojanwheel.com"}
- {"name":"香港-IPLC-HK-7-流量倍率:1.0","type":"trojan","server":"iplc-hk-7.trojanwheel.com","port":5004,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"iplc-hk-7.trojanwheel.com"}
- {"name":"日本-FW-JP-TEST1-流量倍率:1.0","type":"trojan","server":"fw-jp-test1.trojanwheel.com","port":5011,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp-test1.trojanwheel.com"}
- {"name":"日本-FW-JP-TEST2-流量倍率:1.0","type":"trojan","server":"fw-jp-test2.trojanwheel.com","port":5012,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp-test2.trojanwheel.com"}
- {"name":"日本-FW-JP1-流量倍率:1.0","type":"trojan","server":"fw-jp1.rise-fuji.com","port":5011,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp1.rise-fuji.com"}
- {"name":"日本-FW-JP2-流量倍率:1.0","type":"trojan","server":"fw-jp2.rise-fuji.com","port":5012,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-jp2.rise-fuji.com"}
- {"name":"美国-FW-US1-流量倍率:1.5","type":"trojan","server":"fw-us1.regentgrandvalley.com","port":5021,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-us1.regentgrandvalley.com"}
- {"name":"美国-FW-US2-流量倍率:1.0","type":"trojan","server":"fw-us2.regentgrandvalley.com","port":5022,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"fw-us2.regentgrandvalley.com"}
- {"name":"爱沙尼亚-EE-1-流量倍率:0.1","type":"trojan","server":"ee-1.kamediorg.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ee-1.kamediorg.com"}
- {"name":"澳大利亚-AU-1-流量倍率:0.5","type":"trojan","server":"au-1.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-1.australiastudio.com"}
- {"name":"澳大利亚-AU-2-流量倍率:1.0","type":"trojan","server":"au-2.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-2.australiastudio.com"}
- {"name":"澳大利亚-AU-3-流量倍率:1.0","type":"trojan","server":"au-3.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-3.australiastudio.com"}
- {"name":"澳大利亚-AU-4-流量倍率:1.0","type":"trojan","server":"au-4.australiastudio.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"au-4.australiastudio.com"}
- {"name":"德国-DE-2-流量倍率:1.0","type":"trojan","server":"de-2.topeinstein.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"de-2.topeinstein.com"}
- {"name":"德国-DE-3-流量倍率:1.0","type":"trojan","server":"de-3.topeinstein.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"de-3.topeinstein.com"}
- {"name":"美国-US-1-流量倍率:1.5","type":"trojan","server":"us-1.regentgrandvalley.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"us-1.regentgrandvalley.com"}
- {"name":"美国-US-2-流量倍率:1.0","type":"trojan","server":"us-2.regentgrandvalley.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"us-2.regentgrandvalley.com"}
- {"name":"美国-US-3-流量倍率:1.0","type":"trojan","server":"us-3.regentgrandvalley.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"us-3.regentgrandvalley.com"}
- {"name":"香港-HK-1-流量倍率:1.0","type":"trojan","server":"hk-1.victoriamitrepeak.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"hk-1.victoriamitrepeak.com"}
- {"name":"香港-HK-2-流量倍率:1.0","type":"trojan","server":"hk-2.victoriamitrepeak.com","port":465,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"hk-2.victoriamitrepeak.com"}
- {"name":"新加坡-SG-1-流量倍率:1.0","type":"trojan","server":"sg-1.victoriamitrepeak.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"sg-1.victoriamitrepeak.com"}
- {"name":"新加坡-SG-2-流量倍率:1.0","type":"trojan","server":"sg-2.victoriamitrepeak.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"sg-2.victoriamitrepeak.com"}
- {"name":"日本-TY-1-流量倍率:1.0","type":"trojan","server":"ty-1.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-1.rise-fuji.com"}
- {"name":"日本-TY-2-流量倍率:1.0","type":"trojan","server":"ty-2.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-2.rise-fuji.com"}
- {"name":"日本-TY-3-流量倍率:1.0","type":"trojan","server":"ty-3.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-3.rise-fuji.com"}
- {"name":"日本-TY-4-流量倍率:1.0","type":"trojan","server":"ty-4.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"ty-4.rise-fuji.com"}
- {"name":"日本-OS-1-流量倍率:1.0","type":"trojan","server":"os-1.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"os-1.rise-fuji.com"}
- {"name":"日本-OS-2-流量倍率:1.0","type":"trojan","server":"os-2.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"os-2.rise-fuji.com"}
- {"name":"日本-OS-3-流量倍率:1.0","type":"trojan","server":"os-3.rise-fuji.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"os-3.rise-fuji.com"}
- {"name":"荷兰-NL-1-流量倍率:1.0","type":"trojan","server":"nl-1.concert-geb.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"nl-1.concert-geb.com"}
- {"name":"荷兰-NL-2-流量倍率:1.0","type":"trojan","server":"nl-2.concert-geb.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"nl-2.concert-geb.com"}
- {"name":"荷兰-NL-3-流量倍率:1.0","type":"trojan","server":"nl-3.concert-geb.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"nl-3.concert-geb.com"}
- {"name":"英国-UK-1-流量倍率:1.0","type":"trojan","server":"uk-1.fishchipsexpress.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"uk-1.fishchipsexpress.com"}
- {"name":"台湾-TW-1-流量倍率:1.0","type":"trojan","server":"tw-1.chianginc.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"tw-1.chianginc.com"}
- {"name":"台湾-TW-2-流量倍率:1.0","type":"trojan","server":"tw-2.chianginc.com","port":443,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"tw-2.chianginc.com"}
- {"name":"美国-V6-US3-流量倍率:1.0","type":"trojan","server":"v6-us3.nigirocloud.com","port":4003,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"v6-us3.nigirocloud.com"}
- {"name":"荷兰-V6-NL1-流量倍率:1.0","type":"trojan","server":"v6-nl1.nigirocloud.com","port":4003,"password":"BWWGW01PcxMn5Xa6SW","alpn":["h2","http/1.1"],"skip-cert-verify":true,"sni":"v6-nl1.nigirocloud.com"}

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
# 修改当前代理设置, 切换全局代理
import httpx
import asyncio
ip = "192.168.31.201"
select_port_list = 0
port_group_list = [
['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010'],
['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', '32010', '32011', '32012']
]
port_list = port_group_list[select_port_list]
async def patch_config(base_port):
url_and_port = f"http://{ip}:{base_port}"
key = "/api/configs"
full_url = url_and_port + key
data = {"mode": "Global"}
headers = {"Content-Type": "application/json"}
async with httpx.AsyncClient() as client:
try:
response = await client.patch(full_url, json=data, headers=headers)
response.raise_for_status()
print(f"{url_and_port}: 切换全局代理 OK")
except httpx.HTTPError as exc:
print(f"请求失败: {exc}")
exit(1)
async def main():
tasks = [patch_config(base_port) for base_port in port_list]
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())

@ -0,0 +1,163 @@
# -*- coding: utf-8 -*-
'''
切换到随机代理
'''
import random
from urllib.parse import quote
import httpx
import time
import subprocess
from typing import List
BASE_URL = "http://192.168.31.201"
PORT_LIST = ['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', '32010', '32011', '32012']
PROXY_GROUP = ['香港', 'HK', '新加坡', 'SG', '台湾', 'TW', '日本', 'JP', '韩国', '澳门', '马来西亚', '澳大利亚']
GROUP = 2
class ClashProxyManager:
def __init__(self, base_url, base_port):
self.key_group = 0
self.base_url = base_url
self.base_port = base_port
self.all_proxies = []
self.used_proxy = []
def get_all_proxies(self, clash_tool_url: str) -> List[str]:
# 连接其中一个代理服务器, 获取所有代理节点, 因为每个代理服务器的所有节点都是一样的, 所以获取一个就行了
url = f"{clash_tool_url}/api/proxies"
try:
response = httpx.get(url)
response.raise_for_status()
proxies = response.json()
# 输出读取的所有代理信息
# for proxy_name, proxy_info in proxies['proxies'].items():
# logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}")
proxy_list = list(proxies['proxies'].keys())
result_data = []
if GROUP == 1:
for filtered in proxy_list:
for group in PROXY_GROUP:
if group.lower() in filtered.lower() and filtered not in {'REJECT', 'GLOBAL', 'DIRECT'}:
result_data.append(filtered)
elif GROUP == 2:
for filtered in proxy_list:
if all(group.lower() not in filtered.lower() for group in PROXY_GROUP) and filtered not in {
'REJECT', 'GLOBAL', 'DIRECT'}:
result_data.append(filtered)
else:
print(f'选择代理组为 {GROUP}')
exit(1)
print(f'读取所有代理节点, 一共 {len(result_data)} 个节点')
return result_data
except Exception as e:
print(f"Failed to get proxies: {e}")
return []
def switch_proxy(self, proxy_name: str, url_and_port: str) -> None:
# 根据节点名称和代理服务器url, 切换到指定的代理节点
url = f"{url_and_port}/api/proxies/GLOBAL"
data = {"name": proxy_name}
try:
response = httpx.put(url, json=data)
if response.status_code == 204:
print(f"Switched to proxy: {proxy_name}")
else:
print(f"Failed to switch proxy: {response.status_code} - {proxy_name}")
except Exception as e:
print(f"Failed to switch proxy: {e}")
def update_configs(self):
for base_port in self.base_port:
url_and_port = self.base_url + ":" + base_port
key = "/api/configs"
url = url_and_port + key
# 构造 curl 命令
curl_cmd = [
"curl",
"-X", "PATCH",
url,
"-H", "Content-Type: application/json",
"-d", '{"mode": "Global"}'
]
try:
# 使用 subprocess 运行 curl 命令
result = subprocess.run(curl_cmd, capture_output=True, text=True, check=True)
# 检查 curl 命令的返回状态
if result.returncode != 0:
print(f"请求失败,状态码: {result.returncode}")
print("错误信息:", result.stderr.strip())
except subprocess.CalledProcessError as exc:
print(f"请求失败: {exc}")
print("错误信息:", exc.stderr.strip())
def check_proxy(self, proxy_url, choose_proxy):
encode_proxy_name = quote(choose_proxy, safe="")
command = [
"curl",
"-X", "GET",
f"{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204"
]
try:
result = subprocess.run(command, capture_output=True, text=True, check=True)
print("Output:", result.stdout)
if 'Timeout' in result.stdout:
return False
return True
except subprocess.CalledProcessError as e:
print("Error:", e.stderr)
return False
def main(self) -> None:
self.update_configs()
if not self.all_proxies:
for port_list in self.base_port:
base_url = self.base_url + ":" + port_list
clash_tool_url = f"{base_url}"
self.all_proxies = self.get_all_proxies(clash_tool_url)
if self.all_proxies:
break
if not self.all_proxies:
return
else:
print(f'待切换节点一共 {len(self.all_proxies)}')
for base_port in self.base_port:
url_and_port = self.base_url + ":" + base_port
while True:
choose_proxy = random.choice(self.all_proxies)
if choose_proxy in self.used_proxy:
if len(self.used_proxy) >= len(self.all_proxies):
print('=' * 88)
print(f'所有节点已尝试过, 退出')
print('=' * 88)
return
continue
self.switch_proxy(choose_proxy, url_and_port)
self.used_proxy.append(choose_proxy)
if self.check_proxy(url_and_port, choose_proxy):
print(f"代理 {choose_proxy} 切换成功,检测通过!")
print('=' * 88)
break
else:
print(f"{url_and_port} 切换 xxxxxxxx {choose_proxy} xxxxxxxx 检测失败")
time.sleep(1)
if __name__ == "__main__":
manager = ClashProxyManager(BASE_URL, PORT_LIST)
manager.main()

@ -0,0 +1,164 @@
# -*- coding: utf-8 -*-
'''
切换到随机代理
'''
import random
from urllib.parse import quote
import httpx
import time
import subprocess
from typing import List
BASE_URL = "http://192.168.31.194"
PORT_LIST = ['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010']
PROXY_GROUP = []
# PROXY_GROUP = ['香港', 'HK', '新加坡', 'SG', '台湾', 'TW', '日本', 'JP', '韩国', '澳门']
GROUP = 1
class ClashProxyManager:
def __init__(self, base_url, base_port):
self.key_group = 0
self.base_url = base_url
self.base_port = base_port
self.all_proxies = []
self.used_proxy = []
def get_all_proxies(self, clash_tool_url: str) -> List[str]:
# 连接其中一个代理服务器, 获取所有代理节点, 因为每个代理服务器的所有节点都是一样的, 所以获取一个就行了
url = f"{clash_tool_url}/api/proxies"
try:
response = httpx.get(url)
response.raise_for_status()
proxies = response.json()
# 输出读取的所有代理信息
# for proxy_name, proxy_info in proxies['proxies'].items():
# logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}")
proxy_list = list(proxies['proxies'].keys())
result_data = []
if GROUP == 1:
for filtered in proxy_list:
for group in PROXY_GROUP:
if group.lower() in filtered.lower() and filtered not in {'REJECT', 'GLOBAL', 'DIRECT'}:
result_data.append(filtered)
elif GROUP == 2:
for filtered in proxy_list:
if all(group.lower() not in filtered.lower() for group in PROXY_GROUP) and filtered not in {
'REJECT', 'GLOBAL', 'DIRECT'}:
result_data.append(filtered)
else:
print(f'选择代理组为 {GROUP}')
exit(1)
print(f'读取所有代理节点, 一共 {len(result_data)} 个节点')
return result_data
except Exception as e:
print(f"Failed to get proxies: {e}")
return []
def switch_proxy(self, proxy_name: str, url_and_port: str) -> None:
# 根据节点名称和代理服务器url, 切换到指定的代理节点
url = f"{url_and_port}/api/proxies/GLOBAL"
data = {"name": proxy_name}
try:
response = httpx.put(url, json=data)
if response.status_code == 204:
print(f"Switched to proxy: {proxy_name}")
else:
print(f"Failed to switch proxy: {response.status_code} - {proxy_name}")
except Exception as e:
print(f"Failed to switch proxy: {e}")
def update_configs(self):
for base_port in self.base_port:
url_and_port = self.base_url + ":" + base_port
key = "/api/configs"
url = url_and_port + key
# 构造 curl 命令
curl_cmd = [
"curl",
"-X", "PATCH",
url,
"-H", "Content-Type: application/json",
"-d", '{"mode": "Global"}'
]
try:
# 使用 subprocess 运行 curl 命令
result = subprocess.run(curl_cmd, capture_output=True, text=True, check=True)
# 检查 curl 命令的返回状态
if result.returncode != 0:
print(f"请求失败,状态码: {result.returncode}")
print("错误信息:", result.stderr.strip())
except subprocess.CalledProcessError as exc:
print(f"请求失败: {exc}")
print("错误信息:", exc.stderr.strip())
def check_proxy(self, proxy_url, choose_proxy):
encode_proxy_name = quote(choose_proxy, safe="")
command = [
"curl",
"-X", "GET",
f"http://{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204"
]
try:
result = subprocess.run(command, capture_output=True, text=True, check=True)
print("Output:", result.stdout)
if 'Timeout' in result.stdout:
return False
return True
except subprocess.CalledProcessError as e:
print("Error:", e.stderr)
return False
def main(self) -> None:
self.update_configs()
if not self.all_proxies:
for port_list in self.base_port:
base_url = self.base_url + ":" + port_list
clash_tool_url = f"{base_url}"
self.all_proxies = self.get_all_proxies(clash_tool_url)
if self.all_proxies:
break
if not self.all_proxies:
return
else:
print(f'待切换节点一共 {len(self.all_proxies)}')
for base_port in self.base_port:
url_and_port = self.base_url + ":" + base_port
while True:
choose_proxy = random.choice(self.all_proxies)
if choose_proxy in self.used_proxy:
if len(self.used_proxy) >= len(self.all_proxies):
print('=' * 88)
print(f'所有节点已尝试过, 退出')
print('=' * 88)
return
continue
self.switch_proxy(choose_proxy, url_and_port)
self.used_proxy.append(choose_proxy)
if self.check_proxy(url_and_port, choose_proxy):
print(f"代理 {choose_proxy} 切换成功,检测通过!")
print('=' * 88)
break
else:
print(f"{url_and_port} 切换 xxxxxxxx {choose_proxy} xxxxxxxx 检测失败")
time.sleep(1)
if __name__ == "__main__":
manager = ClashProxyManager(BASE_URL, PORT_LIST)
manager.main()

@ -0,0 +1,133 @@
import os
import pyautogui
import tkinter as tk
from tkinter import messagebox
import time
class AutoClicker:
def __init__(self, src_folder="src"):
self.src_folder = src_folder
self.png_files = []
def load_png_list(self):
"""加载src文件夹中的所有PNG文件"""
if not os.path.exists(self.src_folder):
os.makedirs(self.src_folder)
print(f"文件夹 {self.src_folder} 不存在,已创建。")
return []
self.png_files = [f for f in os.listdir(self.src_folder) if f.endswith(".png")]
print(f"加载PNG文件列表: {self.png_files}")
return self.png_files
def check_image_on_screen(self, image_path, confidence=0.8):
"""检查当前屏幕是否存在图片"""
location = pyautogui.locateOnScreen(image_path, confidence=confidence)
if location:
print(f'图片: {image_path} 找到,坐标: {location}')
return location
else:
print(f'没有找到图片: {image_path}')
return None
def click_image_center(self, image_path, confidence=0.8):
"""点击图片中心"""
location = self.check_image_on_screen(image_path, confidence)
if location:
button_x, button_y = pyautogui.center(location)
print(f'图片中心坐标: {button_x}, {button_y}')
pyautogui.click(button_x, button_y)
return True
return False
def move_mouse_to(self, x, y):
"""移动鼠标到指定坐标"""
pyautogui.moveTo(x, y)
print(f'鼠标移动到坐标: {x}, {y}')
def mouse_click(self):
"""鼠标点击"""
pyautogui.click()
print('鼠标点击')
def scroll_mouse(self, delta):
"""滚动鼠标滚轮"""
pyautogui.scroll(delta)
print(f'鼠标滚轮滚动: {delta}')
def main():
# 创建自动化点击器实例
auto_clicker = AutoClicker()
# 加载PNG文件
auto_clicker.load_png_list()
# 创建GUI
root = tk.Tk()
root.title("自动化点击器")
root.geometry("480x320")
button_font = ("Arial", 12)
# 修改背景色和文字颜色
button_bg_color = "lightblue"
button_fg_color = "black"
button_border_width = 2
# 测试按钮
def test_check_image():
file = auto_clicker.png_files[0] if auto_clicker.png_files else "1.png"
location = auto_clicker.check_image_on_screen(os.path.join(auto_clicker.src_folder, file))
if location:
messagebox.showinfo("测试结果", f"图片 {file} 找到!")
else:
messagebox.showerror("测试结果", f"图片 {file} 未找到!")
def test_click_image():
file = auto_clicker.png_files[0] if auto_clicker.png_files else "1.png"
if auto_clicker.click_image_center(os.path.join(auto_clicker.src_folder, file)):
messagebox.showinfo("测试结果", f"点击图片 {file} 成功!")
else:
messagebox.showerror("测试结果", f"点击图片 {file} 失败!")
def test_move_mouse():
auto_clicker.move_mouse_to(100, 100)
messagebox.showinfo("测试结果", "鼠标已移动到 (100, 100)")
def test_mouse_click():
auto_clicker.mouse_click()
messagebox.showinfo("测试结果", "鼠标点击完成")
def test_scroll_mouse():
auto_clicker.scroll_mouse(10)
messagebox.showinfo("测试结果", "鼠标滚轮滚动完成")
def start_tasks():
while True:
# 在这里添加你的任务代码
print("开始任务")
time.sleep(1)
print("任务结束")
time.sleep(1)
# 创建按钮
tk.Button(root, text="开始任务", command=start_tasks, font=button_font, bg=button_bg_color,
fg=button_fg_color, bd=button_border_width).pack(pady=5)
tk.Button(root, text="测试检查图片", command=test_check_image, font=button_font, bg=button_bg_color,
fg=button_fg_color, bd=button_border_width).pack(pady=5)
tk.Button(root, text="测试点击图片", command=test_click_image, font=button_font, bg=button_bg_color,
fg=button_fg_color, bd=button_border_width).pack(pady=5)
tk.Button(root, text="测试移动鼠标", command=test_move_mouse, font=button_font, bg=button_bg_color,
fg=button_fg_color, bd=button_border_width).pack(pady=5)
tk.Button(root, text="测试鼠标点击", command=test_mouse_click, font=button_font, bg=button_bg_color,
fg=button_fg_color, bd=button_border_width).pack(pady=5)
tk.Button(root, text="测试滚动鼠标", command=test_scroll_mouse, font=button_font, bg=button_bg_color,
fg=button_fg_color, bd=button_border_width).pack(pady=5)
# 启动GUI
root.mainloop()
if __name__ == "__main__":
main()

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

@ -0,0 +1,13 @@
soup elephant glare success violin unusual blade swing twenty tent cable require trap major cloud item infant ensure proof glimpse bulk gain grape annual
surge quit style joy armor save inside jungle man practice admit ball
drama follow rhythm grit myth glow immense pretty sorry royal board armed virtual avocado meadow exist urge club major cool saddle dad regular cigar
level blue fall burger famous thing subway zone undo panic clog voyage drum fade bracket bone attend pass level fetch trap brain client judge
cry margin renew bean awful hedgehog canyon often ahead frame master crazy luggage gown desert entire enrich grape human item faculty satisfy occur kind
cram kidney drip smart solar treat cry cushion volume under chief crowd today pond smart tomato net card shallow large act unlock boss private
nerve expand focus fury topic benefit fruit coach win betray guard clarify sketch project cat prize define anxiety remember acoustic client cave noodle sword
loud crucial output pony year attract lock barrel level entire price affair version shallow forward flock near badge mass box above future arm soup
ethics hobby gun relax goose apple reduce frequent jungle affair rotate solid ready ridge siege tide when suggest cannon change display marble expand tired
shaft dial garden surface dismiss kitchen clap ice manual answer spider walk open slogan earn cave boil magic wave olive medal sing dinner accident
Loading…
Cancel
Save