-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconversion.py
148 lines (116 loc) · 3.97 KB
/
conversion.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import yaml
import requests
import re
import base64
import sys
from urllib.parse import urlparse, parse_qs, unquote
INTERVAL = 1440
URL = 'http://www.gstatic.com/generate_204'
def get_servers():
# 解析trojan url,生成字典,包含服务器内容
url = sys.argv[1]
content = requests.get(url).content
content = base64.b64decode(content).decode()
all_samples = content.split('\r\n')
ret = []
# Trojan URL
for samp in all_samples:
# 解析URL
if samp:
parsed_url = urlparse(samp)
# 提取各部分信息
protocol = parsed_url.scheme # 协议类型
password = parsed_url.username # 用户ID
server = parsed_url.hostname # 服务器地址
port = parsed_url.port # 端口号
params = parse_qs(parsed_url.query) # 解析查询参数
name = unquote(parsed_url.fragment) # 解码服务器名称
# 输出解析结果
# print(f"协议类型: {protocol}")
# print(f"用户ID: {userinfo}")
# print(f"服务器地址: {host}")
# print(f"端口号: {port}")
# print(f"查询参数: {params}")
# print(f"备注: {name}")
result = {}
result['name'] = name
result['type'] = protocol
result['server'] = server
result['port'] = port
result['password'] = password
for key in params:
if key=='allowInsecure':
val = params[key][0]
if val=='0':
result['udp']=True
else:
result['udp']=False
if key=='sni':
val = params[key][0]
result['sni'] = val
ret.append(result)
return ret
servers = get_servers()
with open("my.yaml",'r',encoding='utf-8') as file:
datamy = yaml.safe_load(file)
with open("adremoval.yaml",'r',encoding='utf-8') as file:
adremoval = yaml.safe_load(file)
raw_rules = datamy['rules']
datamy['rules'] = adremoval['rules']+datamy['rules']
datamy['proxies'] = servers
countries = ['香港','日本','韩国','台湾','新加坡','美国','其他']
all_proxies=[]
countries = dict.fromkeys(countries)
for i in countries:
countries[i]=[]
for proxy in datamy['proxies']:
get = 0
for country in countries:
if country in proxy['name']:
countries[country].append(proxy['name'])
get = 1
break
if get==0:
countries['其他'].append(proxy['name'])
all_proxies.append(proxy['name'])
proxy_group = datamy['proxy-groups']
# 加入手动切换 和 自动选择 两个group
manual,auto = {},{}
manual['name'] = '手动切换'
manual['type'] = 'select'
manual['proxies'] = all_proxies
manual['interval'] = INTERVAL
manual['url'] = URL
auto['name'] = '自动选择'
auto['type'] = 'url-test'
auto['proxies'] = all_proxies
auto['interval'] = INTERVAL
auto['url'] = URL
proxy_group.append(manual)
proxy_group.append(auto)
# 加入各国节点列表
for country in countries:
group = {}
group['name'] = country
group['type'] = 'url-test'
group['proxies'] = countries[country]
group['interval'] = INTERVAL
group['url'] = URL
proxy_group.append(group)
# 加入openai等特定分类
def add_group(name='openai',type='select',proxies=datamy['proxy-groups'][0]['proxies'][1:] ):
group = {}
group['name'] = name
group['type'] = type
group['proxies'] = proxies # 去除香港
group['interval'] = INTERVAL
group['url'] = URL
proxy_group.append(group)
add_group(name='openai')
add_group(name='tiktok')
datamy['proxy-groups'] = proxy_group
with open('output.yaml', 'w', encoding='utf-8') as file:
yaml.dump(datamy, file, allow_unicode=True, sort_keys=False)
datamy['rules'] = raw_rules
with open('simple.yaml', 'w', encoding='utf-8') as file:
yaml.dump(datamy, file, allow_unicode=True, sort_keys=False)