Tencent / nohost

基于 Whistle 实现的多账号多环境远程配置及抓包调试平台
https://nohost.pro
Other
1.4k stars 160 forks source link

nohost对接本地的whistle后,当去除接入规则后,whistle的自有规则受到影响 #196

Open lfire opened 1 year ago

lfire commented 1 year ago

nohost的接入方式是参考:https://nohost.pro/docs/developer/usage @http://{nohost ip|domain}:8080/whistle.nohost/cgi-bin/plugin-rules

在我的示例中,目前猜测是受如下规则的影响: */.whistle-path.5b6af7b9884e1165/ ignore://-proxy|-host reqHeaders://whistleInternalHost=local.whistlejs.com enable://proxyTunnel

其在nohost端的作用,本身是为了注入小原点设计的。 但当我把本地的接入规则注释后,即 # @http://{nohost ip|domain}:8080/whistle.nohost/cgi-bin/plugin-rules

再额外配置一条规则时,如下图: image

第7行的规则, /.*\/whistle\.nohost\/cgi-bin\/list(.*)/i https://proxy.xxx.xxx.com:444/whistle/plugin.nohost/cgi-bin/list$1 resCors://* 其目的是希望自己实现一个小圆点的注入,这样就能支持localhost或是其他任意域名下的小圆点注入,访问链接如:

http://localhost:15000/.whistle-path.5b6af7b9884e1165/whistle.nohost/cgi-bin/list?_=1682495486094

而当我访问上续链接时,会发现一直不能代理成功,返回 404,而当我稍微修改一下链接中的5b6af7b9884e1165,修改为:5b6af709884e1165,发现则可以正常访问,并代理成功,如下图:

image

目前我尝试过全系统查找带有5b6af7b9884e1165字符的文件,我猜测是否是规则缓存导致,但我没能找到,现在不知道具体的原因,只是高度怀疑是上面提到的那个注入规则影响了whistle的代理能力。

求大佬解答

avwo commented 1 year ago

根目录为 /.whistle-path.5b6af7b9884e1165/ 的 url 为 whistle 的内部请求,只能匹配 proxy 等一些特殊规则

lfire commented 1 year ago

@avwo 我所做的操作主要是第5行的规则注释了,也就代表,不再使用nohost的规则注入。 另外,我配置了一个第7行这样的规则,我理解是,这时候已经与nohost没有任何关系了。 我需要达成的目标是,这样的一个规则:/.*\/whistle\.nohost\/cgi-bin\/list(.*)/i,我在whistle中,能进行不同的指向配置,这里不一定就是指到我上面第7行的位置,可以是任意的一个想去的位置,如:https://www.qq.com 那第7行的规则就可以是:/.*\/whistle\.nohost\/cgi-bin\/list(.*)/i https://www.qq.com

这时候当我访问一个符合规则的链接时(在开启代理的情况下),如:http://localhost:15000/.whistle-path.5b6af709884e1165/whistle.nohost/cgi-bin/list?_=1682495486094 可以看到如下结果: image

但问题在于,当我访问的链接是:http://localhost:15000/.whistle-path.5b6af7b9884e1165/whistle.nohost/cgi-bin/list?_=1682495486094 ,其中只是将af70=>af7b,替换了一个字母而已,得到的结果确是代理失败,如下:

image

这两个链接的对应的代理规则没有任何区别,怀疑的点只在于,5b6af7b9884e1165这个特殊的字符串,曾出现在nohost的注入规则中,(现在这个注入规则,第5行是注释掉的),这也是为什么我说,whistle的自有规则受到了nohost曾经的注入规则影响。 image

在我的理解中,第5行注释后,nohost的规则应该是不会再注入,也不会影响到whistle的正常使用。

avwo commented 1 year ago

简单说下你要实现什么功能?

lfire commented 1 year ago

两个端: nohost服务端 & whistle本地端,两个所在的网络不在一个局域网。 通过whistle配置,希望可以在以localhost的方式注入小圆点,这样可以实现环境切换。但因为nohost的入口规则并不支持这样的配置,因此希望可以通过whistle的本地化配置来实现nohost的自动规则注入能力。

问题是,我手工在whistle中配置这些规则时,发现nohost的注入规则,在注释移除后,好像还在生效,导致自己手动配置的whistle规则不生效。

avwo commented 1 year ago

试试 * internal-proxy://host:port excludeFilter://*/.whistle-path.5b6af7b9884e1165/

lfire commented 1 year ago

试试 * internal-proxy://host:port excludeFilter://*/.whistle-path.5b6af7b9884e1165/

加上了这个配置,但依然是失败的