五秒盾对抗系列

CloudFlare 五秒盾介绍

CloudFlare js challage 业界俗称五秒盾。CloudFlare 是一个做CDN 内容分发的服务商, 被人戏称为网络菩萨,其名下有非常著名产品 VPN软件Warp+, 提供DNS查询1.1.1.1,还有常被用来加速的CloudFlare Worker 等等等等。

开启CloudFlare 免费防护

原理

网站开启CloudFlare 防护之前,会将DNS 服务托管到CloudFlare的DNS服务器,在输入网址的时候 会返回一个带js 的网站,在浏览器执行完js 之后,会在本地生成cookie,然后刷新网页,带着cookie 访问网站,cf 检验通过之后,才会返回被防护的网站内容。

CloudFlare特征

免费版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os

import requests


headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
url = "https://pincong.rocks/"

os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890'
response = requests.get(url, headers=headers,)

print(response.text)
print(response)
print(response.status_code)

#html <title>: Just a moment...
#status_code: 403

这个在体验上无感的和在浏览器打开瑞数保护的网站一样

付费版本

image-20231114204658454

需要点击input 输入框,这个对于纯代码实现的爬虫来说,做出这样的交互有点困难。

路由

使用cloudflare 防护的网站一般会有一个/cdn-cgi/trace 的路由

比如我访问 https://nowsecure.nl/cdn-cgi/trace 会有响应如下

image-20231114171337064

  • fl:Cloudflare 服务器实例
  • h:网站域名
  • ip:当前访问者的IP地址
  • ts:时间戳,格式为“秒.毫秒”(bash中生成同款时间戳的命令为date +%s.%3N
  • visit_scheme:访问者使用的协议
  • usg:访问者使用的UserAgent信息
  • colo:被访问的Cloudflare数据中心的所在位置,此处是由IANA定义的机场代码
  • sliver:请求是否被拆分成多个部分进行处理或传输
  • http:访问者使用的HTTP协议版本
  • loc:访问者的所在地(国家)
  • tls:访问者与服务器建立连接使用的TLS版本
  • sni:SNI加密或明文传输
  • warp:访问者是否使用了Warp服务
  • gateway:访问者是否使用了Cloudflare Gateway服务
  • rbi:访问者是否使用了Cloudflares Remote Browser Isolation(RBI)服务
  • kex:TLS密钥交换过程中使用的交换方式

来源: [Lxn-Chan 的博客]https://lxnchan.cn/cloudflare-trace.html

CloudFlare 网站收集

网站 CloudFlare 版本
https://nowsecure.nl/ 付费
https://lululemon.co.jp 付费
https://pingcong.rock 免费
https://www.amiami.jp/ 付费

https://nowsecure.nl/ 作为测试网站

短时间内请求同一个ip 请求次数过多,会由原来的无感验证码转化为需要点击的验证码。

我总共抓取了96条数据,每次请求中间会睡眠2秒钟,到第97条的时候就会需要点击验证。

解决方案一览

解决方案 部署/使用方式 实现原理简介
cloudflare-scrape python 库 nodejs 执行 js代码
cloudscraper python 库 多种js 执行引擎可选、三方验证码解决方案接口
curl-cffi python 库 使用curl-impersonate 的binding 模拟浏览器的指纹
undetected-chromedriver python 库 使用脚本抹除chromedriver 的特征,防止检测
CDP 协议 调试协议,无webdriver 特征
warp+ 网络 接入warp 网络 使用warp 内部流量,/cdn-cgi/trace 中会 warp=on
直接访问网站ip 直接使用 使用网络空间测绘引擎、搜索扫描到的ip和证书,如果能找到

基于CDP 调试协议的方案

库名 部署/使用方式 优势
flaresolverr docker部署,API 调用,其他语言调用
browserless docker部署,API 调用
ichrome
pychrome
DP 可以使用session 或者使用 国人开发 有很好的支持 可以加QQ群

其他方案

1
2
3
4
5
scrappey.com
puppteer.cm
chrome
pyppteer
botright

使用 flaresolverr

python 脚本

1
2
3
4
5
6
7
8
9
import requests

data = {"cmd": "request.get", "url": "https://www.singtao.ca", "maxTimeout": 60000,
"proxy": {"url": "http://172.17.4.181:7890"}}

# proxy 是clash verge 的内网监听端口
response = requests.post('http://localhost:8191/v1', json=data)

print(response.text)

添加granfana 监控

granfana 官方地址

1
2
3
4
5
6
docker run -d \
--name=flaresolverr \
-p 8191:8191 \
-e LOG_LEVEL=info \
--restart unless-stopped \
ghcr.io/flaresolverr/flaresolverr:latest

五秒盾对抗系列
https://kingjem.github.io/2024/10/14/五秒盾对抗/
作者
Ruhai
发布于
2024年10月14日
许可协议