使用 Root 后的安卓手机获取向日葵智能插座 C2 的开关 api之前看到 https.gs 上的一篇文章,发现可以抓取向日葵智能插座 C1Pro 的开关 api,并实现局域网或公网的控制。这样一来,我们其实就不需要依赖于向日葵自己家的 App 去实现智能插座的开关操作,还是比较方便的。今年趁着双十一,直接低价拿下来带有计电功能的 C2,便也来试一试能不能抓到接口。首先,拿到插座以后肯定还是下载向日葵的官方 App,完成 wifi 的链接,这里就不再赘述。然后就可以打开我们的抓包软件。需要注意的是,原博客中抓到的接口是 http 协议,但这个接口在新版的 App 上已经变为了 https 协议,因此我们需要找一台 Root 过后的安卓机去抓包。抓包的步骤没什么好说的,用 Root 权限给本地安装自己的 CA 证书,然后打开抓包模式,在向日葵的 App 那边开关几次插座,回来就能看到这一段时间内的请求。点开可以看到,这是一个 GET 请求,一共有如下几个参...
创建 b23.tv 追踪参数移除 bot前两天似乎有人高调宣称自己发 b23.tv 没问题,结果过两天就被拿下的消息。我自己并不是他的粉丝,但这个戏剧性的流言也又一次说明了注重隐私保护的重要性。早前就有 b23.tf 和 b23.wtf 两个域名专门在做移除追踪参数的事情。只要将短链接中的 b23.tv 改成 b23.tf ,别人访问链接时就会被转到移除了追踪参数的链接。但这需要发送者在分享时手动更改域名。因此,我也开始为自己的 bot 添加了 b23.tv 的 track id 移除功能。当用户的信息中包含 b23.tv 短链接,将会自动发送一条移除了 track id 的信息,用户就可以直接点击无追踪参数的链接。当然,这两种方案并不能保护链接分享者的个人信息泄漏,因为 b23.tv 后面的参数是可以被别人看到的,通过这些参数就可以定位到链接分享者的个人信息,所以不能防止群里的内鬼倒查分享者的个人信息,但起码可以阻止大数据算法...
jinja2 中如何优雅地实现换行在使用 python 的 jinja2 模板引擎生成 html 的时候,会遇到 \n 换行符无法被正常换行的问题。我本能的想法就是将 \n 替换成 html 标签 <br />,但失败了,jinja2 有自动转义的功能,直接将标签原模原样地渲染了出来,并没有生效。而为这一段代码块关闭自动转义则会有被 js 注入的风险,因此这也不是上策。在 jinja2 的官方文档中,提出了使用 filter 的方案。也就是说,filter 将 \n 识别出来,并自动替换成 <br /> 标签,并且使用 Markup 函数将这一段 html 文本标记成安全且无需转义的。见: https://jinja.palletsprojects.com/en/3.1.x/api/#custom-filtersimport re from jinja2 import pass_eval_context from mark...
手动指定 python-selenium 的 driver path 以解决在中国大陆网络环境下启动卡住的问题之前因为学校社团迎新的需求,就临时写了一个 QQ Bot,最近又给 bot 加上了 /q 的功能,原理是通过 python 的 selenium 去启动一个 headless Firefox 去截由 jinja2 模板引擎生成的 html 的图。每次这个 bot 重启的时候都因为 selenium 而需要花费好几秒的时间,甚至经常概率性启动失败。我就寻思者应该把这个图片生成的 generator 从 bot 中抽出来,这样就不至于每次重启 bot 都要遭此一劫。但就在我将 generator 打包成 docker 部署上云服务器的时候,发现居然无法启动。于是手动进 docker 的 shell 开 python 的交互式终端,发现在创建 firefox 的 webdriver 对象的时候异常缓慢,等了半分钟以后蹲到一个报错如下:Traceback (most recent call las...
从零开始的静态网页部署(到个人云服务器)这篇博客是受 Tiancy 之托,在2023年精弘网络暑期授课的前端系列第七节课时针对项目部署这一块内容时所产生的产物。在授课视频中,受时长所限,我不得不采用宝塔面板+纯 ip 访问的方式来完成一个简单的部署,但这终究不是什么优雅的方案: 宝塔的安全性堪忧、其隐私性也是备受争议,而纯 ip 访问的方式也过于简陋,且没有支持 https 访问。因此这篇博客将以面对初学者的口吻去讲述如何从零开始部署一个 Vue.js 的项目到云服务器,以解我心头的愧疚。但是,我没有备案过的域名,且国内云服务器厂商众多,这篇博客终究不可能做到像保姆级教学那样去一一演示每一家云服务器厂商网页面板上的操作过程,而一些比较基础的概念我会给出简单的解释和例子以及引用一些外部链接,但终究不会全面覆盖到,诸位还请见谅。本文采用了一些 ChatGPT 和 Google Bard 提供的内容,准确性经过我本人核阅。基础 Web...
在运行OpenWRT的N1盒子上部署 QQBot由于学校社团的招新需要,我写了一个依赖于 go-cqhttp 运行的 QQ Bot,并没有实现什么花里胡哨的功能,只是实现了关键词回复和新人入群时的欢迎语。因为没考虑后续维护的问题,代码也写得比较草,但毕竟是能跑。这么一个小型的程序并不会占用的多少的服务器资源,单独为这么一个 Bot 去开一台国内的 vps 似乎是有些大材小用了,刚好我手上有一台运行在 OpenWRT 上的 Phicomm N1 盒子,反正也是 Linux 系统,便打算拿来挂 QQ Bot。安装 JDK由于腾讯近几个月对于 Bot 风控非常严格,所以不得不采用 SignServer 项目 fuqiuluo/unidbg-fetch-qsign 来确保 Bot 账号不会被风控一次保证 Bot 运行的稳定性。而这个项目又是使用 Java 开发的,因此需要先安装 JDK/JRE。但 OpenWRT 的开发者可能并没有考虑到在路由...
在浙工大宿舍使用路由器连接移动网络(校园网)2025.09.01 Updates:最近看到这篇博客的热度还挺高,应该是最近新生开学有不少都在看。但移动的认证方式于今年的 8 月 15 日发生了变更,具体可以看这篇微信公众号文章。我近期不在学校,没有环境去研究新的认证方式,但据我身边的人说不再需要什么 l2tp 了,找台常见的路由器直接走 dhcp 以后过一遍网页验证就好了。祝各位新生在工大能渡过愉快的四年!2024.04.09 Updates:几天前移动对网页认证的页面进行了更新,原有的脚本失效,本博客已更新适配新版网页认证的脚本。2023.7.10 Updates:首先,搬到屏峰校区以后,l2tp 服务器确实依然为 192.168.115.1,这点挺奇怪的。然后我发现 6.26 我的那个解决方案过于复杂,原先写的认证脚本完全可以胜任这项工作,之前失败的原因是因为我在朝晖抓的脚本参数不适用于屏峰校区,目前已经修复。脚本的变动情况可以...
为红米 Redmi AC2100 路由器刷入 Padavan大一一年转眼就要过去了,最近要搬校区了,顺手就把之前刷过的「小米路由器4A千兆版」出手给了同学,自己反手入了一个 「Redmi AC 2100」,尽管是跟着教程走,但过程中依然是遇见了不少坑,因此就开一篇博客记录了一下。重置路由器这一步其实可有可无,只是我从闲鱼上入手这个路由器,买家并没有告知我密码,于是我只能手动 RESET 这个路由器来进入后台。通过网络设置引导原本就是连上路由器后简单地通过引导界面,但由于我没有一个正常的网络环境,所以这一步走的其实也是有点困难的,我还是稍微记一下。首先浏览器地址栏输入 192.168.31.1 (小米家的路由器默认好像都是这个 ip 地址),看到下图界面,加不加入用户改善计划其实都是无所谓的,反正马上就要刷掉这个系统了。此处选择「不插网线,继续配置」,因为我们没有标准的网络环境,还指望着这台路由器跑 l2tp 帮我们连校园网呢。这里需要选择「自动获取...
Azure 教育订阅申请时遇到的麻烦进入大学已经快一年了,但我的 Azure 教育订阅申请一直没有成功,每年有 100 刀的额度,再这样下去就要亏掉近 700 元了,于是便打算趁期中考试刚结束的闲暇时间把 Azure 的教育订阅给过了。我拥有 *.edu.cn 的邮箱,并且通过了 Github Student Pack 的认证,但每次在 https://signup.azure.com/studentverification?offerType=1 页面尝试申请 Azure 订阅时,总是会得到一句冷冷的「你没有资格使用 Azure 免费帐户」。于是,我找到了 Azure 订阅支持客服帮忙,链接是这个: https://azureforeducation.microsoft.com/en-us/institutions/Contact,简要填写了我的基本信息后就开始等待邮件回复了。我是周四上午申请的,不到一个小时就等来了微软的...
执行 repo sync 后将 git-lfs 中的资源文件 checkout最近期中考试挺忙的,五一好不容易有一些自己的时间,于是打算重操旧业,搞点有意思的内容,没想到准备阶段就出了新问题,有点跟不上时代了本次遇到的问题是在执行 repo sync 命令后储存在 git-lfs 中的文件没有被自动 pull 并 checkout 出来,尽管我在 repo init 阶段已经加了 --git-lfs 参数了。上 google 简单查了查,查到一篇 stackoverflow 的回答,给出的思路是使用 repo forall -c 'git lfs pull' 的方案解决的,意思是在 repo 同步的每一个 git 仓库中都自动执行 git lfs pull 命令,但这个解决方案在我这有两个问题。仓库的 git-lfs 没有被安装,所以 git-lfs 会直接报错将整个安装源码一千多个仓库一一执行这些命令的速度太慢了解决方案也很简单,直接检测每个 git 仓库下是否存...
1…678…14