Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

是不是能统一一下配置文件中的 null,none,None 和 “” #990

Closed
Justsoos opened this issue Mar 27, 2018 · 13 comments
Closed

Comments

@Justsoos
Copy link

Justsoos commented Mar 27, 2018

最近在写个小脚本,处理 config.json 和 guiNConfig.json ,后者是 v2rayN 使用的。
发现 v2rayN 大量使用"none"这种不规范的 json 取值,变换导入v2ray 的 config.json 后,大部分变成规范的 null
但今天发现 v2ray 的配置文件里:['outbound']['streamSettings']['kcpSettings']['header']['type'] 这个值也是可以取 “none”,而不是 null 或者 “”

json 标准对“none”值是按照 string 处理的,正规的 json 应该用 null, python 内 json.loads 后对应为 None,这样才有通用性。
不知道还有那个值也是这样取的?

建议从 v2ray 的 config.json 开始,能把这几个 “none”,none,”None“,“”,‘’,”null“ 的值全部规范为 null
@2dust

@DarienRaymond
Copy link
Contributor

null是JSON规范,和V2Ray的配置无关,所有null的项你不写也都是可以的,一般这种情况都是使用生成器生成出来的附加内容。

V2Ray的官方文档中没有使用过任何除了"none"之外的类似定义。

@Justsoos
Copy link
Author

Justsoos commented Mar 28, 2018

@DarienRaymond
虽然理论上如此,v2rayN 也不是 v2ray 的开发,算是个“生成器”,但实测,比如目前找到的这个,在config.json 里将
['outbound']['streamSettings']['kcpSettings']['header']['type'] 设置为“”或者 null 都会出错

V2Ray v3.14 (die Commanderin) 20180316
An unified platform for anti-censorship.
failed to parse json config: Ext|Tools|Conf|Serial: failed to parse json config > Ext|Tools|Conf: Failed to build mKCP config. > Ext|Tools|Conf: invalid mKCP header config. > Ext|Tools|Conf: unknown config id:
Main: failed to read config file: C:\PATH\config.json > Main|Json: failed to execute v2ctl to convert config file. > exit status 4294967295

设置成 none 当然,也会出错。

V2Ray v3.14 (die Commanderin) 20180316
An unified platform for anti-censorship.
failed to parse json config: Ext|Tools|Conf|Serial: failed to read config file > invalid character 'o' in literal null (expecting 'u')
Main: failed to read config file: C:\PATH\config.json > Main|Json: failed to execute v2ctl to convert config file. > exit status 4294967295

目前偶然遇到出错才发现的这个 “none” 写法,确定是 v2ray-core 内置的,而不是 “生成器” 的逻辑。

由于 v2ray 设计,并不是一个类似 ssr,全部配置信息在 config.json 里都可以找到树结构的,所以,二次开发可能坑很多。来确认一下,这个树结构的标准。
至于 v2rayN ,还是希望 @2dust 能把 “none” 这样奇怪的写法,全都改成 null

@DarienRaymond
Copy link
Contributor

这两个语义完全不同,不明白你为什么一定要强求 null

@Justsoos
Copy link
Author

你真去作程序就懂了,加冒号的 “none”,简直就是对程序员的一种嘲笑。
就算最低级情况下,要过滤出文本里不规范的,容易和关键字模糊的,“none” 也是个语义和形态,都非常可憎的写法。和 None,“none”,‘none’ 在多个编程语言里都有误会的机会。

实在不行,“” 也可以考虑,也比 “none” 要好,但我测了,“” 用在这个键值上,v2ray.exe报错,看楼上

@Justsoos
Copy link
Author

Justsoos commented Mar 29, 2018

另外,我也是刚接触 v2ray 不知道遇到这个坑之后,还有那些坑,你们要知道,和我说下。
如果我觉得可以,就提建议,大家商量。至少 v2rayN 里面到处用 “none” 是实在太可怕了。

@Justsoos
Copy link
Author

Justsoos commented Mar 29, 2018

这是比较严重的现实问题:

在 v2rayN 的 guiNConfig.json 里,关于三种协议,混用到了令人糊涂的地步:

"network": "tcp",
"headerType": "none",

而这个 “none” 代表的是 "outbound" -> "tcpSettings": null,
整个这数据树的一大支都没了
同时,如此混用:

"network": "ws",
"headerType": "none",

同一个 json 键值,代表的却是 "outbound" -> "wsSettings" -> "headers": null

而第三个,就是上面提到的,v2ray 始作俑的 “none”:

"network": "kcp",
"headerType": "none",

['outbound']['streamSettings']['kcpSettings']['header']['type'] -> “none”

我觉得, @2dust 在 v2rayN 混用 “none” 的不同语义根源就是来自这里,并不能仅仅说他用了账号生成器的问题。
即便那个账号生成器,何来 “none” 这样奇特的写法??

@Justsoos
Copy link
Author

制作 v2ray 的配置文件解析器过程里,感觉,账号生成器为了 “凑合” 位置,把不同协议,不同功能键值,都写到一个 json 键值上,把不同语义 null,None,“”,“string” 混用,导致了这些错乱,根源,其实还在 v2ray-core。

@Justsoos
Copy link
Author

ss, ssr 的配置文件是扁平的,uri 也简单粗放,所有数据都可以列在一个二层树上列出来,v2ray 则完全不同,即便 v2rayN 用一个二层树文件,凑合表达,造成不同语义复用键值,而且没有一个通用标准配置文件可用。

@Justsoos
Copy link
Author

https://github.com/Justsoos/ss-ssr-v2ray-gadget/blob/cf35d7aaa695112e299ac2366a9d76491a1d56e4/check_v2ray.py#L143
这是我写 v2rayN -> v2ray 配置解析器遇到的问题,看看代码,好丑陋。没辙 ……
ws,tcp,kcp 三个协议互相排斥,导致分叉树都要自己搞一个模板… 再往上改某个值
也许你有更好的办法,教我。

@xiaokangwang
Copy link
Contributor

如果你要设计客户端的话建议使用Pb格式的配置文件,其有更好的文件层级结构,

@Justsoos
Copy link
Author

啥格式都不怕,但,不能脱离现实啊 -- 大量的消费者如果要用 v2rayN 和 v2ray-core 的 “none” ,我除非说服他们的开发者改掉,就算自己造一个客户端,也免不了被这些丑陋的数据吞噬。哈哈 @xiaokangwang 目前面临的就是这个问题吧。

@xiaokangwang
Copy link
Contributor

@Justsoos 我的话并没有什么使用json格式的地方,我的Android客户端是没有编辑配置文件功能的。。。。。

@xiaokangwang
Copy link
Contributor

xiaokangwang commented Mar 29, 2018

至于网页版本的配制文件编辑器是将配置以json文件来理解的,并没有集成V2的特性

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants