前言
由于准备考研,这学期我基本都是泡在图书馆学习了,图书馆二楼的自习室的位置需要每天预约,但是图书馆的插座有限,只有部分位置有插座,因此有些靠近插座的位置需要每天提前预约。于是我萌生了写一个自动预约座位程序的想法。
流程
预约部分
首先通过工具抓包,找到图书馆预约页面的相关接口。抓包的方法我不再赘述,前面写过一篇文章利用Charles进行抓包使用教程(一)
模拟登陆,提交信息,发送预约情况到微信。
- get访问登录页面,获取cookie和表单里面的隐藏code和str字段
- 构造登录post数据,加入从表单里面拿到的隐藏两个字段
- post构造后的数据,模拟登录,激活cookie
- post预约请求,实现预约座位
- 解析返回结果,判断是否成功,并微信提醒结果
定时功能
每天晚上八点整,图书馆会释放后天的位置。因此,我在云服务器上设定成每天晚上八点自动预约。
由于云主机时区不同,python读取本地时间必然与我们不同.所以要记得更改时区为东八区
$ tzselect
启动cront服务,启用cront日志到/var/log
实现效果
这个程序我二月份就写好了,运行了三个多月,很稳定。(动图点击查看详情)
签到部分
这部分的内容有点搞笑,由于图书馆签到系统采用微信签到,而其实现的原理是利用微信开放的蓝牙APi接口,搜索附近的其他蓝牙设备。自习室各个角落分布了若干蓝牙设备,如果搜索到信号源,则签到成功。由于刚开始我没有定位到正确的HTTP数据包,于是没有写签到部分,导致签到部分都是手动完成。五一假期的时候趁着图书馆人少,于是我以自习室门口的签到机器作为入口进行研究。
找签到接口的时候保安就坐在我的后面,但是我们要知道,越是心虚反而越是没了底气,这时候要挺直身板,不慌不忙才能事半功倍。
我再次抓机器的包,发现Charls这次连数据包都抓不到了,排除了配置的问题后,我分析原因可能有如下:
- APP内作了证书双向校验(无解,另寻他法 )
- 签到信息走的不是http协议(Charles只能抓HTTP协议的数据),诸如tcp/udp此类的协议Charles抓不到。(可以用Wireshark抓包)
解决方法:
- 第一种几乎无解,只能逆向apk文件来找源码,任务量太大了
- 第二种方法我第二天尝试了,但是Wireshark不是简单设置代理就可以了,这个软件的原理是监听网卡,实现抓包。这需要我笔记本连接有线宽带,然后Wifi无线网卡作为热点共享给签到机器。由于准备不齐全当天并没有实施,第二天我和我研友带上了螺丝刀和老虎钳还有扩张坞“准备作案”
然后被保安发现了。她叫来了图书馆的一个管理人员,问我们在干嘛。附上保安模糊照一张。
我们一阵解释之后,无奈只能放弃该方案。
- 这两天重新手机抓包,终于找到了签到接口,发现就是简单的post操作。
至此,预约和签到的功能全部完成。这个软件我不打算开源,也不打算给其他人使用。因为这个软件只适用于天天去图书馆的人,偶尔去的人会造成位置资源的浪费,到最后出事了背锅的还是我。
写在后面
虽然没有用了很厉害的方法,但是我觉得分析问题的思路是可以借鉴的,它能让我们日后遇到问题找到解决的方法。
说点题外话,这是我今年写的第二篇文章,虽然我还有很多想写的东西,但是由于生活琐事无暇顾及其他,贴吧自动签到系统也没有时间去维护了。等我研究生考试结束,我会再来用心经营博客。
考研究生的路注定是要吃点苦的,知道为什么河里的起来的鱼要比鱼塘里养的鱼好吃吗?(动图点击查看详情)
因为鱼塘里的鱼,天天有人喂,没有天敌追,就等着养肥给人吃,一天到晚游快游慢都一样,身上鱼肉不多,鱼油不少。而河里的鱼,为了吃饱,为了避免被更大的鱼吃掉,它必须要不断地游。这样生存下来的鱼,那鱼肉吃起来自然有营养、爽口。
五六十年代出生的人,应该也就是我们 父母那一辈,当时计划经济制度下,他们的生活被社会安排好了,先科员再科长、 当后处长再局长,混到哪算哪:学徒、技工、高级技工;教师、中级教师、高级教师,总之无论哪个行业都论资排来。这样的生活如何让人奋发努力,所以经济发展缓慢。
可见,舒适环境是很难培养出坚强品格,被安排好的人生, 也很难做出伟大事业。
有些人问我,为什么要考研,说实话我也不是很确定当初为什么选择了考研这条路,我大可不必考研,寒假期间写了一个数字货币全自动化搬砖的脚本,3月份赚了2万多,真的是躺着赚钱,然后再去找个专业对口的工作渡过这几年,但这不是我想要的生活。实现个人价值的方法有千万种,可以工作可以考研,我选择了考研,无论最后成功与否,都是很有意义的一件事吧...
市场经济社会下,机会就大多了,你可以从社会的任何一个位置开始起步,只要你真有决心,没有人可以拦着你。
事实也证明,三十年河东三十年河西,无论出身是什么,之前是凄苦还是富足,都有出人头地的一天。当然,这也就意味着,面临的竞争也是空前激烈的,一不小心,你的位置就可能被人插足,甚至你就得out 出局。
我有个很要好的高中同学,家里的条件不错,父母都是事业单位体制内的人,他爸爸开宝马,他爷爷开宝马,每次出去酒吧玩的时候,他爸爸一通电话就把我们安排了,无论如何都算是中产阶级以上的人,但是他依旧学习很努力,在高中时期,我一直以他作为标杆。现在他在英国利物浦读本科,学的依旧还是那么勤奋。
不怕苦,吃苦半辈子,怕吃苦,吃苦一辈子。如果你觉得上学读书是受罪,假设你可以活到80岁,其实你最多也就吃了20年苦。用人生四分之一的时间来换取其余时间的幸福生活,这点苦不算啥。再说了,在图书馆跟着这么多漂亮的女孩子一起学习,这也能算是吃苦?
大佬牛逼 我按照你的思路复制了一份 真香
全部都用python实现的吗?
我们学校是用的同样的图书馆预约系统,自己用java整了个抢座的,但是,签到问题还是一直困扰着我,微信/扫码两种签到方式 微信签到是走https,扫码的post有一个随机的不知道什么码和时间戳,这个随机的码一直没整出来是什么东西,签到就这样做不出来了
微信的https也可以抓包出来看看是什么样子的,扫码的post你如果看不懂参数的值可以考虑从js或者网页源码文件入手
您好,蓝牙签到,如何研究签到机器?我只会抓手机和电脑的数据包。QQ1023182899
大佬,求一下源码啊
熟悉的微信预约界面和熟悉的预约签到机器
是同校的大佬无疑了 求求你加一下我的QQ1173851030 我想要这个!!
大哥!你居然实现了我一直以来想实现但不知道怎么实现的想法!!
牛逼的猛男,你是怎么想到写一个脚本去搬砖的啊
您好,蓝牙签到,如何研究签到机器?我只会抓手机和电脑的数据包