mirror of https://github.com/dnomd343/ProxyC
Dnomd343
3 years ago
4 changed files with 175 additions and 44 deletions
@ -0,0 +1,87 @@ |
|||
#!/usr/bin/python |
|||
# -*- coding:utf-8 -*- |
|||
|
|||
import re |
|||
from ProxyDecoder import baseFunc |
|||
|
|||
|
|||
def __addressSplit(address: str) -> dict: # server:port |
|||
if address == '': |
|||
return {} |
|||
server, port = address.rsplit(':', maxsplit=1) |
|||
return { |
|||
'server': baseFunc.formatHost(server), |
|||
'port': int(port) |
|||
} |
|||
|
|||
|
|||
def __wsSplit(wsServer: str, params: dict) -> dict: |
|||
wsUrl = baseFunc.urlSplit(wsServer) |
|||
wsInfo = { |
|||
'server': wsUrl['server'], |
|||
'port': wsUrl['port'], |
|||
'ws': { |
|||
'host': wsUrl['server'], |
|||
'path': wsUrl['path'] if wsUrl['path'] != '' else '/ws' |
|||
} |
|||
} |
|||
if 'address' not in params: |
|||
return wsInfo |
|||
return { |
|||
**wsInfo, |
|||
**__addressSplit(params['address']) # overwrite server and port |
|||
} |
|||
|
|||
|
|||
def __brookDecode(url: str) -> dict: # Brook分享链接解码 |
|||
""" |
|||
Docs: https://txthinking.github.io/brook/#/brook-link |
|||
""" |
|||
url = baseFunc.urlSplit(url) # brook://KIND?QUERY |
|||
brookKind = url['server'] |
|||
if brookKind not in ['server', 'wsserver', 'wssserver']: # skip socks5 |
|||
raise Exception('Unknown brook kind') |
|||
|
|||
if 'password' not in url['params']: |
|||
raise Exception('Miss password option') |
|||
brookInfo = { |
|||
'passwd': url['params']['password'], |
|||
'remark': url['params']['name'] if 'name' in url['params'] else '' |
|||
} |
|||
|
|||
if brookKind == 'server': # server mode |
|||
if 'server' not in url['params']: |
|||
raise Exception('Miss server option') |
|||
return { |
|||
**brookInfo, |
|||
**__addressSplit(url['params']['server']) |
|||
} |
|||
|
|||
if brookKind == 'wsserver': # ws server mode |
|||
if 'wsserver' not in url['params']: |
|||
raise Exception('Miss wsserver option') |
|||
return { |
|||
**brookInfo, |
|||
**__wsSplit(url['params']['wsserver'], url['params']) |
|||
} |
|||
|
|||
if brookKind == 'wssserver': # wss server mode |
|||
if 'wssserver' not in url['params']: |
|||
raise Exception('Miss wssserver option') |
|||
brookInfo = { |
|||
**brookInfo, |
|||
**__wsSplit(url['params']['wssserver'], url['params']) |
|||
} |
|||
brookInfo['ws']['secure'] = {} |
|||
if 'insecure' in url['params'] and url['params']['insecure'] == 'true': |
|||
brookInfo['ws']['secure']['verify'] = False |
|||
return brookInfo |
|||
|
|||
|
|||
def decode(url: str) -> dict: |
|||
if url.split('://')[0] != 'brook': |
|||
raise Exception('Unexpected scheme') |
|||
return { |
|||
**{'type': 'brook'}, |
|||
**__brookDecode(url) |
|||
} |
Loading…
Reference in new issue