写得不全 敬请谅解!开始吧
说实话,其实当我看猿人学十九题得时候, 其实解决了但是没有理解它得原理,直到我昨天看了一篇大佬得文章,得到了它得原理。
链接 https://www.cnblogs.com/Eeyhan/p/15662849.html
它是检测了指纹,tls指纹。这里是ja3指纹
关于指纹得文章可以看 https://mp.weixin.qq.com/s/Qx7PjnBgrTR30oCurU6CGw
其实不管是 还是fillder抓包 还是Charles 都是会被检测到得。
这里推荐 wireshark抓包:
需要用最新版的wireshark才能看到ja3指纹,因为ja3指纹是基于tls1.3的,旧版的wireshark只能看到tls1.2及以下的
最新版下载地址:https://www.wireshark.org/download.html
通过看protocol可以看到它是tls, 然后我们点开client hello那个包
滑倒最后可以看到它是ja3指纹检测
关于ja3指纹 在上面我也提到过,大家可以去看下那篇文章。
我们知道requests 是基于 urllib3 实现的。要修改 JA3 相关的底层参数,所以我们今天要修改 urllib3 里面的东西。
我们知道 JA3 指纹里面,很大的一块就是 Cipher Suits,也就是加密算法。而 requests 里面默认的加密算法如下:
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:!aNULL:!eNULL:!MD5
我们可以通过修改request里面得默认算法来进行绕过 让我们得指纹长度小于等于浏览器指纹得长度就可以了
在 requests 里面,要修改 Cipher Suits 中的加密算法,需要修改 urllib3 里面的 ssl 上下文,并实现一个新的 HTTP 适配器 (HTTPAdapter)。在这个适配器里面,我们在每次请求的时候,随机更换加密算法。但需要注意的是!aNULL:!eNULL:!MD5
就不用修改了,让他们保持在最后。但是这里不需要那么得麻烦,直接在写代码得时候标注一下,贴上我得代码 其实原理跟我看得大佬那篇原理是差不多得,都是让生成得指纹长度小于浏览器得长度。
其实原理都大径相同,可能写得不是很全,忘理解 不过我该解释也解释到了