mirror of https://github.com/dnomd343/ProxyC
dnomd343
2 years ago
3 changed files with 106 additions and 2 deletions
@ -0,0 +1,102 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
import copy |
|||
import itertools |
|||
from Builder import Brook |
|||
from Basis.Logger import logging |
|||
from Basis.Process import Process |
|||
from Basis.Functions import genFlag |
|||
from Basis.Functions import hostFormat |
|||
from Basis.Functions import getAvailablePort |
|||
|
|||
settings = { |
|||
'serverBind': '127.0.0.1', |
|||
'clientBind': '127.0.0.1', |
|||
# 'serverBind': '::1', |
|||
# 'clientBind': '::1', |
|||
'workDir': '/tmp/ProxyC', |
|||
'host': '343.re', |
|||
'cert': '/etc/ssl/certs/343.re/fullchain.pem', |
|||
'key': '/etc/ssl/certs/343.re/privkey.pem', |
|||
} |
|||
|
|||
|
|||
def originStream(isUot: bool) -> dict: |
|||
return { |
|||
'caption': 'original' + (' (UDP over TCP)' if isUot else ''), |
|||
'info': { |
|||
'type': 'origin', |
|||
'uot': isUot, |
|||
}, |
|||
'command': lambda proxyInfo: ['server'] + [ # callback function for loading brook command |
|||
'--listen', '%s:%i' % (hostFormat(proxyInfo['server'], v6Bracket = True), proxyInfo['port']), |
|||
'--password', proxyInfo['passwd'], |
|||
] |
|||
} |
|||
|
|||
|
|||
def loadWsCommand(proxyInfo: dict) -> list: # load start command for brook server |
|||
return ([ |
|||
'wsserver', '--listen', '%s:%i' % (hostFormat(proxyInfo['server'], v6Bracket = True), proxyInfo['port']) |
|||
] if proxyInfo['stream']['secure'] is None else [ |
|||
'wssserver', '--domainaddress', '%s:%i' % (proxyInfo['stream']['host'], proxyInfo['port']) |
|||
]) + [ |
|||
'--path', proxyInfo['stream']['path'], |
|||
'--password', proxyInfo['passwd'], |
|||
] + ([] if proxyInfo['stream']['secure'] is None else [ |
|||
'--cert', settings['cert'], |
|||
'--certkey', settings['key'], |
|||
]) + (['--withoutBrookProtocol'] if proxyInfo['stream']['raw'] else []) |
|||
|
|||
|
|||
def wsStream(isRaw: bool, isSecure: bool): |
|||
return { |
|||
'caption': 'websocket' + (' (with tls)' if isSecure else '') + (' (without brook)' if isRaw else ''), |
|||
'info': { |
|||
'type': 'ws', |
|||
'host': settings['host'], |
|||
'path': '/' + genFlag(length = 6), |
|||
'raw': isRaw, |
|||
'secure': {'verify': True} if isSecure else None, |
|||
}, |
|||
'command': loadWsCommand # callback function for loading brook command |
|||
} |
|||
|
|||
|
|||
def loadTest(stream: dict) -> dict: |
|||
proxyInfo = { |
|||
'server': settings['serverBind'], |
|||
'port': getAvailablePort(), |
|||
'passwd': genFlag(), |
|||
'stream': stream['info'] |
|||
} |
|||
socksInfo = { # socks5 interface for test |
|||
'addr': settings['clientBind'], |
|||
'port': getAvailablePort() |
|||
} |
|||
clientCommand, _, _ = Brook.load(proxyInfo, socksInfo, '') |
|||
serverCommand = ['brook', '--debug', '--listen', ':'] + stream['command'](proxyInfo) |
|||
testInfo = { # release test info |
|||
'title': 'Brook test: ' + stream['caption'], |
|||
'client': Process(settings['workDir'], cmd = clientCommand, isStart = False), |
|||
'server': Process(settings['workDir'], cmd = serverCommand, isStart = False), |
|||
'socks': socksInfo, # exposed socks5 address |
|||
'interface': { |
|||
'addr': proxyInfo['server'], |
|||
'port': proxyInfo['port'], |
|||
} |
|||
} |
|||
logging.debug('New brook test -> %s' % testInfo) |
|||
return testInfo |
|||
|
|||
|
|||
def load(): |
|||
streams = [] |
|||
addStream = lambda x: streams.append(copy.deepcopy(x)) |
|||
for isUot in [False, True]: |
|||
addStream(originStream(isUot)) # origin stream test |
|||
for isSecure, isRaw in itertools.product([False, True], [False, True]): |
|||
addStream(wsStream(isRaw, isSecure)) # websocket stream test |
|||
for stream in streams: |
|||
yield loadTest(stream) |
Loading…
Reference in new issue