2020-01-14
ssr与ss解析
This commit is contained in:
93
ssr_ss_decode.py
Normal file
93
ssr_ss_decode.py
Normal file
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/1/14 15:08
|
||||
# @Author : 852782749@qq.com
|
||||
# @File : ssr_ss_decode.py
|
||||
# @Software: PyCharm
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : 2020/1/14 13:54
|
||||
# @Author : 852782749@qq.com
|
||||
# @File : ssr-->ss.py
|
||||
# @Software: PyCharm
|
||||
import base64
|
||||
|
||||
def parse():
|
||||
while True:
|
||||
# ssr = "ssr://dHcxLWpxeGguZGRucy5uZXQ6MzIzNjE6YXV0aF9hZXMxMjhfbWQ1OmNoYWNoYTIwOmh0dHBfc2ltcGxlOmFGbHhUMUZsVUEvP29iZnNwYXJhbT1aRzkzYm14dllXUXVkMmx1Wkc5M2MzVndaR0YwWlM1amIyMCZwcm90b3BhcmFtPU5Eb3liRVZyTjNFJnJlbWFya3M9UUZOVFVsUlBUMHhmZEhjeExXcHhlR2d1WkdSdWN5NXVaWFEmZ3JvdXA9VTFOU1ZFOVBUQzVEVDAwZzVvNm82WUNC"
|
||||
ssr = input('请输入需要解析的ssr链接:').strip()
|
||||
|
||||
if ssr == 'q' or ssr =='quit':
|
||||
break
|
||||
if ssr.startswith('ss://'):
|
||||
base64_encode_str = ssr[5:]
|
||||
parse_ss(base64_encode_str)
|
||||
continue
|
||||
if ssr.startswith('ssr://'):
|
||||
base64_encode_str = ssr[6:]
|
||||
parse_ssr(base64_encode_str)
|
||||
|
||||
def parse_ss(base64_encode_str):
|
||||
decode_str = base64_decode(base64_encode_str)
|
||||
parts = decode_str.split(':')
|
||||
if len(parts) !=3:
|
||||
print ('不能解析ss链接:%s') % base64_encode_str
|
||||
return
|
||||
method = parts[0]
|
||||
password_and_ip = parts[1]
|
||||
post = parts[2]
|
||||
|
||||
pass_and_server = password_and_ip.split('@')
|
||||
password = pass_and_server[0]
|
||||
server = pass_and_server[1]
|
||||
print("解析结果:")
|
||||
print('加密方法:%s,密码:%s,server:%s,port:%s' % (method,password,server,post))
|
||||
|
||||
|
||||
def parse_ssr(base64_encode_str):
|
||||
decode_str = base64_decode(base64_encode_str)
|
||||
parts = decode_str.split(':')
|
||||
if len(parts) != 6:
|
||||
print('不能解析ssr链接:%s' % base64_encode_str)
|
||||
return
|
||||
server = parts[0]
|
||||
port = parts[1]
|
||||
protocol = parts[2]
|
||||
method = parts[3]
|
||||
obfs = parts[4]
|
||||
password_and_params = parts[5]
|
||||
|
||||
password_and_params = password_and_params.split("/?")
|
||||
|
||||
password_encode_str = password_and_params[0]
|
||||
password = base64_decode(password_encode_str)
|
||||
params = password_and_params[1]
|
||||
|
||||
param_parts = params.split('&')
|
||||
|
||||
param_dic = {}
|
||||
for part in param_parts:
|
||||
key_and_value = part.split('=')
|
||||
param_dic[key_and_value[0]] = key_and_value[1]
|
||||
|
||||
obfsparam = base64_decode(param_dic['obfsparam'])
|
||||
protoparam = base64_decode(param_dic['protoparam'])
|
||||
remarks = base64_decode(param_dic['remarks'])
|
||||
group = base64_decode(param_dic['group'])
|
||||
print("解析结果:")
|
||||
|
||||
print('server:%s,port:%s,协议:%s,加密方法:%s,密码:%s,混淆:%s,混淆参数:%s,协议参数:%s,备注::%s,分组:%s'
|
||||
% (server,port,protocol,method,password,obfs,obfsparam,protoparam,remarks,group))
|
||||
def fill_padding(base64_encode_str):
|
||||
|
||||
need_padding = len(base64_encode_str)%4 !=0
|
||||
if need_padding:
|
||||
missing_padding = 4 - need_padding
|
||||
base64_encode_str += '=' * missing_padding
|
||||
return base64_encode_str
|
||||
def base64_decode(base64_encode_str):
|
||||
base64_encode_str = fill_padding(base64_encode_str)
|
||||
return base64.urlsafe_b64decode(base64_encode_str).decode('utf-8')
|
||||
|
||||
if __name__ == '__main__':
|
||||
parse()
|
||||
Reference in New Issue
Block a user