mirror of https://github.com/dnomd343/ProxyC
Dnomd343
3 years ago
6 changed files with 195 additions and 23 deletions
@ -0,0 +1,164 @@ |
|||||
|
#!/usr/bin/python |
||||
|
# -*- coding:utf-8 -*- |
||||
|
|
||||
|
import copy |
||||
|
import json |
||||
|
|
||||
|
from ProxyTester import Plugin |
||||
|
|
||||
|
config = {} |
||||
|
|
||||
|
trojanGoMethod = [ |
||||
|
'AES-128-GCM', |
||||
|
'AES-256-GCM', |
||||
|
'CHACHA20-IETF-POLY1305' |
||||
|
] |
||||
|
|
||||
|
sip003PluginList = [ # SIP003插件列表 |
||||
|
'obfs-local', |
||||
|
'simple-tls', |
||||
|
'v2ray-plugin', |
||||
|
'xray-plugin', |
||||
|
'kcptun-client', |
||||
|
'gost-plugin', |
||||
|
'ck-client', |
||||
|
'gq-client', |
||||
|
'mtt-client', |
||||
|
'rabbit-plugin', |
||||
|
'qtun-client', |
||||
|
'gun-plugin' |
||||
|
] |
||||
|
|
||||
|
def loadTrojanGo(isWs: bool, ssMethod: str or None) -> dict: |
||||
|
caption = 'Trojan-Go original' |
||||
|
serverConfig = { |
||||
|
'run_type': 'server', |
||||
|
'local_addr': '127.0.0.1', |
||||
|
'local_port': config['port'], |
||||
|
'remote_addr': '127.0.0.1', # only for shadowsocks fallback |
||||
|
'remote_port': 343, |
||||
|
'password': [ |
||||
|
config['passwd'] |
||||
|
], |
||||
|
'disable_http_check': True, |
||||
|
'ssl': { |
||||
|
'cert': config['cert'], |
||||
|
'key': config['key'] |
||||
|
} |
||||
|
} |
||||
|
proxyInfo = { |
||||
|
'type': 'trojan-go', |
||||
|
'server': '127.0.0.1', |
||||
|
'port': config['port'], |
||||
|
'passwd': config['passwd'], |
||||
|
'sni': config['host'], |
||||
|
} |
||||
|
if ssMethod is not None: # add Shadowsocks encrypt |
||||
|
caption += ' ' + ssMethod + ' encrypt' |
||||
|
serverConfig['shadowsocks'] = { |
||||
|
'enabled': True, |
||||
|
'method': ssMethod, |
||||
|
'password': config['passwd'] |
||||
|
} |
||||
|
proxyInfo['ss'] = { |
||||
|
'method': ssMethod, |
||||
|
'passwd': config['passwd'] |
||||
|
} |
||||
|
if isWs: # add WebSocket config |
||||
|
caption += ' (websocket)' |
||||
|
serverConfig['websocket'] = { |
||||
|
'enabled': True, |
||||
|
'host': config['host'], |
||||
|
'path': config['path'] |
||||
|
} |
||||
|
proxyInfo['ws'] = { |
||||
|
'host': config['host'], |
||||
|
'path': config['path'] |
||||
|
} |
||||
|
return { |
||||
|
'caption': caption, |
||||
|
'client': proxyInfo, |
||||
|
'server': serverConfig, |
||||
|
'file': None, |
||||
|
'path': None |
||||
|
} |
||||
|
|
||||
|
def loadTrojanGoPlugin(plugin: str) -> list: |
||||
|
result = [] |
||||
|
rabbitPort = 20191 |
||||
|
trojanBaseConfig = loadTrojanGo(False, None) |
||||
|
|
||||
|
if plugin == 'rabbit-plugin': # rabbit-tcp |
||||
|
trojanBaseConfig['caption'] = 'Trojan-Go rabbit-plugin (basic mode)' |
||||
|
trojanBaseConfig['client']['port'] = rabbitPort |
||||
|
trojanBaseConfig['client']['plugin'] = { |
||||
|
'type': 'rabbit-plugin', |
||||
|
'param': 'serviceAddr=127.0.0.1:' + str(config['port']) + ';password=' + config['passwd'] |
||||
|
} |
||||
|
trojanBaseConfig['server']['transport_plugin'] = { |
||||
|
'enabled': True, |
||||
|
'type': 'other', |
||||
|
'command': 'rabbit', |
||||
|
'arg': [ |
||||
|
'-mode', 's', |
||||
|
'-password', config['passwd'], |
||||
|
'-rabbit-addr', ':' + str(rabbitPort) |
||||
|
] |
||||
|
} |
||||
|
trojanBaseConfig['file'] = None |
||||
|
trojanBaseConfig['path'] = None |
||||
|
return [trojanBaseConfig] |
||||
|
|
||||
|
# other plugin |
||||
|
pluginConfig = Plugin.loadPluginConfig(plugin, config['host'], config['cert'], config['key']) # 载入插件配置 |
||||
|
for pluginOption in pluginConfig: |
||||
|
trojanConfig = copy.deepcopy(trojanBaseConfig) |
||||
|
trojanConfig['caption'] = 'Trojan-Go plugin ' + plugin + ' (' + pluginOption['caption'] + ')' |
||||
|
trojanConfig['client']['plugin'] = pluginOption['client'] |
||||
|
trojanConfig['server']['transport_plugin'] = { |
||||
|
'enabled': True, |
||||
|
'type': 'shadowsocks', |
||||
|
'command': pluginOption['server']['type'], |
||||
|
'option': pluginOption['server']['param'] |
||||
|
} |
||||
|
trojanConfig['file'] = pluginOption['file'] |
||||
|
trojanConfig['path'] = pluginOption['path'] |
||||
|
result.append(trojanConfig) |
||||
|
return result |
||||
|
|
||||
|
def loadTrojanGoConfig(trojanGoConfigList: list) -> list: |
||||
|
result = [] |
||||
|
for trojanGoConfig in trojanGoConfigList: |
||||
|
result.append({ |
||||
|
'caption': trojanGoConfig['caption'], |
||||
|
'proxy': trojanGoConfig['client'], |
||||
|
'server': { |
||||
|
'startCommand': ['trojan-go', '-config', config['file']], |
||||
|
'fileContent': json.dumps(trojanGoConfig['server']), |
||||
|
'filePath': config['file'], |
||||
|
'envVar': {'PATH': '/usr/bin'} |
||||
|
}, |
||||
|
'aider': { |
||||
|
'startCommand': None, |
||||
|
'fileContent': trojanGoConfig['file'], |
||||
|
'filePath': trojanGoConfig['path'], |
||||
|
'envVar': {} |
||||
|
} |
||||
|
}) |
||||
|
return result |
||||
|
|
||||
|
def trojanGoTest(trojanGoConfig: dict) -> list: |
||||
|
result = [] |
||||
|
for key, value in trojanGoConfig.items(): # trojanGoConfig -> config |
||||
|
config[key] = value |
||||
|
|
||||
|
result += loadTrojanGoConfig([loadTrojanGo(False, None)]) |
||||
|
result += loadTrojanGoConfig([loadTrojanGo(True, None)]) |
||||
|
for ssMethod in trojanGoMethod: |
||||
|
result += loadTrojanGoConfig([loadTrojanGo(False, ssMethod)]) |
||||
|
result += loadTrojanGoConfig([loadTrojanGo(True, ssMethod)]) |
||||
|
|
||||
|
for plugin in sip003PluginList: |
||||
|
result += loadTrojanGoConfig(loadTrojanGoPlugin(plugin)) |
||||
|
|
||||
|
return result |
Loading…
Reference in new issue