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

ascii2d 因 cf jschallenge 无法请求 #283

Closed
tkosf opened this issue Jan 7, 2022 · 39 comments
Closed

ascii2d 因 cf jschallenge 无法请求 #283

tkosf opened this issue Jan 7, 2022 · 39 comments
Labels
bug Something isn't working help wanted Extra attention is needed

Comments

@tkosf
Copy link

tkosf commented Jan 7, 2022

如果不是汇报 bug 或请求新功能,请尽量不要提 issue,视情况我可能会直接关闭
图片
图片
前两天还好好的 昨晚bot突然挂了 重启之后其他功能都正常 唯独a2d不行 (机子是境外鸡)

@Tsuk1ko Tsuk1ko added the bug Something isn't working label Jan 7, 2022
@Ansbot
Copy link

Ansbot commented Jan 7, 2022

我也遇到这个问题,抓包对比了下wget和该脚本的请求分别是:
request
,响应分别是:
response
,看起来后者是触发了cf的5秒墙

@Ansbot
Copy link

Ansbot commented Jan 7, 2022

调整了下header中Host的顺序发现就不是403了。。。
repeater

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Jan 7, 2022

。。那 cf 这判定机制着实挺迷的

@DongGua-Jun
Copy link

快修鸭快修鸭

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Jan 7, 2022

刚清完原神体力,这就修……

Repository owner deleted a comment from DongGua-Jun Jan 7, 2022
@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Jan 7, 2022

调整了下header中Host的顺序发现就不是403了。。。

不行,我发现事情没那么简单

一时半会没法解决,先告别 ascii2d 吧……

可以先将 bot.useAscii2dWhenQuotaExcess bot.useAscii2dWhenLowAcc bot.useAscii2dWhenFailed 设为 false 来避免请求 ascii2d

@Tsuk1ko Tsuk1ko changed the title ascii2d功能出现为题 ascii2d 因 cf jschallenge 无法请求 Jan 7, 2022
@Tsuk1ko Tsuk1ko added the help wanted Extra attention is needed label Jan 7, 2022
@Tsuk1ko Tsuk1ko pinned this issue Jan 7, 2022
@StarzL1kerain
Copy link

调整了下header中Host的顺序发现就不是403了。。。

不行,我发现事情没那么简单

一时半会没法解决,先告别 ascii2d 吧……

可以先将 bot.useAscii2dWhenQuotaExcess bot.useAscii2dWhenLowAcc bot.useAscii2dWhenFailed 设为 false 来避免请求 ascii2d

image
今天看见推送更新,就在QQ试了一下,结果长时间没反应,重启了机子一下,然后就登不上,
然后,我重新部署了下(服务器重装系统),结果还是报错
image
问问这怎么解决?

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Jan 8, 2022

@shaohua-debug 这个问题不属于当前 issue,请不要在这里提问,可以去 discussions,另外常见问题请去看 wiki

顺便问下你的 go-cqhttp 起了吗……

@StarzL1kerain
Copy link

启了,只是我之前内网端口,能用就没管,结果今天突然挂了,刚才给试了试换成公网的就行了。。。

@Nekoer
Copy link

Nekoer commented Jan 9, 2022

我试了Header加上User-Agent就好了(
#a2465f4

你可以试试

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Jan 9, 2022

我试了Header加上User-Agent就好了( #a2465f4

你可以试试

并不行,我原本就用的 Chrome 的 UA,换了 Postman 的也不行

怀疑确实可能还和 header 顺序有关

但 js 就没看到有什么请求库可以精细到能自定义 header 顺序什么的,找个时间看看能不能魔改 axios 的 adapter

@Coder-Sakura
Copy link

我试了Header加上User-Agent就好了( #a2465f4
你可以试试

并不行,我原本就用的 Chrome 的 UA,换了 Postman 的也不行

怀疑确实可能还和 header 顺序有关

但 js 就没看到有什么请求库可以精细到能自定义 header 顺序什么的,找个时间看看能不能魔改 axios 的 adapter

这个问题我昨天也遇到,比较关注;

这是我做的一点小尝试(用的Python),希望可以帮到你
kitUIN/PicImageSearch#13 (comment)

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Jan 10, 2022

这是我做的一点小尝试(用的Python),希望可以帮到你 kitUIN/PicImageSearch#13 (comment)

嗯,js 类似的库我也试过,不过貌似都因长期不维护失效了

还有一种是靠 headless browser 模拟的,太重了,没法用

@Coder-Sakura
Copy link

python有个包,让我成功的bypass了云火,https://github.com/VeNoMouS/cloudscraper 。可以去研究看看是怎么实现的,咱也不懂网络这些东西。

今天我也是看到这个;这个包主要是对前端js做了处理,毕竟cloudflare 5秒盾就是前端js反爬

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Jan 10, 2022

悲报

首先是找不到可用的 npm 包

其次这个 py 项目我研究了下,如果是五秒盾就会拿出页面里的关键信息放到 vm 里面模拟页面并跑页面上的 js,拿到最终验证的 url,如果是 captcha 就使用第三方服务处理(当然是要钱的,得自己设置这些服务的 apikey 什么的)

我试着按里面的流程处理页面,我发现跟我遇到的 challenge 页面完全对不上,而且看起来是遇到 captcha 了,根本无解,不知道问题出在哪里

@DongGua-Jun
Copy link

不如转用老毛子的yandex吧(

@MejiroRina
Copy link
Contributor

好久没用过CF了,印象中被CF风控的原因挺多的,比如说IP地址在他们的风险库里有较高的风险指数,这样也是有可能被403的
不过如果是同样的IP,在浏览器能访问,但是Bot不能访问的话就不知道是什么情况了
总不可能为了个搜图还弄一份HTTP代理表和UA表吧(

@DongGua-Jun
Copy link

echo ”修好了吗“

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 10, 2022

修不好,来世再修(

@NagaseYami
Copy link

NagaseYami commented Feb 18, 2022

我自己写的Telegram的Bot也遇到这个问题,当时我参考此issue里提到的VeNoMouS/cloudscraper然后发现即使是cloudscraper也不是百分百成功。
而且我的机器人是用golang而不是python写的,如果用cloudscraper就只能让两者通过HTTP通信,这很麻烦,而且golang也没有类似的库可以用,所以我把目光转向了Headless Browser。最终用go-rod/rod解决了5秒盾的问题。
看到你有提到Headless Browser太重的问题。我自己也只是给群友用用没太大负载,不过比我想象中消耗的内存要少,如果你还是没能找到合适的解决方案也许可以考虑一下。

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 18, 2022

我自己写的Telegram的Bot也遇到这个问题,当时我参考此issue里提到的VeNoMouS/cloudscraper然后发现即使是cloudscraper也不是百分百成功。 而且我的机器人是用golang而不是python写的,如果用cloudscraper就只能让两者通过HTTP通信,这很麻烦,而且golang也没有类似的库可以用,所以我把目光转向了Headless Browser。最终用go-rod/rod解决了5秒盾的问题。 看到你有提到Headless Browser太重的问题。我自己也只是给群友用用没太大负载,不过比我想象中消耗的内存要少,如果你还是没能找到合适的解决方案也许可以考虑一下。

嗯,我打算做成可选模式

@DiheChen
Copy link

似乎和tls版本有关系。
nodejs v16.13.0

const { default: axios } = require("axios");
const tls = require("tls");

tls.DEFAULT_MAX_VERSION = "TLSv1.1";
tls.DEFAULT_MIN_VERSION = "TLSv1.1";

axios.get("https://ascii2d.net", {
    headers: {
        "User-Agent": "PostmanRuntime/7.29.0",
    }
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error)
});

成功访问。

补充: 我服务器 node 版本是 v12.22.7, 需要把 tls 版本锁在 1.2 才能成功访问。如果锁 1.2 会有以下报错:

write EPROTO 140544881244032:error:1416D044:SSL routines:tls_process_key_exchange:internal error:../deps/openssl/openssl/ssl/statem/statem_clnt.c:2337:

不懂 js, 希望能有所帮助。

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

似乎和tls版本有关系。 nodejs v16.13.0

const { default: axios } = require("axios");
const tls = require("tls");

tls.DEFAULT_MAX_VERSION = "TLSv1.1";
tls.DEFAULT_MIN_VERSION = "TLSv1.1";

axios.get("https://ascii2d.net", {
    headers: {
        "User-Agent": "PostmanRuntime/7.29.0",
    }
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error)
});

成功访问。

补充: 我服务器 node 版本是 v12.22.7, 需要把 tls 版本锁在 1.2 才能成功访问。如果锁 1.2 会有以下报错:

write EPROTO 140544881244032:error:1416D044:SSL routines:tls_process_key_exchange:internal error:../deps/openssl/openssl/ssl/statem/statem_clnt.c:2337:

不懂 js, 希望能有所帮助。

试了下锁 tls 版本不起作用

@DiheChen
Copy link

EL({BY5TY% 4O{$(~5 TBNP
image

再试试?

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

image

网络环境可能也是因素之一,总之这个方法并不是一定起效的

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

经过测试 headless browser 可以解决 challenge 问题,不久后可以发布新版本

只不过因为依赖 chrome(会自动下载),所以会做成一个可选项,并且首次使用前需要一些额外操作

@DiheChen
Copy link

image

网络环境可能也是因素之一,总之这个方法并不是一定起效的

再试试锁 tls1.1,
我本地 node 是 16.13.0, tls1.2 也会 403, tls1.1 是成功的。

参考了 以下代码
zbp这边也是用锁 tls 版本来绕过 jschallenge 的。

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

image
网络环境可能也是因素之一,总之这个方法并不是一定起效的

再试试锁 tls1.1, 我本地 node 是 16.13.0, tls1.2 也会 403, tls1.1 是成功的。

参考了 以下代码 。 zbp这边也是用锁 tls 版本来绕过 jschallenge 的。

1.1 也是试过的,在我这边没有效果

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

草,锁 1.1 好像可行,发现跟 ua 有关系,需要用 PostmanRuntime/7.29.0

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

@DiheChen 谢谢,问题解决了

@Tsuk1ko Tsuk1ko unpinned this issue Feb 26, 2022
@NagaseYami
Copy link

牛,我也来学习一个

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

发现有个坑,可能是服务器上 openssl 的问题

我 win 用 tls1.1 可以,1.2 仍然 403

linux 上用 tls1.2 可以,1.2 以下也会报错 write EPROTO 140031419692928:error:1416D044:SSL routines:tls_process_key_exchange:internal error:../deps/openssl/openssl/ssl/statem/statem_clnt.c:2336:

@DiheChen
Copy link

是的,我的服务器(linux)上使用 tls1.1 会遇到这个openssl的报错,但是 1.2 是能访问的,本地(Windows)则 1.1 行 1.2 403。
zbp 这边也是用的 tls1.2。

Tsuk1ko added a commit that referenced this issue Feb 26, 2022
@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

先暴力解决一下 process.platform === 'win32' ? 'TLSv1.1' : 'TLSv1.2'

如果仍有个例问题再考虑增加设置项啥的吧

@Miuzarte
Copy link

先暴力解决一下 process.platform === 'win32' ? 'TLSv1.1' : 'TLSv1.2'

如果仍有个例问题再考虑增加设置项啥的吧

食用方法不对么
image

2022/2/26 下午7:05:16 [error] ascii2d
Error: Request failed with status code 403
    at createError (/root/cq-picsearcher-bot/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/root/cq-picsearcher-bot/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/root/cq-picsearcher-bot/node_modules/axios/lib/adapters/http.js:312:11)
    at IncomingMessage.emit (events.js:412:35)
    at IncomingMessage.emit (domain.js:475:12)
    at endReadableNT (internal/streams/readable.js:1334:12)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)
{
  "message": "Request failed with status code 403",
  "config": {}
}

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

先暴力解决一下 process.platform === 'win32' ? 'TLSv1.1' : 'TLSv1.2'
如果仍有个例问题再考虑增加设置项啥的吧

食用方法不对么 image

2022/2/26 下午7:05:16 [error] ascii2d
Error: Request failed with status code 403
    at createError (/root/cq-picsearcher-bot/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/root/cq-picsearcher-bot/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/root/cq-picsearcher-bot/node_modules/axios/lib/adapters/http.js:312:11)
    at IncomingMessage.emit (events.js:412:35)
    at IncomingMessage.emit (domain.js:475:12)
    at endReadableNT (internal/streams/readable.js:1334:12)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)
{
  "message": "Request failed with status code 403",
  "config": {}
}

cfClient = createAxios(getTlsVersionAgent(proxy, process.platform === 'win32' ? 'TLSv1.1' : 'TLSv1.2'), POSTMAN_UA);

是什么系统,改成另一个版本看看?

@Miuzarte
Copy link

是什么系统,改成另一个版本看看?

Linux Tencent-HongKong 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

image
image

@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

看来还是得出个设置(

Tsuk1ko added a commit that referenced this issue Feb 26, 2022
@Tsuk1ko
Copy link
Owner

Tsuk1ko commented Feb 26, 2022

现在统一使用 TLSv1.1 了,有 OpenSSL 问题的可以通过手动修改机器人配置或者 OpenSSL 配置解决

具体见 https://github.com/Tsuk1ko/cq-picsearcher-bot/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98#ascii2d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests