python、go、node的ja3指纹实现

2023-10-18 04:40
文章标签 python 实现 go node 指纹 ja3

本文主要是介绍python、go、node的ja3指纹实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.初识

1.什么是ja3相信大家都有所耳闻,这里就不做太多概述,简单来讲就是就是基于tls/ssl协议的客户端指纹特征识别技术。

2.绕过ja3的四种方法

  • 1.访问ip指定host绕过waf
  • 2.代理中转请求(go版本有实现可以去了解下)
  • 3.更换request工具库
  • 4.魔改requests

3.tls检测网站

  • akamai 1.75
  • akamai2.0
  • Cloudflare(5秒盾)

这里我们讲解各语言版本的实现,详细了解ja3的可以移步到一下文章。

参考1

参考2

参考3

二.语言实现——(案例猿人学19题)
  • python

    一.pyhttpx

import pyhttpx
sess= pyhttpx.HttpSession()
url = f"https://match.yuanrenxue.com/api/match/19?page=1"
response = sess.get(url,headers=Headers)

​ 二. Pycurl(pycurl是curl的一个python版本)

import pycurl, json
from io import BytesIOClass getAll():def __init__(self):self.pyc=pycurl.Curl()self.buffer=BytesIO()def getoutPut():self.pyc.setopt(pycurl.URL, 'http://some-url')#跳过验证self.pyc.setopt(pycurl.SSL_VERIFYHOST,0)self.pyc.setopt(pycurl.SSL_VERIFYPEER,0)self.pyc.setopt(pycurl.POST,1)self.pyc.setopt(pycurl.WRITEDATA,self.buffer)self.pyc.setopt(pycurl.HTTPHEADER, ['content-type: 		   	     				application/json','content-type:multipart/form-data'])data = json.dumps({"name": "abc", "path": "def", "target": "ghi"})self.pyc.setopt(pycurl.POSTFIELDS, data)self.pyc.perform()self.pyc.close()print(self.buffer.getvalue().decode('utf-8'))

​ 三.魔改open_ssl

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.ssl_ import create_urllib3_contextORIGIN_CIPHERS = ('ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:'
'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES')class DESAdapter(HTTPAdapter):def __init__(self, *args, **kwargs):"""A TransportAdapter that re-enables 3DES support in Requests."""CIPHERS = ORIGIN_CIPHERS.split(':')random.shuffle(CIPHERS)CIPHERS = ':'.join(CIPHERS)self.CIPHERS = CIPHERS + ':!aNULL:!eNULL:!MD5'super().__init__(*args, **kwargs)def init_poolmanager(self, *args, **kwargs):context = create_urllib3_context(ciphers=self.CIPHERS)kwargs['ssl_context'] = contextreturn super(DESAdapter, self).init_poolmanager(*args, **kwargs)def proxy_manager_for(self, *args, **kwargs):context = create_urllib3_context(ciphers=self.CIPHERS)kwargs['ssl_context'] = contextreturn super(DESAdapter, self).proxy_manager_for(*args, **kwargs)import requests
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67'}
s = requests.Session()
s.headers.update(headers)for _ in range(5):s.mount('https://ja3er.com', DESAdapter())resp = s.get('https://ja3er.com/json').json()print(resp)

提示:cycletls是一个针对go和node的ja3实现

项目地址:cycletls

  • go(cycletls)

    1.安装:go get github.com/Danny-Dasilva/CycleTLS/cycletls

    2.使用

package mainimport ("github.com/Danny-Dasilva/CycleTLS/cycletls""log"
)func main() {client := cycletls.Init()response, err := client.Do("https://match.yuanrenxue.com/api/match/19?page=1", cycletls.Options{Body:      "",Ja3:       "771,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-		 49161-49171-49172-51-57-47-53-10,0-23-65281-10-11-35-16-5-51-43-13-45-28-		  21,29-23-24-25-256-257,0",UserAgent: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) 			    	 Gecko/20100101 Firefox/87.0",}, "GET")if err != nil {log.Print("Request Failed: " + err.Error())}log.Println(response)
}
  • node(cycletls)

    1.安装:npm install cycletls

    2.使用

const initCycleTLS = require('cycletls');
// Typescript: import initCycleTLS from 'cycletls';(async () => {// Initiate CycleTLSconst cycleTLS = await initCycleTLS();// Send requestconst response = await cycleTLS('https://match.yuanrenxue.com/api/match/19?page=1', {body: '',ja3: '771,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-49161-	  	  49171-49172-51-57-47-53-10,0-23-65281-10-11-35-16-5-51-43-13-45-28-21,29-23-     24-25-256-257,0',userAgent: 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101       Firefox/87.0',timeout: 2,// proxy: 'http://username:password@hostname.com:443'}, 'get');console.log(response);// Cleanly exit CycleTLScycleTLS.exit();})();

效果

在这里插入图片描述

三.结语

好了,上面列举的这些ja3指纹工具实现相信能够应付绝大多是情况,兄弟们可以自行测试效果,如果遇到更多的情况,还得详细的分析,去进行魔改测试。

这篇关于python、go、node的ja3指纹实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/230225

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法