Files
ssr_ss_decode/ssr_ss_decode.py
2020-01-14 15:29:59 +08:00

87 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/1/14 15:08
# @Author : 852782749@qq.com
# @File : ssr_ss_decode.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()