You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

288 lines
11 KiB

#!/usr/bin/python
# -*- coding:utf-8 -*-
import re
import json
gqConfig = {
'key': 'dnomd343'
}
ckConfig = {
'BypassUID': [
'Q3iw2bAbC3KZvpm58XR6+Q=='
],
'RedirAddr': 'www.bing.com',
'PrivateKey': 'SFMUZ2g7e0jqzXXhBh5/rh/Odslnyu8A3LuZqH4ySVM='
}
pluginConfig = {
'obfs-local': [
{
'caption': 'http mode',
'server': '--plugin obfs-server --plugin-opts "obfs=http"',
'client': '--plugin obfs-local --plugin-opts "obfs=http;obfs-host=www.bing.com"',
},
{
'caption': 'tls mode',
'server': '--plugin obfs-server --plugin-opts "obfs=tls"',
'client': '--plugin obfs-local --plugin-opts "obfs=tls;obfs-host=www.bing.com"',
},
{
'caption': 'http mode with URI',
'server': '--plugin obfs-server --plugin-opts "obfs=http"',
'client': '--plugin obfs-local --plugin-opts "obfs=http;obfs-host=www.bing.com;obfs-uri=/test"',
},
{
'caption': 'http mode with POST method',
'server': '--plugin obfs-server --plugin-opts "obfs=http"',
'client': '--plugin obfs-local --plugin-opts "obfs=http;http-method=POST;obfs-host=www.bing.com"',
}
],
'simple-tls': [
{
'caption': 'basic mode',
'server': '--plugin simple-tls --plugin-opts "s;n=$HOST"',
'client': '--plugin simple-tls --plugin-opts "n=$HOST;no-verify"',
},
{
'caption': 'with auth key',
'server': '--plugin simple-tls --plugin-opts "s;n=$HOST;auth=dnomd343"',
'client': '--plugin simple-tls --plugin-opts "n=$HOST;no-verify;auth=dnomd343"',
},
{
'caption': 'wss mode',
'server': '--plugin simple-tls --plugin-opts "s;n=$HOST;ws;ws-path=/test"',
'client': '--plugin simple-tls --plugin-opts "n=$HOST;no-verify;ws;ws-path=/test"',
}
],
'v2ray-plugin': [
{
'caption': 'basic mode',
'server': '--plugin v2ray-plugin --plugin-opts "server"',
'client': '--plugin v2ray-plugin',
},
{
'caption': 'basic with path',
'server': '--plugin v2ray-plugin --plugin-opts "server;path=/test"',
'client': '--plugin v2ray-plugin --plugin-opts "path=/test"',
},
{
'caption': 'basic mode with tls',
'server': '--plugin v2ray-plugin --plugin-opts "server;tls;host=$HOST;cert=$CERT;key=$KEY"',
'client': '--plugin v2ray-plugin --plugin-opts "tls;host=$HOST"',
},
{
'caption': 'quic mode',
'server': '--plugin v2ray-plugin --plugin-opts "server;mode=quic;host=$HOST;cert=$CERT;key=$KEY"',
'client': '--plugin v2ray-plugin --plugin-opts "mode=quic;host=$HOST"',
}
],
'xray-plugin': [
{
'caption': 'basic mode',
'server': '--plugin xray-plugin --plugin-opts "server"',
'client': '--plugin xray-plugin',
},
{
'caption': 'basic mode with tls',
'server': '--plugin xray-plugin --plugin-opts "server;tls;host=$HOST;cert=$CERT;key=$KEY"',
'client': '--plugin xray-plugin --plugin-opts "tls;host=$HOST"',
},
{
'caption': 'quic mode',
'server': '--plugin xray-plugin --plugin-opts "server;mode=quic;host=$HOST;cert=$CERT;key=$KEY"',
'client': '--plugin xray-plugin --plugin-opts "mode=quic;host=$HOST"',
},
{
'caption': 'grpc mode',
'server': '--plugin xray-plugin --plugin-opts "server;mode=grpc;host=$HOST;cert=$CERT;key=$KEY"',
'client': '--plugin xray-plugin --plugin-opts "mode=grpc"',
},
{
'caption': 'grpc mode with tls',
'server': '--plugin xray-plugin --plugin-opts "server;tls;mode=grpc;host=$HOST;cert=$CERT;key=$KEY"',
'client': '--plugin xray-plugin --plugin-opts "tls;mode=grpc;host=$HOST"',
}
],
'kcptun-client': [
{
'caption': 'basic mode',
'server': '--plugin kcptun-server',
'client': '--plugin kcptun-client',
},
{
'caption': 'with nocomp',
'server': '--plugin kcptun-server --plugin-opts "nocomp"',
'client': '--plugin kcptun-client --plugin-opts "nocomp"',
},
{
'caption': 'with key',
'server': '--plugin kcptun-server --plugin-opts "key=dnomd343"',
'client': '--plugin kcptun-client --plugin-opts "key=dnomd343"',
},
{
'caption': 'fast3 mode with twofish crypt',
'server': '--plugin kcptun-server --plugin-opts "crypt=twofish;mode=fast3"',
'client': '--plugin kcptun-client --plugin-opts "crypt=twofish;mode=fast3"',
}
],
'gost-plugin': [
{
'caption': 'ws mode',
'server': '--plugin gost-plugin --plugin-opts "server;mode=ws"',
'client': '--plugin gost-plugin --plugin-opts "mode=ws"',
},
{
'caption': 'mws mode',
'server': '--plugin gost-plugin --plugin-opts "server;mode=mws"',
'client': '--plugin gost-plugin --plugin-opts "mode=mws;mux=1"',
},
{
'caption': 'tls mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=tls"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=tls"',
},
{
'caption': 'xtls mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=xtls"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=xtls"',
},
{
'caption': 'mtls mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=mtls"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=mtls;mux=1"',
},
{
'caption': 'h2 mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=h2"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=h2"',
},
{
'caption': 'wss mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=wss"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=wss"',
},
{
'caption': 'mwss mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=mwss"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=mwss;mux=1"',
},
{
'caption': 'quic mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=quic"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=quic"',
},
{
'caption': 'grpc mode',
'server': '--plugin gost-plugin --plugin-opts "server;cert=$CERT;key=$KEY;mode=grpc"',
'client': '--plugin gost-plugin --plugin-opts "serverName=$HOST;mode=grpc"',
}
],
'ck-client': [
{
'caption': 'basic mode',
'server': '--plugin ck-server --plugin-opts "$CONFIG"',
'client': '--plugin ck-client --plugin-opts "UID=Q3iw2bAbC3KZvpm58XR6+Q==;'
'PublicKey=xTbqKW4Sg/xjDXDhys26ChXUQSrgxO+mBflTUeQpfWQ=;'
'ServerName=www.bing.com;BrowserSig=chrome;'
'NumConn=4;EncryptionMethod=plain;StreamTimeout=300"',
}
],
'gq-client': [
{
'caption': 'basic mode',
'server': '--plugin gq-server --plugin-opts "$CONFIG"',
'client': '--plugin gq-client --plugin-opts "ServerName=www.bing.com;'
'key=dnomd343;TicketTimeHint=300;Browser=chrome"',
}
],
'mtt-client': [
{
'caption': 'basic mode',
'server': '--plugin mtt-server --plugin-opts "cert=$CERT;key=$KEY"',
'client': '--plugin mtt-client --plugin-opts "n=$HOST"',
},
{
'caption': 'wss mode',
'server': '--plugin mtt-server --plugin-opts "wss;cert=$CERT;key=$KEY"',
'client': '--plugin mtt-client --plugin-opts "wss;n=$HOST"',
},
{
'caption': 'wss mode with path',
'server': '--plugin mtt-server --plugin-opts "wss;wss-path=/test;cert=$CERT;key=$KEY"',
'client': '--plugin mtt-client --plugin-opts "wss;wss-path=/test;n=$HOST"',
}
],
'qtun-client': [
{
'caption': 'basic mode',
'server': '--plugin qtun-server --plugin-opts "cert=$CERT;key=$KEY"',
'client': '--plugin qtun-client --plugin-opts "host=$HOST"',
}
],
'gun-plugin': [
{
'caption': 'basic mode',
'server': '--plugin gun-plugin --plugin-opts "server:cleartext"',
'client': '--plugin gun-plugin --plugin-opts "client:cleartext"',
},
{
'caption': 'basic mode with tls',
'server': '--plugin gun-plugin --plugin-opts "server:$CERT:$KEY"',
'client': '--plugin gun-plugin --plugin-opts "client:$HOST"',
}
]
}
def loadPluginConfig(plugin: str, host: str, cert: str, key: str) -> list: # without rabbit-tcp
result = []
filePath = None
fileContent = None
if plugin == 'ck-client': # Cloak
filePath = '/tmp/ck-test.json'
fileContent = json.dumps(ckConfig)
if plugin == 'gq-client': # GoQuiet
filePath = '/tmp/gq-test.json'
fileContent = json.dumps(gqConfig)
for pluginInfo in pluginConfig[plugin]:
pluginInfo['server'] = pluginInfo['server'].replace('$HOST', host).replace('$CERT', cert).replace('$KEY', key)
pluginInfo['client'] = pluginInfo['client'].replace('$HOST', host).replace('$CERT', cert).replace('$KEY', key)
if filePath is not None:
pluginInfo['server'] = pluginInfo['server'].replace('$CONFIG', filePath)
content = re.search(r'^--plugin ([\s\S]*) --plugin-opts "([\s\S]*)"$', pluginInfo['server'])
if content is None:
content = re.search(r'^--plugin ([\s\S]*)$', pluginInfo['server'])
serverOption = {
'type': content[1],
'param': ''
}
else:
serverOption = {
'type': content[1],
'param': content[2]
}
content = re.search(r'^--plugin ([\s\S]*) --plugin-opts "([\s\S]*)"$', pluginInfo['client'])
if content is None:
content = re.search(r'^--plugin ([\s\S]*)$', pluginInfo['client'])
clientOption = {
'type': content[1],
'param': ''
}
else:
clientOption = {
'type': content[1],
'param': content[2]
}
result.append({
'caption': pluginInfo['caption'],
'server': serverOption,
'client': clientOption,
'file': fileContent,
'path': filePath
})
return result