TLS指纹
怎么判断有没有tls
- 验证了请求头顺序 https://www.cnblogs.com/Eeyhan/p/15292983.html
- 强制http2.0 https://www.cnblogs.com/Eeyhan/p/15662528.html
- 请求参数保证和抓包工具完全一致 比如cookies,还有请求参数json.dumps 是否去掉空格 separators=(',' ':')
- 补充:新版的requests和urllib3库,对ssl有校验,导致开了抓包工具后,就无法请求数据,及时设置了verify=False
# 使用低版本requests和urllib3解决
pip install requests==2.27 urllib3==1.25.8
- 他语言或者工具可以请求,就python不行
- 可能有tls
- web平台,除了浏览器,其他语言都不行,app平台除了app其他语言都不行
- 大概率tls
怎么判断有没有强校验的tls
弱校验
就是postman可以 ,javascript也可以(js也可能不行),curl也可以,就python不行,那大概率是很弱的校验,参考这篇文章 https://www.cnblogs.com/Eeyhan/p/15662849.html
中校验
按照上面的改tls套件的方法不行,但是curl或者postman就是可以 毕竟方案已经公开,可能针对性的改了下,所以你针对性的分析, 可以用以下方案过可以过
- go库:ja3transport,不支持HTTP2.0
- go库:cycletls,支持HTTP2.0
- requests go版:https://github.com/wangluozhe/requests
- 魔改openssl
强校验
python、postman、curl、js请求都不行,只有浏览器可以 用以下方案可以过:
- 魔改的pycurl
- pyhttpx
- curl_impersonate
方案整理
整理一下方案如下: 方案很多,这里有两篇文章参考 python 针对tls的对抗 : https://blog.csdn.net/weixin_44144647/article/details/133864256
https://blog.csdn.net/a5right/article/details/142910718
整理
根据tls检验程度从小到大
原生python层面修改tls套件 https://www.cnblogs.com/Eeyhan/p/15662849.html
用go的库ja3transport https://github.com/CUCyber/ja3transport
用go的库requests https://github.com/wangluozhe/requests
用go的库cycletls https://github.com/Danny-Dasilva/CycleTLS
python库 其实就是魔改的pycurl的简易安装版,群里一个大佬编译好的, 里面有详细的步骤: https://github.com/synodriver/pycurl/blob/master/special.markdown
pycurl 的docker版 docker pull geekbyte1/pyantitls:v1.0 docker run -it -d geekbyte1/pyantitls:v1.0 Q佬的docker file: python完美突破tls/ja3(docker版)
直接调用curl_impersonnate 就是魔改版的pycurl,用的核心的东西,直接操作终端然后调用curl_impersonnate 现在curl_impersonnate已经出windows版 能过tls检测的curl-impersonate win版,搞起来啊
cycletls的python版 https://github.com/Danny-Dasilva/cycletls_python
curl_cffi
tls-client