mirror of https://github.com/dnomd343/ProxyC
dnomd343
2 years ago
4 changed files with 113 additions and 6 deletions
@ -0,0 +1,99 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
import os |
||||
|
import json |
||||
|
import itertools |
||||
|
from Builder import Hysteria |
||||
|
from Basis.Logger import logging |
||||
|
from Basis.Process import Process |
||||
|
from Basis.Functions import genFlag |
||||
|
from Basis.Functions import hostFormat |
||||
|
from Basis.Methods import hysteriaProtocols |
||||
|
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 loadServer(configFile: str, hysteriaConfig: dict) -> Process: |
||||
|
serverFile = os.path.join(settings['workDir'], configFile) |
||||
|
return Process(settings['workDir'], cmd = ['hysteria', '-c', serverFile, 'server'], file = { |
||||
|
'path': serverFile, |
||||
|
'content': json.dumps(hysteriaConfig) |
||||
|
}, isStart = False) |
||||
|
|
||||
|
|
||||
|
def loadClient(configFile: str, proxyInfo: dict, socksInfo: dict) -> Process: |
||||
|
clientFile = os.path.join(settings['workDir'], configFile) |
||||
|
hysteriaCommand, hysteriaConfig, _ = Hysteria.load(proxyInfo, socksInfo, clientFile) |
||||
|
return Process(settings['workDir'], cmd = hysteriaCommand, file = { |
||||
|
'path': clientFile, |
||||
|
'content': hysteriaConfig |
||||
|
}, isStart = False) |
||||
|
|
||||
|
|
||||
|
def loadTest(protocol: str, isObfs: bool, isAuth: bool) -> dict: |
||||
|
proxyInfo = { |
||||
|
'type': 'hysteria', |
||||
|
'server': settings['serverBind'], |
||||
|
'port': getAvailablePort(), |
||||
|
'protocol': protocol, |
||||
|
'obfs': None, |
||||
|
'passwd': None, |
||||
|
'up': 10, |
||||
|
'down': 50, |
||||
|
'sni': settings['host'], |
||||
|
'alpn': None, |
||||
|
'verify': True, |
||||
|
} |
||||
|
socksInfo = { # socks5 interface for test |
||||
|
'addr': settings['clientBind'], |
||||
|
'port': getAvailablePort() |
||||
|
} |
||||
|
serverConfig = { |
||||
|
'listen': '%s:%i' % (hostFormat(proxyInfo['server'], v6Bracket = True), proxyInfo['port']), |
||||
|
'protocol': proxyInfo['protocol'], |
||||
|
'cert': settings['cert'], |
||||
|
'key': settings['key'], |
||||
|
} |
||||
|
configName = 'hysteria_' + protocol |
||||
|
caption = 'Hysteria protocol ' + protocol |
||||
|
if isObfs: |
||||
|
configName += '_obfs' |
||||
|
caption += ' (with obfs)' |
||||
|
proxyInfo['obfs'] = genFlag(length = 8) |
||||
|
serverConfig['obfs'] = proxyInfo['obfs'] |
||||
|
if isAuth: |
||||
|
configName += '_auth' |
||||
|
caption += ' (with auth)' |
||||
|
proxyInfo['passwd'] = genFlag(length = 8) |
||||
|
serverConfig['auth'] = { |
||||
|
'mode': 'passwords', |
||||
|
'config': [proxyInfo['passwd']] |
||||
|
} |
||||
|
testInfo = { |
||||
|
'title': caption, |
||||
|
'client': loadClient(configName + '_client.json', proxyInfo, socksInfo), |
||||
|
'server': loadServer(configName + '_server.json', serverConfig), |
||||
|
'socks': socksInfo, # exposed socks5 address |
||||
|
'interface': { |
||||
|
'addr': proxyInfo['server'], |
||||
|
'port': proxyInfo['port'], |
||||
|
} |
||||
|
} |
||||
|
logging.debug('New hysteria test -> %s' % testInfo) |
||||
|
return testInfo |
||||
|
|
||||
|
|
||||
|
def load(): |
||||
|
for protocol, isObfs, isAuth in itertools.product(hysteriaProtocols, [False, True], [False, True]): |
||||
|
yield loadTest(protocol, isObfs, isAuth) |
Loading…
Reference in new issue