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