mirror of https://github.com/dnomd343/ProxyC
Dnomd343
3 years ago
4 changed files with 95 additions and 9 deletions
@ -0,0 +1,71 @@ |
|||||
|
#!/usr/bin/python |
||||
|
# -*- coding:utf-8 -*- |
||||
|
|
||||
|
import re |
||||
|
from ProxyDecoder import baseFunc |
||||
|
|
||||
|
def __ssrCommonDecode(url: str): |
||||
|
''' |
||||
|
ShadowsocksR经典分享链接解码 |
||||
|
|
||||
|
FORMAT: ssr://BASE64-ENCODED-STRING-WITHOUT-PADDING |
||||
|
|
||||
|
EXAMPLE: |
||||
|
ssr://{base64} |
||||
|
-> server:port:protocol:method:obfs:base64(passwd)/?... |
||||
|
-> obfsparam=...&protoparam=...&remarks=...&group=... |
||||
|
''' |
||||
|
try: |
||||
|
content = re.search(r'^ssr://([\S]+)$', url).group(1) # ssr://{base64} |
||||
|
content = re.search( |
||||
|
r'^([a-zA-Z0-9.:_-]*):([0-9]*):' # server:p/r |
||||
|
r'([0-9a-zA-Z_.-]*):([0-9a-zA-Z_.-]*):([0-9a-zA-Z_.-]*):' # protocol:method:obfs: |
||||
|
r'([0-9a-zA-Z_=+\\-]*)(/\?)?([\S]*)?$' # base(passwd)/?... |
||||
|
, baseFunc.base64Decode(content) |
||||
|
) |
||||
|
info = { |
||||
|
'server': content.group(1), |
||||
|
'port': int(content.group(2)), |
||||
|
'password': baseFunc.base64Decode(content.group(6)), |
||||
|
'method': content.group(4), |
||||
|
'protocol': content.group(3), |
||||
|
'obfs': content.group(5), |
||||
|
} |
||||
|
for field in content.group(8).split('&'): # /?obfsparam=...&protoparam=...&remarks=...&group=... |
||||
|
if field.find('=') == -1: # 缺失xxx=... |
||||
|
continue |
||||
|
field = re.search(r'^([\S]*?)=([\S]*)$', field) # xxx=... |
||||
|
if field.group(1) == 'protoparam': |
||||
|
info['protocolParam'] = baseFunc.base64Decode(field.group(2)) |
||||
|
elif field.group(1) == 'obfsparam': |
||||
|
info['obfsParam'] = baseFunc.base64Decode(field.group(2)) |
||||
|
elif field.group(1) == 'remarks': |
||||
|
info['remark'] = baseFunc.base64Decode(field.group(2)) |
||||
|
elif field.group(1) == 'group': |
||||
|
info['group'] = baseFunc.base64Decode(field.group(2)) |
||||
|
return info |
||||
|
except: |
||||
|
return None |
||||
|
|
||||
|
def ssrDecode(url: str): |
||||
|
''' |
||||
|
ShadowsocksR 分享链接解码 |
||||
|
|
||||
|
链接合法: |
||||
|
return {...} |
||||
|
|
||||
|
链接不合法: |
||||
|
return None |
||||
|
''' |
||||
|
try: |
||||
|
if url[0:6] != 'ssr://': |
||||
|
return None |
||||
|
result = __ssrCommonDecode(url) # try common decode |
||||
|
if result != None: # 解析成功 |
||||
|
result['type'] = 'ssr' |
||||
|
return result |
||||
|
else: # 解析失败 |
||||
|
return None |
||||
|
except: |
||||
|
pass |
||||
|
return None |
Loading…
Reference in new issue