说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除
作者:zhu6201976
TLS/JA3、HTTP/2 指纹检测是一种网络流量分析技术,用于识别和分析网络通信中使用的加密协议和通信特征。这些技术通常用于网络安全领域,以便检测恶意活动或进行流量分析。以下是对每个概念的详细描述:
原理:网页运行在浏览器中,浏览器所支持的官方语言是JS,因此,通过原生JS构造并发送请求,其TLS/JA3指纹是正常的,理论上不会被拦截。
某些第三方请求库,底层修改了TLS/JA3的生成方式,因此可以绕过这些检测。
如:
Python的curl_cffi库GitHub - yifeikong/curl_cffi: Python binding for curl-impersonate via cffi. A http client that can impersonate browser tls/ja3/http2 fingerprints.
Go语言版的requests
GitHub - asmcos/requests: A golang HTTP client library. Salute to python requests.
在所有的请求工具中,wget请求指纹暂未被列如黑名单,实测可以成功拿到正确响应
aHR0cHM6Ly9kb29kcy5wcm8vZS9jMHh2NGplYjdtbmE=
该网站使用了简单的CloudFlare风控,而简单版的CloudFlare风控底层检测了常见语言的请求库TLS/JA3指纹,收集并列入了黑名单。因此,非浏览器的请求指纹理论上都会被拒绝响应,比如返回如下信息:
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Just a moment...</title>
</head>
</html>
一旦检测到非浏览器指纹请求,则返回类似 Just a moment... 错误信息。
此处采用最简单的Python第三方请求库curl_cffi实现绕过,代码如下:
from base64 import b64decode
import requests
from curl_cffi import requests as req
url = b64decode('aHR0cHM6Ly9kb29kcy5wcm8vZS9jMHh2NGplYjdtbmE=').decode('utf-8')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
}
resp1 = requests.get(url, headers=headers)
print('resp1', resp1.text)
resp2 = req.get(url, headers=headers, impersonate='chrome110')
print('resp2', resp2.text)
运行结果:
显然,同一个url,curl_cffi成功拿到了正确响应。