常见反爬策略整理——TLS 指纹

一、TLS 指纹是什么?

1.1 说明

TLS 指纹 也叫 JA3 指纹,是从 TLS 握手中提取特定数据,生成一个哈希值作为唯一指纹。TLS 指纹 反爬不那么容易一眼看出,如果碰到浏览器抓包无明显加密参数,使用抓包工具被检测,curl 请求和 request 请求会报错,排除其他反爬策略的可能,可以用 wireshark 抓包验证是否为 TLS 指纹,

1.2 特征

如图,JA3 就是 TLS 指纹加密数据,JA3 Fullstring 则是指纹信息的组成,将 JA3 Fullstring 的值进行 MD5加密后得到 JA3
在这里插入图片描述

1.3 指纹信息结构

JA3 Fullstring结构由 TLS Version, Cipher Suites, Extensions, supported_groups, ec_point_formats 这 5 部分组成,由 , 隔开。

在这里插入图片描述

  • 771:是TLS Version 的版本用十进制表示的值,在抓包信息的表示方式是 Version: TLS 1.2 (0x0303),括号内的 0x0303 就是版本信息的值。
    在这里插入图片描述
  • 4865-4866-4867…-47-53:Cipher Suites 的值,表示可接受的加密算法,在抓包信息中,Cipher Suites 下列出了所有可接受的加密算法,这个值来自于所包含的 TLS 相关算法末尾括号内容的十六进制转为十进制后的值。
    在这里插入图片描述
  • 43-65037-10…-65281-13:支持的扩展列表的值,抓包信息中,以 Extensions 前缀的的这些扩展项下的 type 字段对应的值。
    在这里插入图片描述
  • 4588-29-23-24:代表支持的椭圆曲线组,在抓包信息中,Extension: supported_groups (len=12)Supported Groups (5 groups) 包含的项所对应的值。
    在这里插入图片描述
  • 0:支持的椭圆曲线格式
    在这里插入图片描述

二、解决方案

2.1 curl_cffi

基于 curl 请求,进行二次包装,添加浏览器的指纹信息,python 进行第三次封装成库,可以不用过多考虑当前浏览器的指纹信息,直接用库生成请求即可。
在这里插入图片描述

2.2 cycletls

支持直接复制浏览器的 ja3 指纹信息绕过校验。通过 https://tls.browserleaks.com/json 查看浏览器指纹信息,复制 ja3_hash 传递给 cycletls 请求的 ja3参数即可。

const initCycleTLS = require('cycletls');
function api_test(){
    (async () => {
        // Initiate CycleTLS
        const cycleTLS = await initCycleTLS();
        // Send request
        const response = await cycleTLS(url, {
            body: 'page=1',
            // 浏览器指纹信息
            ja3: "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,27-13-10-11-51-35-18-17513-45-65281-0-65037-23-5-43-16,4588-29-23-24,0",
            userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
            cookies: [
                {
                    name: 'a',
                    value: 'xxxx',
                    domain: 'xxx',
                    path: '/',
                    expires: 1728826553, // 过期时间戳
                    secure: true,
                    httpOnly: false
                  },
                  {
                    name: '__yr_token__',
                    value: 'xxx',
                    domain: 'xxxxm',
                    path: '/',
                    secure: true,
                    httpOnly: false
                  },
            ],
        }, 'post');
        console.log("api_test -> ", response);
        // debugger;
        cycleTLS.exit();
    })();
}
api_test();

三、交流群

不会经常刷博客,有需要者可以加本人,搜索 LOVE_SELF_AD_LIFE,进逆向群聊,一起探讨技术
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值