mirror of https://github.com/dnomd343/ProxyC
dnomd343
2 years ago
7 changed files with 324 additions and 9 deletions
@ -0,0 +1,43 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from Filter import Xray |
||||
|
from Basis.Filter import rulesFilter |
||||
|
from Basis.Functions import isHost, isPort |
||||
|
from Basis.Functions import toInt, toStr, toStrTidy |
||||
|
|
||||
|
trojanObject = rulesFilter({ |
||||
|
'server': { |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'filter': isHost, |
||||
|
'errMsg': 'Invalid server address' |
||||
|
}, |
||||
|
'port': { |
||||
|
'type': int, |
||||
|
'format': toInt, |
||||
|
'filter': isPort, |
||||
|
'errMsg': 'Invalid port number' |
||||
|
}, |
||||
|
'passwd': { |
||||
|
'type': str, |
||||
|
'format': toStr, |
||||
|
'errMsg': 'Invalid password content' |
||||
|
}, |
||||
|
'stream': { |
||||
|
'optional': True, |
||||
|
'default': { |
||||
|
'type': 'tcp' |
||||
|
}, |
||||
|
'multiSub': True, |
||||
|
'type': { |
||||
|
'tcp': Xray.tcpObject, |
||||
|
'kcp': Xray.kcpObject, |
||||
|
'ws': Xray.wsObject, |
||||
|
'h2': Xray.h2Object, |
||||
|
'quic': Xray.quicObject, |
||||
|
'grpc': Xray.grpcObject, |
||||
|
}, |
||||
|
'errMsg': 'Invalid Trojan stream' |
||||
|
} |
||||
|
}) |
@ -0,0 +1,51 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from Filter import Xray |
||||
|
from Basis.Filter import rulesFilter |
||||
|
from Basis.Functions import isHost, isPort |
||||
|
from Basis.Functions import toInt, toStrTidy |
||||
|
|
||||
|
vlessObject = rulesFilter({ |
||||
|
'server': { |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'filter': isHost, |
||||
|
'errMsg': 'Invalid server address' |
||||
|
}, |
||||
|
'port': { |
||||
|
'type': int, |
||||
|
'format': toInt, |
||||
|
'filter': isPort, |
||||
|
'errMsg': 'Invalid port number' |
||||
|
}, |
||||
|
'method': { |
||||
|
'optional': True, |
||||
|
'default': 'none', |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'filter': lambda s: s == 'none', |
||||
|
'errMsg': 'Unknown VLESS method' |
||||
|
}, |
||||
|
'id': { |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'errMsg': 'Invalid VLESS ID' |
||||
|
}, |
||||
|
'stream': { |
||||
|
'optional': True, |
||||
|
'default': { |
||||
|
'type': 'tcp' |
||||
|
}, |
||||
|
'multiSub': True, |
||||
|
'type': { |
||||
|
'tcp': Xray.tcpObject, |
||||
|
'kcp': Xray.kcpObject, |
||||
|
'ws': Xray.wsObject, |
||||
|
'h2': Xray.h2Object, |
||||
|
'quic': Xray.quicObject, |
||||
|
'grpc': Xray.grpcObject, |
||||
|
}, |
||||
|
'errMsg': 'Invalid VLESS stream' |
||||
|
} |
||||
|
}) |
@ -0,0 +1,164 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
import copy |
||||
|
from Filter import V2ray |
||||
|
from Basis.Filter import rulesFilter |
||||
|
from Basis.Constant import xtlsFlows |
||||
|
from Basis.Functions import toStrTidy, toBool |
||||
|
|
||||
|
|
||||
|
def xtlsFlowFormat(flow: str) -> str: |
||||
|
flow = flow.replace('_', '-') |
||||
|
xtlsFlowAlias = { |
||||
|
'xtls-origin': {'origin', 'xtls-rprx-origin'}, |
||||
|
'xtls-direct': {'direct', 'xtls-rprx-direct'}, |
||||
|
'xtls-splice': {'splice', 'xtls-rprx-splice'}, |
||||
|
} |
||||
|
for xtlsFlow, alias in xtlsFlowAlias.items(): |
||||
|
if flow in alias: |
||||
|
return xtlsFlow |
||||
|
return flow # alias not found |
||||
|
|
||||
|
|
||||
|
tlsObject = rulesFilter({ |
||||
|
'type': { |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'filter': lambda s: s == 'tls', |
||||
|
'errMsg': 'Invalid TLS secure type' |
||||
|
}, |
||||
|
'sni': { |
||||
|
'optional': True, |
||||
|
'default': '', |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'errMsg': 'Invalid SNI content' |
||||
|
}, |
||||
|
'alpn': { |
||||
|
'optional': True, |
||||
|
'default': None, |
||||
|
'allowNone': True, |
||||
|
'type': str, |
||||
|
'format': lambda s: toStrTidy(s).replace(' ', ''), # remove space |
||||
|
'filter': lambda s: s in ['h2', 'http/1.1', 'h2,http/1.1'], |
||||
|
'errMsg': 'Invalid alpn option' |
||||
|
}, |
||||
|
'verify': { |
||||
|
'optional': True, |
||||
|
'default': True, |
||||
|
'type': bool, |
||||
|
'format': toBool, |
||||
|
'errMsg': 'Invalid verify option' |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
xtlsObject = rulesFilter({ |
||||
|
'type': { |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'filter': lambda s: s == 'xtls', |
||||
|
'errMsg': 'Invalid XTLS secure type' |
||||
|
}, |
||||
|
'sni': { |
||||
|
'optional': True, |
||||
|
'default': '', |
||||
|
'type': str, |
||||
|
'format': toStrTidy, |
||||
|
'errMsg': 'Invalid SNI content' |
||||
|
}, |
||||
|
'alpn': { |
||||
|
'optional': True, |
||||
|
'default': None, |
||||
|
'allowNone': True, |
||||
|
'type': str, |
||||
|
'format': lambda s: toStrTidy(s).replace(' ', ''), # remove space |
||||
|
'filter': lambda s: s in ['h2', 'http/1.1', 'h2,http/1.1'], |
||||
|
'errMsg': 'Invalid alpn option' |
||||
|
}, |
||||
|
'verify': { |
||||
|
'optional': True, |
||||
|
'default': True, |
||||
|
'type': bool, |
||||
|
'format': toBool, |
||||
|
'errMsg': 'Invalid verify option' |
||||
|
}, |
||||
|
'flow': { |
||||
|
'optional': True, |
||||
|
'default': 'xtls-direct', |
||||
|
'type': str, |
||||
|
'format': lambda s: xtlsFlowFormat(toStrTidy(s)), |
||||
|
'filter': lambda s: s in xtlsFlows, |
||||
|
'errMsg': 'Unknown XTLS flow' |
||||
|
}, |
||||
|
'udp443': { |
||||
|
'optional': True, |
||||
|
'default': False, |
||||
|
'type': bool, |
||||
|
'format': toBool, |
||||
|
'errMsg': 'Invalid udp/443 option' |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
secureRule_1 = { # None / tlsObject / xtlsObject |
||||
|
'optional': True, |
||||
|
'default': { |
||||
|
'type': 'tls' |
||||
|
}, |
||||
|
'allowNone': True, |
||||
|
'multiSub': True, |
||||
|
'type': { |
||||
|
'tls': tlsObject, |
||||
|
'xtls': xtlsObject, |
||||
|
}, |
||||
|
'errMsg': 'Invalid secure options' |
||||
|
} |
||||
|
|
||||
|
secureRule_2 = { # None / tlsObject |
||||
|
'optional': True, |
||||
|
'default': { |
||||
|
'type': 'tls' |
||||
|
}, |
||||
|
'allowNone': True, |
||||
|
'type': tlsObject, |
||||
|
'errMsg': 'Invalid secure options' |
||||
|
} |
||||
|
|
||||
|
secureRule_3 = { # tlsObject |
||||
|
'optional': True, |
||||
|
'default': { |
||||
|
'type': 'tls' |
||||
|
}, |
||||
|
'type': tlsObject, |
||||
|
'errMsg': 'Invalid secure options' |
||||
|
} |
||||
|
|
||||
|
tcpObject = rulesFilter({ |
||||
|
**copy.deepcopy(V2ray.tcpObject), |
||||
|
'secure': secureRule_1 # None / tlsObject / xtlsObject |
||||
|
}) |
||||
|
|
||||
|
kcpObject = rulesFilter({ |
||||
|
**copy.deepcopy(V2ray.kcpObject), |
||||
|
'secure': secureRule_1 # None / tlsObject / xtlsObject |
||||
|
}) |
||||
|
|
||||
|
wsObject = rulesFilter({ |
||||
|
**copy.deepcopy(V2ray.wsObject), |
||||
|
'secure': secureRule_2 # None / tlsObject |
||||
|
}) |
||||
|
|
||||
|
h2Object = rulesFilter({ |
||||
|
**copy.deepcopy(V2ray.h2Object), |
||||
|
'secure': secureRule_3 # tlsObject |
||||
|
}) |
||||
|
|
||||
|
quicObject = rulesFilter({ |
||||
|
**copy.deepcopy(V2ray.quicObject), |
||||
|
'secure': secureRule_3 # tlsObject |
||||
|
}) |
||||
|
|
||||
|
grpcObject = rulesFilter({ |
||||
|
**copy.deepcopy(V2ray.grpcObject), |
||||
|
'secure': secureRule_2 # None / tlsObject |
||||
|
}) |
Loading…
Reference in new issue