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