forked from MassSmith/V2ray.Fun
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathParseVmess.py
112 lines (99 loc) · 3.27 KB
/
ParseVmess.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
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import commands
import base64
import json
import requests
def parse(vmessUrl):
"""解析vmess链接
:args:
vmessUrl: vmess 链接
:return:
vmess_result: vmess链接解析结果,json格式
"""
vmess_json = json.loads(base64.b64decode(vmessUrl[8:]))
return vmess_json
def parseSubscribtxt(SubscribTxt):
"""解码订阅的base64编码字符串
:args:
SubscribTxt: 从订阅文件中读取的经过编码的字符串
:return:
订阅的vmess链接列表
"""
decodeTxt = base64.b64decode(SubscribTxt)
subscribList = decodeTxt.splitlines()
return subscribList
def get_vmess_json(subscrib_url):
r = requests.get(subscrib_url)
s = r.text
vmess_url_list = parseSubscribtxt(s)
vmess_json_list = []
for line in vmess_url_list:
if line:
vmess_json = parse(line)
# if vmess_json['class'] == 3:
vmess_json_list.append(vmess_json)
print(vmess_json_list)
return vmess_json_list
def let_update_subscribe(subscribe_url):
# 更新订阅数据
vmess_json_list = get_vmess_json(subscribe_url)
# with open("subscribe.list") as f:
subscrib_list = json.loads("""{"active":0,"max":0,"list":[]}""")
i = 0
for vmess in vmess_json_list:
config_from_subscribe = json.loads("""
{
"tls": "",
"status": "",
"encrypt": "",
"uuid": "",
"domain_ip": "",
"secret": "",
"mux": "",
"port": "",
"host": "",
"routing": "",
"remarks": "",
"protocol": "",
"trans": "",
"wspath": "",
"alterId": ""
}
""")
if vmess['tls'] == "tls":
config_from_subscribe["tls"] = "on"
config_from_subscribe["status"] = "on"
config_from_subscribe["encrypt"] = 'auto'
config_from_subscribe["uuid"] = vmess['id']
config_from_subscribe["domain_ip"] = vmess['add']
config_from_subscribe["mux"] = 'on'
config_from_subscribe["wspath"] = vmess['path']
config_from_subscribe["secret"] = ""
config_from_subscribe["routing"] = 'whitelist'
config_from_subscribe["remarks"] = vmess['ps']
config_from_subscribe["protocol"] = 'vmess'
if vmess['net'] == "ws":
config_from_subscribe["trans"] = "websocket"
elif vmess['net'] == "tcp":
config_from_subscribe["trans"] = "tcp"
else:
config_from_subscribe["trans"] = "mkcp"
config_from_subscribe["host"] = vmess['host']
config_from_subscribe["alterId"] = str(vmess['aid'])
config_from_subscribe["port"] = str(vmess['port'])
# print(config_from_subscribe)
subscrib_list["list"].append(config_from_subscribe)
i = i + 1
subscrib_list["max"] = i - 1
subscrib_list["active"] = 0
# print(subscrib_list)
commands.getoutput('mv subscribe.list subscribe.list.bak')
with open("subscribe.list", "w") as f:
f.write(json.dumps(subscrib_list, indent=2))
return True
if __name__ == "__main__":
with open("panel.config") as panel_config:
panel = json.load(panel_config)
print(panel['subscribe_url'])
let_update_subscribe(panel['subscribe_url'])