hq450 / fancyss

fancyss is a project providing tools to across the GFW on asuswrt/merlin based router.
GNU General Public License v3.0
12.23k stars 3.17k forks source link

请停止使用google首页测试连通性 #754

Closed arimitx closed 4 years ago

arimitx commented 4 years ago

频繁访问google首页会被认为行为异常,触发流量异常检测乃至ip被google block。建议修改为generate_204页测试延迟。

wujin941005 commented 4 years ago

+1 请不要使用 google.com 作为测试目标,有可能导致 proxy 服务器 ip 被加入黑名单,导致各种操作需要输入验证码 目标 URL 对所有的 policy 是基本公平的,所以请选择像 gstatic.com 这样的在全球都有节点的 URL 作为测试目标 作者建议:http://www.gstatic.com/generate_204

babylife commented 4 years ago

链接支持httping命令吗?

babylife commented 4 years ago

如果是380的版本,可以修改/ss/cru/foreign.sh 384的 fancyss_arm384 /shadowsocks/scripts/ss_status.sh

直接修改即可 ,http://www.gstatic.com/generate_204 由于可以直接访问,需要强制代理,黑名单加入gstatic.com或者命令指定代理?

!/bin/sh

source /koolshare/scripts/base.sh LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")

ret=/koolshare/bin/httping www.google.com.tw -s -Z -c1 -f -t 3 2>/dev/null|sed -n '2p'|sed 's/seq=0//g'|sed 's/([0-9]+\sbytes),\s//g' S1=echo $ret|grep -Eo "200 OK" if [ -n "$S1" ]; then S2=echo $ret|sed 's/time=//g'|awk '{printf "%.0f ms\n",$(NF -3)}' log='国外链接 【'$LOGTIME'】 ✓ '$S2'' else log='国外链接 【'$LOGTIME'】 X' fi

nvram set ss_foreign_state="$log"

babylife commented 4 years ago

我测试了下 ,貌似有些这个网站有些问题,不大稳定,一开始是好的

admin@K3:/jffs/.koolshare/bin# httping http://www.gstatic.com/generate_204 -s PING www.gstatic.com:80 (/generate_204): connect time out connect time out connect time out connect time out

wujin941005 commented 4 years ago

我是这么改的,把地址、response code、awk这些改了,但是我发现了一个问题,似乎gstatic目前在国内解析,即使我把这个链接丢到强制黑名单走代理,返回的延时还是国内延时,国外链接这个功能就break了

get_foreign_status(){ local ret=httping www.gstatic.com/generate_204 -s -Z -c1 -f -t 3 2>/dev/null|sed -n '2p'|sed 's/seq=0//g'|sed 's/([0-9]\+\sbytes),\s//g' [ "$ss_failover_enable" == "1" ] && echo $LOGTIME1 $ret "[dbus get ssconf_basic_name_$CURRENT]" $1 >> $LOGFILE_F local S1=echo $ret|grep -Eo "204 No Content" if [ -n "$S1" ]; then local S2=echo $ret|sed 's/time=//g'|awk '{printf "%.0f ms\n",$(NF -4)}' log1='国外链接 【'$LOGTIME'】 ✓  '$S2'' else log1='国外链接 【'$LOGTIME'】 X' fi }

PIDC="ps|grep httping|grep baidu|grep -v grep" PIDF="ps|grep httping|grep gstatic|grep -v grep"

babylife commented 4 years ago

我是这么改的,把地址、response code、awk这些改了,但是我发现了一个问题,似乎gstatic目前在国内解析,即使我把这个链接丢到强制黑名单走代理,返回的延时还是国内延时,国外链接这个功能就break了

get_foreign_status(){ local ret=httping www.gstatic.com/generate_204 -s -Z -c1 -f -t 3 2>/dev/null|sed -n '2p'|sed 's/seq=0//g'|sed 's/([0-9]\+\sbytes),\s//g' [ "$ss_failover_enable" == "1" ] && echo $LOGTIME1 $ret "[dbus get ssconf_basic_name_$CURRENT]" $1 >> $LOGFILE_F local S1=echo $ret|grep -Eo "204 No Content" if [ -n "$S1" ]; then local S2=echo $ret|sed 's/time=//g'|awk '{printf "%.0f ms\n",$(NF -4)}' log1='国外链接 【'$LOGTIME'】 ✓  '$S2'' else log1='国外链接 【'$LOGTIME'】 X' fi }

PIDC="ps|grep httping|grep baidu|grep -v grep" PIDF="ps|grep httping|grep gstatic|grep -v grep"

要么再写个host记录?不过这样的话,实在折腾哈哈

wujin941005 commented 4 years ago

我是这么改的,把地址、response code、awk这些改了,但是我发现了一个问题,似乎gstatic目前在国内解析,即使我把这个链接丢到强制黑名单走代理,返回的延时还是国内延时,国外链接这个功能就break了 get_foreign_status(){ local ret=httping www.gstatic.com/generate_204 -s -Z -c1 -f -t 3 2>/dev/null|sed -n '2p'|sed 's/seq=0//g'|sed 's/([0-9]\+\sbytes),\s//g' [ "$ss_failover_enable" == "1" ] && echo $LOGTIME1 $ret "[dbus get ssconf_basic_name_$CURRENT]" $1 >> $LOGFILE_F local S1=echo $ret|grep -Eo "204 No Content" if [ -n "$S1" ]; then local S2=echo $ret|sed 's/time=//g'|awk '{printf "%.0f ms\n",$(NF -4)}' log1='国外链接 【'$LOGTIME'】 ✓  '$S2'' else log1='国外链接 【'$LOGTIME'】 X' fi } PIDC="ps|grep httping|grep baidu|grep -v grep" PIDF="ps|grep httping|grep gstatic|grep -v grep"

要么再写个host记录?不过这样的话,实在折腾哈哈

不知道问题出在哪里,电脑上的Clash规则也是用的gstatic,显示的延时就正确

wujin941005 commented 4 years ago

image 重新把插件启动了一下,延时似乎对了

arimitx commented 4 years ago

@wujin941005 @babylife 怎么说呢,会去改这些地方的人就能避开这个错误了。但是作者默认设置的google主页大多数人不会改,然后用的是机场共用线路,就会影响到其他用户。要解决这个问题,还是得等作者发新版本改掉这个问题。gstatic国内镜像问题我不太清楚,但是clash,surge等工具默认使用该地址,我觉得有一定的参考意义。

wujin941005 commented 4 years ago

@wujin941005 @babylife 怎么说呢,会去改这些地方的人就能避开这个错误了。但是作者默认设置的google主页大多数人不会改,然后用的是机场共用线路,就会影响到其他用户。要解决这个问题,还是得等作者发新版本改掉这个问题。gstatic国内镜像问题我不太清楚,但是clash,surge等工具默认使用该地址,我觉得有一定的参考意义。

gstatic默认是用的国内解析,在Clash和Surge上的很多规则都是给gstatic加了proxy的规则,所以可以正确走代理测延时。实测上图中黑白名单加了gstatic的地址似乎还是没成功生效,我测了美国BGP的线路显示完全不正确,就大概30ms的延时

arimitx commented 4 years ago

@wujin941005 @babylife 怎么说呢,会去改这些地方的人就能避开这个错误了。但是作者默认设置的google主页大多数人不会改,然后用的是机场共用线路,就会影响到其他用户。要解决这个问题,还是得等作者发新版本改掉这个问题。gstatic国内镜像问题我不太清楚,但是clash,surge等工具默认使用该地址,我觉得有一定的参考意义。

gstatic默认是用的国内解析,在Clash和Surge上的很多规则都是给gstatic加了proxy的规则,所以可以正确走代理测延时。实测上图中黑白名单加了gstatic的地址似乎还是没成功生效,我测了美国BGP的线路显示完全不正确,就大概30ms的延时

那就只能等作者修改程序了,不过我觉得这个延迟的参考性不大,毕竟没几个人盯着路由页面看延迟,连通性可以自己开google测一下嘛。

babylife commented 4 years ago

话说其实我们还需要确认这个站点是被墙的而且延迟有参考意义。回头想一想哪个站点有意义。其实设置成当前机场地址最有意义

arimitx commented 4 years ago

话说其实我们还需要确认这个站点是被墙的而且延迟有参考意义。回头想一想哪个站点有意义。其实设置成当前机场地址最有意义

开放自定义URL功能就可以了。

modefang commented 4 years ago

@wujin941005 能把最终的代码发出来吗?我这边老是被加入黑名单,明明电脑上用ssr客户端能放问的,路由器死活不行。

mistak1992 commented 4 years ago

确实有可能是这个问题导致间歇性"国外红叉, 国内正常"的情况出现, 我是AC86U, 修改了/jffs/.koolshare/ss/ssconfig.sh 文件, 把www.google.com.tw换成www.gstatic.com/generate_204, 再在host添加gstatic.com后, 重启路由, 就正常了, 目前还没有出现过红叉. 我怀疑是红叉的时候, 插件就不走代理了. 所以出现间歇性"国外红叉, 国内正常"的情况, 同时电脑上用v2ray客户端是可以正常走代理的

babylife commented 4 years ago

确实有可能是这个问题导致间歇性"国外红叉, 国内正常"的情况出现, 我是AC86U, 修改了/jffs/.koolshare/ss/ssconfig.sh 文件, 把www.google.com.tw换成www.gstatic.com/generate_204, 再在host添加gstatic.com后, 重启路由, 就正常了, 目前还没有出现过红叉. 我怀疑是红叉的时候, 插件就不走代理了. 所以出现间歇性"国外红叉, 国内正常"的情况, 同时电脑上用v2ray客户端是可以正常走代理的

小哥可以给一个ip吗,就是被抢的

babylife commented 4 years ago

确实有可能是这个问题导致间歇性"国外红叉, 国内正常"的情况出现, 我是AC86U, 修改了/jffs/.koolshare/ss/ssconfig.sh 文件, 把www.google.com.tw换成www.gstatic.com/generate_204, 再在host添加gstatic.com后, 重启路由, 就正常了, 目前还没有出现过红叉. 我怀疑是红叉的时候, 插件就不走代理了. 所以出现间歇性"国外红叉, 国内正常"的情况, 同时电脑上用v2ray客户端是可以正常走代理的

测试了的确没走代理,我不知道host修改哪个ip合适,头疼

modefang commented 4 years ago

我是这么改的,把地址、response code、awk这些改了,但是我发现了一个问题,似乎gstatic目前在国内解析,即使我把这个链接丢到强制黑名单走代理,返回的延时还是国内延时,国外链接这个功能就break了

get_foreign_status(){ local ret=httping www.gstatic.com/generate_204 -s -Z -c1 -f -t 3 2>/dev/null|sed -n '2p'|sed 's/seq=0//g'|sed 's/([0-9]\+\sbytes),\s//g' [ "$ss_failover_enable" == "1" ] && echo $LOGTIME1 $ret "[dbus get ssconf_basic_name_$CURRENT]" $1 >> $LOGFILE_F local S1=echo $ret|grep -Eo "204 No Content" if [ -n "$S1" ]; then local S2=echo $ret|sed 's/time=//g'|awk '{printf "%.0f ms\n",$(NF -4)}' log1='国外链接 【'$LOGTIME'】 ✓  '$S2'' else log1='国外链接 【'$LOGTIME'】 X' fi }

PIDC="ps|grep httping|grep baidu|grep -v grep" PIDF="ps|grep httping|grep gstatic|grep -v grep"

@babylife 我把上面的代码改好后,在路由器插件的黑名单里配置gstatic.com域名就好了

@mistak1992 可以发一下你改的hosts吗?

babylife commented 4 years ago

我是这么改的,把地址、response code、awk这些改了,但是我发现了一个问题,似乎gstatic目前在国内解析,即使我把这个链接丢到强制黑名单走代理,返回的延时还是国内延时,国外链接这个功能就break了 get_foreign_status(){ local ret=httping www.gstatic.com/generate_204 -s -Z -c1 -f -t 3 2>/dev/null|sed -n '2p'|sed 's/seq=0//g'|sed 's/([0-9]\+\sbytes),\s//g' [ "$ss_failover_enable" == "1" ] && echo $LOGTIME1 $ret "[dbus get ssconf_basic_name_$CURRENT]" $1 >> $LOGFILE_F local S1=echo $ret|grep -Eo "204 No Content" if [ -n "$S1" ]; then local S2=echo $ret|sed 's/time=//g'|awk '{printf "%.0f ms\n",$(NF -4)}' log1='国外链接 【'$LOGTIME'】 ✓  '$S2'' else log1='国外链接 【'$LOGTIME'】 X' fi } PIDC="ps|grep httping|grep baidu|grep -v grep" PIDF="ps|grep httping|grep gstatic|grep -v grep"

@babylife 我把上面的代码改好后,在路由器插件的黑名单里配置gstatic.com域名就好了

@mistak1992 可以发一下你改的hosts吗?

谢谢,方便各位看,我的是arm380的版本

!/bin/sh

source /koolshare/scripts/base.sh LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")

ret=/koolshare/bin/httping www.gstatic.com/generate_204 -s -Z -c1 -f -t 3 2>/dev/null|sed -n '2p'|sed 's/seq=0//g'|sed 's/([0-9]\+\sbytes),\s//g' S1=echo $ret|grep -Eo "204 No Content" if [ -n "$S1" ]; then S2=echo $ret|sed 's/time=//g'|awk '{printf "%.0f ms\n",$(NF -4)}' log='国外链接 【'$LOGTIME'】 ✓  '$S2'' else log='国外链接 【'$LOGTIME'】 X' fi

nvram set ss_foreign_state="$log"

babylife commented 4 years ago

代码没问题,但是我测试下来DNS解析的还是国内的 ASUSWRT-Merlin RT-AC3100 380.70-0-X7.9.1 Tue Sep 25 14:08:09 UTC 2018 admin@K3:/tmp/home/root# httping www.gstatic.com/generate_204 -s PING www.gstatic.com:80 (/generate_204): connected to 203.208.50.55:80 (87 bytes), seq=0 time= 54.52 ms 204 No Content connected to 203.208.50.63:80 (87 bytes), seq=1 time= 55.70 ms 204 No Content connected to 203.208.50.47:80 (87 bytes), seq=2 time= 51.93 ms 204 No Content connected to 203.208.50.55:80 (87 bytes), seq=3 time= 60.36 ms 204 No Content connected to 203.208.50.56:80 (87 bytes), seq=4 time= 48.05 ms 204 No Content connected to 203.208.50.63:80 (87 bytes), seq=5 time= 54.28 ms 204 No Content connected to 203.208.50.55:80 (87 bytes), seq=6 time= 48.14 ms 204 No Content

hq450 commented 4 years ago

15年就用这个地址做检测了,目前没有任何证据发现因为频繁访问而被检测异常的。

  1. 要保证这个地址是被墙的,并且是DNS污染+IP阻断。如果只有DNS污染没有IP阻断,因为插件开启后,DNS是干净的,这时候即使走本地网络也能正确检测到联通正常。如果这个地址只有IP阻断没有DNS污染,如果用户在访问google hk的时候发生了污染无法访问,但是这个时候检测结果却是没问题的,即检测结果无法代表真实情况。
  2. 因为路由本身要能访问这个地址,还要要保证访问控制不失效,只能用使用率较低的Google tw来做验证。
  3. 虽然关注延迟不太重要,但是也比如用google.bz等南美国家的域名来做检测的话,延迟也太难看了,tw就OK了。
  4. 被检测的这个服务器,还要足够的稳定,那么基本上就是一些知名的互联网服务提供者,诸如谷歌,推特,FB等了
  5. 插件本身,如果没有开启故障转移,那么只会再你进入插件页面后才会进行检测(插件web告诉后台进行检测),并且为了避免可能存在的特征,检测的时间间隔是不固定的,检测时间区间也是可以用户手动调整的
  6. 如果开启了故障转移,是会24小时不停检测的,但是和第3点一样,并且为了避免可能存在的特征,检测的时间间隔是不固定的,检测时间区间也是可以用户手动调整的.

所以综合来看,其实能选的不多,再gfwlist里找一遍,去掉一些不知名的,色情的等等,要符合上面条件的,google.tw确实是一个很好的选择。

arimitx commented 4 years ago

@hq450 感谢作者回复,我之前使用的是380版的4.1.7和4.2.0,可能代码没有同上游更新,后面出于各种原因没有继续使用fancyss了。 我用过的380对应的4.2.0版移除了检测时间区间菜单选项,4.1.7可以自由调整或关闭。 我当时使用私人独享代理时ip被google判定有异常流量,感觉并没有别的因素会触发风控,不知道4.2.0版是否也仅在前台进行延迟测试? 另外就是个人认为,单用户进行延迟测试可能影响不大,但是在常见的多用户同ip的共享代理环境中,如果有较多人进行延迟检测仍然有几率触发google风控。当然如果新版本仅在前台进行延迟测试应该不会引起google风控。

arimitx commented 4 years ago

@hq450 感谢作者回复,我之前使用的是380版的4.1.7和4.2.0,可能代码没有同上游更新,后面出于各种原因没有继续使用fancyss了。 我用过的380对应的4.2.0版移除了检测时间区间菜单选项,4.1.7可以自由调整或关闭。 我当时使用私人独享代理时ip被google判定有异常流量,感觉并没有别的因素会触发风控,不知道4.2.0版是否也仅在前台进行延迟测试? 另外就是个人认为,单用户进行延迟测试可能影响不大,但是在常见的多用户同ip的共享代理环境中,如果有较多人进行延迟检测仍然有几率触发google风控。当然如果新版本仅在前台进行延迟测试应该不会引起google风控。

补充一点,当时应该没有开启故障转移。

hq450 commented 4 years ago

新旧版本都是在前台才会进行检测的

只是新添加的故障转移,如果开启才会一直检测,但是也有一些机制规避的。

总之,在没有更好的选择的情况下,Google.tw就没有必要变它了