当前位置: 首页 > news >正文

爬虫从入门到精通(22) |TLS指纹

文章目录

  • 一、什么是TLS指纹
  • 二、爬虫判断是否为指纹校验
  • 三、解决方式
    • 1.curl_cffi
    • 2.rnet
    • 3.cycurl
    • 4.requests-go

一、什么是TLS指纹

TLS 指纹也叫 JA3 指纹,是指在 TLS 握手过程中,客户端(通常是浏览器)向服务器发送的特定参数组合,这些参数形成了独特的 “数字足迹”,可用于识别设备、浏览器或用户。具体介绍如下:

  • 形成原理:TLS 指纹主要由 TLS 握手过程中的多个参数构成,包括 TLS 版本,如 TLS 1.2 或 TLS 1.3;客户端支持的加密算法组合及优先级顺序,如 AES_256_GCM、CHACHA20_POLY1305 等;TLS 扩展,如 SNI、ALPN等;椭圆曲线算法,如 secp256r1、curve25519;以及签名算法、会话票据等其他参数。在 TLS 握手时,客户端将这些参数发送给服务器,服务器可根据参数组合生成一个哈希值或指纹 ID。
  • 主要应用:TLS 指纹技术被广泛应用于安全检测领域,可用于区分真实用户与爬虫,因为爬虫的 TLS 指纹通常与普通浏览器不一致。还可以帮助网络管理员了解网络中 SSL/TLS 客户端的类型和行为,通过将检测到的 TLS 指纹与已知的恶意指纹数据库对比,识别潜在的安全威胁。

二、爬虫判断是否为指纹校验

浏览器正常访问,代码在排除掉常规反爬(IP、User-Agent、Cookie)后,请求仍被拦截报错代码403,大概率为指纹校验

三、解决方式

在这里插入图片描述

1.curl_cffi

from curl_cffi import requestsurl = "https://tls.peet.ws/api/all"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
# 使用Chrome 124指纹
response = requests.get(url, headers=headers, impersonate="chrome124")
print(response.text)

2.rnet

from rnet import RnetClienturl = "https://tls.peet.ws/api/all"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
client = RnetClient()
# 自定义JA3指纹(需手动配置)
client.set_ja3("771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513,29-23-24,0")
response = client.get(url, headers=headers)
print(response.text)

3.cycurl

from cycurl import requestsurl = "https://tls.peet.ws/api/all"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
# 使用Chrome 124指纹
response = requests.get(url, headers=headers, impersonate="chrome124")
print(response.text)

4.requests-go

import requests_gourl = "https://tls.peet.ws/api/all"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
tls = requests_go.tls_config.TLSConfig()
tls.ja3 = "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513,29-23-24,0"
tls.pseudo_header_order = [":method", ":authority", ":scheme", ":path"]
response = requests_go.get(url=url, headers=headers, tls_config=tls)
print(response.text)
http://www.dtcms.com/a/265226.html

相关文章:

  • 【RHCSA-Linux考试题目笔记(自用)】servera的题目
  • 【C++】--入门
  • HTTPS详解:原理 + 加解密过程 + 面试问答
  • SpringBoot:整合quartz实现定时任务-基础篇
  • 从零用java实现 小红书 springboot vue uniapp (12)实现分类筛选与视频笔记功能
  • uniapp 滚动tab
  • autoware calar 联合运行,自动驾驶虚拟仿真器
  • ESP32S3开发:实现WiFi扫描与连接功能
  • 插值与拟合(3):B样条曲线
  • MySQL 用户管理与权限控制
  • 进阶向:Django框架深度解析各核心组件的作用与协作
  • Spring生态在Java开发
  • 自动驾驶行业向端到端架构转型
  • ArrayList剖析
  • 买卖股票的最佳时机--js 算法
  • linux LAMP 3
  • 开疆智能CCLinkIE转CANopen网关连接GBS20机器人配置案例
  • 第四章 网络传输介质与综合布线基础
  • 04-动态规划
  • OpenHarmony 5.0 解决点击导航栏切换后台按钮再切换到前台导航栏可能覆盖输入法问题,导致输入法下沉,最下面的显示不全
  • day046-tomcat与部署war包、jar包
  • 为什么星敏感器(Star Tracker)需要时间同步?—— 从原理到应用的全解析
  • Day04:玩转标准库中的数据处理与日志记录
  • pytest fixture基础大全详解
  • 爬虫反爬策略实战:UserAgent代理池简明指南
  • 电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题
  • 二刷 苍穹外卖day11
  • 讲解视频:分布滞后非线性模型DLNM​​专题:从基础到进阶学习路径
  • 记录一个QT中pro文件换行需要注意的问题
  • 第29篇:Linux审计系统深度解析:基于OpenEuler 24.03的实践指南