mirror of https://github.com/dnomd343/ProxyC
Dnomd343
3 years ago
4 changed files with 326 additions and 31 deletions
@ -0,0 +1,140 @@ |
|||||
|
#!/usr/bin/python |
||||
|
# -*- coding:utf-8 -*- |
||||
|
|
||||
|
from ProxyFilter import baseFunc |
||||
|
from ProxyFilter import Plugin |
||||
|
|
||||
|
trojanGoFilterRules = { |
||||
|
'rootObject': { |
||||
|
'remark': { |
||||
|
'optional': False, |
||||
|
'default': '', |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStr |
||||
|
}, |
||||
|
'server': { |
||||
|
'optional': True, |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStrTidy, |
||||
|
'filter': baseFunc.isHost, |
||||
|
'errMsg': 'Illegal server address' |
||||
|
}, |
||||
|
'port': { |
||||
|
'optional': True, |
||||
|
'type': int, |
||||
|
'format': baseFunc.toInt, |
||||
|
'filter': baseFunc.isPort, |
||||
|
'errMsg': 'Illegal port number' |
||||
|
}, |
||||
|
'passwd': { |
||||
|
'optional': True, |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStr |
||||
|
}, |
||||
|
'sni': { |
||||
|
'optional': False, |
||||
|
'default': '', |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStr |
||||
|
}, |
||||
|
'alpn': { |
||||
|
'optional': False, |
||||
|
'default': None, |
||||
|
'allowNone': True, |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStrTidy, |
||||
|
'filter': lambda alpn: alpn in ['h2', 'http/1.1', 'h2,http/1.1'], |
||||
|
'errMsg': 'Illegal alpn option' |
||||
|
}, |
||||
|
'verify': { |
||||
|
'optional': False, |
||||
|
'default': True, |
||||
|
'type': bool, |
||||
|
'format': baseFunc.toBool |
||||
|
}, |
||||
|
'ws': { |
||||
|
'optional': False, |
||||
|
'default': None, |
||||
|
'allowNone': True, |
||||
|
'type': 'wsObject' |
||||
|
}, |
||||
|
'ss': { |
||||
|
'optional': False, |
||||
|
'default': None, |
||||
|
'allowNone': True, |
||||
|
'type': 'ssObject' |
||||
|
}, |
||||
|
'plugin': { |
||||
|
'optional': False, |
||||
|
'default': None, |
||||
|
'allowNone': True, |
||||
|
'type': 'pluginObject' |
||||
|
} |
||||
|
}, |
||||
|
'ssObject': { |
||||
|
'method': { |
||||
|
'optional': False, |
||||
|
'default': 'AES-128-GCM', |
||||
|
'type': str, |
||||
|
'format': lambda s: baseFunc.toStrTidy(s).replace('_', '-').upper(), |
||||
|
'filter': lambda method: method in ['AES-128-GCM', 'AES-256-GCM', 'CHACHA20-IETF-POLY1305'], |
||||
|
'errMsg': 'Unknown Shadowsocks method' |
||||
|
}, |
||||
|
'passwd': { |
||||
|
'optional': True, |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStr |
||||
|
}, |
||||
|
}, |
||||
|
'wsObject': { |
||||
|
'host': { |
||||
|
'optional': False, |
||||
|
'default': '', |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStr |
||||
|
}, |
||||
|
'path': { |
||||
|
'optional': False, |
||||
|
'default': '/', |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStr |
||||
|
} |
||||
|
}, |
||||
|
'pluginObject': { |
||||
|
'type': { |
||||
|
'optional': True, |
||||
|
'type': str, |
||||
|
'format': lambda pluginType: Plugin.pluginFormat(baseFunc.toStrTidy(pluginType)), |
||||
|
'filter': Plugin.isPlugin, |
||||
|
'errMsg': 'Unknown SIP003 plugin' |
||||
|
}, |
||||
|
'param': { |
||||
|
'optional': False, |
||||
|
'default': '', |
||||
|
'type': str, |
||||
|
'format': baseFunc.toStr |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
def trojanGoFilter(rawInfo: dict, isExtra: bool) -> tuple[bool, str or dict]: |
||||
|
""" |
||||
|
Trojan-Go节点合法性检查 |
||||
|
|
||||
|
不合法: |
||||
|
return False, {reason} |
||||
|
|
||||
|
合法: |
||||
|
return True, { |
||||
|
'type': 'trojan-go', |
||||
|
... |
||||
|
} |
||||
|
""" |
||||
|
try: |
||||
|
if not isExtra: # 去除非必要参数 |
||||
|
trojanGoFilterRules['rootObject'].pop('remark') |
||||
|
return baseFunc.ruleFilter(rawInfo, trojanGoFilterRules, { |
||||
|
'type': 'trojan-go' |
||||
|
}) |
||||
|
except: |
||||
|
return False, 'Unknown error' |
@ -0,0 +1,161 @@ |
|||||
|
## Trojan-Go |
||||
|
|
||||
|
> **remark** |
||||
|
> |
||||
|
> + 类型:*str* |
||||
|
> + 说明:节点备注名称 |
||||
|
> + 缺省:'' |
||||
|
> + 可选值:不限 |
||||
|
|
||||
|
``` |
||||
|
{ |
||||
|
'type': 'trojan-go', |
||||
|
'server': ..., |
||||
|
'port': ..., |
||||
|
'passwd': ..., |
||||
|
'sni': ..., |
||||
|
'alpn': ..., |
||||
|
'verify': ..., |
||||
|
'ws': ..., |
||||
|
'ss': ..., |
||||
|
'plugin': ... |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
**server** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:服务器地址 |
||||
|
+ 缺省:必选 |
||||
|
+ 可选值:合法的IP地址或域名 |
||||
|
|
||||
|
**port** |
||||
|
|
||||
|
+ 类型:*int* |
||||
|
+ 说明:服务器端口 |
||||
|
+ 缺省:必选 |
||||
|
+ 可选值:1 ~ 65535 |
||||
|
|
||||
|
**passwd** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:Trojan连接密码 |
||||
|
+ 缺省:必选 |
||||
|
+ 可选值:不限 |
||||
|
|
||||
|
**sni** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:TLS握手SNI字段 |
||||
|
+ 缺省: '' |
||||
|
+ 可选值:不限 |
||||
|
+ 建议值:合法域名 |
||||
|
|
||||
|
**alpn** |
||||
|
|
||||
|
+ 类型:*None* / *str* |
||||
|
+ 说明:TLS握手协商协议 |
||||
|
+ 缺省:None |
||||
|
+ 可选值:`h2`,`http/1.1`,`h2,http/1.1` |
||||
|
+ 建议值:'h2,http/1.1' |
||||
|
|
||||
|
**verify** |
||||
|
|
||||
|
+ 类型:*bool* |
||||
|
+ 说明:是否验证服务端证书 |
||||
|
+ 缺省:True |
||||
|
+ 可选值:不限 |
||||
|
+ 建议值:True |
||||
|
|
||||
|
**ws** |
||||
|
|
||||
|
+ 类型:*None* / *wsObject* |
||||
|
+ 说明:WebSocket连接配置 |
||||
|
+ 缺省:None |
||||
|
+ 可选值:不限 |
||||
|
|
||||
|
**ss** |
||||
|
|
||||
|
+ 类型:*None* / *ssObject* |
||||
|
+ 说明:Shadowsocks加密配置 |
||||
|
+ 缺省:None |
||||
|
+ 可选值:不限 |
||||
|
|
||||
|
**plugin** |
||||
|
|
||||
|
+ 类型:*None* / *pluginObject* |
||||
|
+ 说明:SIP003插件 |
||||
|
+ 缺省:None |
||||
|
+ 可选值:不限 |
||||
|
|
||||
|
### wsObject |
||||
|
|
||||
|
``` |
||||
|
{ |
||||
|
'host': ..., |
||||
|
'path': ... |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
**host** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:Websocket连接域名 |
||||
|
+ 缺省:'' |
||||
|
+ 可选值:不限 |
||||
|
+ 建议值:合法域名 |
||||
|
|
||||
|
**path** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:Websocket连接路径 |
||||
|
+ 缺省:'/' |
||||
|
+ 可选值:不限 |
||||
|
+ 建议值:以`/`开头的合法路径 |
||||
|
|
||||
|
### ssObject |
||||
|
|
||||
|
``` |
||||
|
{ |
||||
|
'method': ..., |
||||
|
'passwd': ... |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
**method** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:Shadowsocks流加密方式 |
||||
|
+ 缺省:'AES-128-GCM' |
||||
|
+ 可选值:`AES-128-GCM`,`AES-256-GCM`,`CHACHA20-IETF-POLY1305` |
||||
|
+ 建议值:x86平台使用AES方式,ARM平台使用CHACHA20方式 |
||||
|
|
||||
|
**passwd** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:Shadowsocks密码 |
||||
|
+ 缺省:'' |
||||
|
+ 可选值:不限 |
||||
|
|
||||
|
### pluginObject |
||||
|
|
||||
|
``` |
||||
|
{ |
||||
|
'type': ..., |
||||
|
'param': ... |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
**type** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明: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` |
||||
|
|
||||
|
**param** |
||||
|
|
||||
|
+ 类型:*str* |
||||
|
+ 说明:SIP003插件参数 |
||||
|
+ 缺省:'' |
||||
|
+ 可选值:不限 |
Loading…
Reference in new issue