93 lines
3.2 KiB
Python
93 lines
3.2 KiB
Python
#!/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() |