省流,如果不想看思路直接翻到最下面
前言
前两天有个130%返现的这玩意
上车了以后发现wireguard只能用15分钟,要延长时间还要交钱,交钱了还没完,还不是永久,只是一个小时
这你能忍?反正我忍不了
我直接爬虫启动,简要思路参考如下
- 分析http请求
- 被cloudflare403要求轮询登陆了,看了一眼也没有什么比较可疑的请求头,猜测是浏览器指纹导致的轮询,开curl_cffi绕cloudflare的指纹爬虫检查完成登陆
- 有个参数需要逆向js,稍微逆向了一下,看半天js结果其实就是wireguard生成的公钥私钥
- 调接口生成wireguard配置,下班
爬虫原神启动
登陆
https://auth.purevpn.com/oauth2/authorize -> 302 跳转两次 -> https://my.purevpn.com/v2/api/fusionauth/login 返回关键参数 fa_token, 填入autorization和cookie完成登陆
这里单纯用requests
库会卡cloudflare指纹验证,我就换成了curl_cffi.request
, 秒绕过
爬虫业务逻辑
api base为 https://my.purevpn.com
接口 | 请求方法 | content-type | 关键参数 | 作用 |
---|---|---|---|---|
/v2/api/wireguard/get-encrypt-password | POST | application/x-www-form-urlencoded | username | 生成一个临时password供请求下面接口 |
/v2/api/wireguard/get-wg-server | POST | application/x-www-form-urlencoded | sUsername,sPassword,sClientPublicKey | 根据sClientPublicKey正式生成wireguard配置并激活服务端wireguard的peer |
第一个接口分析,这个username是固定的,可以post /v2/api/on-boarding返回的json可以获得[“body”][“subscriptions”][0][“vpnusernames”][0]
可以拿到get-wg-server
接口需要的password
关键数据获取如下
- sid 还是/v2/api/on-boarding 返回json的数据中 [“body”][“subscriptions”][0][“id”]
- spassword和susername, 都是get-encrypt-password已知的参数
- sClientPublicKey, 可以根据wg的公私钥生成算法获取
- iCityId和sCountrySlug都是对应的地区固定的,可以GET https://my.purevpn.com/v2/api/manual/configuration 获得一个json然后自己找对应地区
返回数据,我们关心的就是body.wireguard_configuration, 把{clientPrivatekey}替换成刚才生成的就完事了
给gpt5 pro提供思路,让gpt5拧螺丝吧,自己懒得写了,不得不说gpt5pro还是有点东西的,重生之我是python爬虫大神
用法
使用需要用到的库:git python3 python3-venv python3-pip
用法示例,代码在debian12测试使用通过(默认香港地区,其他地区请见仓库说明)
|
|
变量说明如下
|
|
代码是gpt写的也不是我写的,我只是改了一下比较奇怪的地方,就不贴了,自己去仓库看吧
声明
本脚本是爬虫项目,请自行承担有可能来自purevpn的封号风险
后记
可能你要说,主播主播,怎么不直接开个docker opvn客户端映射一个sock端口出来,不比这方便?
有一说一,还真是
珍惜时间,远离爬虫