#!/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()