分类 编程 下的文章


知乎中学生寻找计划


0x00 为啥要搞这个

今天吃晚饭的时候刷知乎刷到了千赞以上99/00后答主及其高赞回答 一览,最后发现施子怡大大是“人肉搜索”,于是打算借助神秘的程序力量找出一部分。

0x01 构思

知乎不是使用数字id展示个人页面,因此我决定使用通过一个人的关注者来爬,我觉得我们总会关注一些自己同龄人的动向。(因为我就是啊)关于符合要求的人的判断,因为知乎并没有生日的选项(就算有也会有很多人不填写或者填写假的吧),我打算通过找关键字的方法。比如高一|高二|高三|高中学生|00后等等。

打算使用Node.js开发(的确很独特),用队列的形式,引入diskdb这种好玩的数据库。

0x02 环境准备

npm install cheerio request diskdb async

0x03 简单的搞事流程

知乎的用户界面使用了React框架,用户数据都存放在一个id为datadiv里的data-state参数里,提取出这段参数就可以get用户数据了。然后配合cheerio的dom操作,提取出数据。

还有为了节省时间,grab.js里是直接提取出关注者页面的信息,并没有赞、感谢等数据,所以还要getDetail.js帮助把queue这个collection里用户信息保存在list这个collection里。

0x04 执行

npm install
node ./grab.js sohaking
node ./getDetail.js

最后我以用户sohaking(也就是我自己)为起始节点搜寻出378名包含设定关键字的用户。

Result

0x05 其他的

相关源码公布在GitHub:sohaking/zhihu-people-finder

知乎专栏:https://zhuanlan.zhihu.com/p/25092211


使用dd和nc将手机内部存储直接备份到电脑


因为打算自己编译一个CyanogenMod14.1给我的Zenfone 5,要备份一下文件。但是忘了之前在哪里看到用nc和dd通过usb传输备份文件到电脑。又忘了nc怎么用,我实在太懒,就在Google上搜索现成的教程。刚好看见一个知乎提问,方法类似,多个gzip而已(安卓使用dd命令备份镜像如何加入gzip压缩参数? - 知乎)。于是我就先在这里备份一下,避免下次用到又忘了怎么用。

首先你得有adb。

然后将手机连上电脑,用adb devices确认已经连接上了,并且显示的是device而不是unauthorized什么的。

adb forward tcp:2333 tcp:2333转发端口。2333是端口号,tcp是协议。第一个是电脑上的监听端口,第二个是手机上的端口。

接着adb shell su进入shell模式并且获取得到root。

nc -p 2333 -L dd if=/dev/block/mmcblk0

(如果nc版本不同,命令的使用也不尽相同。在某些版本中,上面命令的写法是nc -p 2333 -l -e dd if=/dev/block/mmcblk0)

我这里备份的是整个mmcblk0,如果你只要其中一个分区那就先fdisk -l /dev/block/mmcblk0不过我的手机没有成功列出分区表,也许是GPT分区表的锅。你也可以通过ls /dev/block/by-name通过名字找到你的数据分区(比如说data,那命令就是nc -p 2333 -L dd if=/dev/block/by-name/data),当然也可以直接用mount命令找到你想要分区的挂载点。

至此,手机上的准备结束。

QQ20161106-1.png

电脑上也很简单。

shell里一句话nc 127.0.0.1 2333 | pv -i 1 > asus_t00f-20161106-backup.img就可以了,后面的asus_t00f-20161106-backup.img是电脑上接受备份的文件名。

然后去吃零食等传输好就可以了。

QQ20161106-2.png


Typecho在HTTPS反代HTTP时遇到的bug处理


把博客改成HTTPS反代HTTP以后,觉得自己很久没收到评论提示了,于是决定上博客后台看看。突然发现博客后台进不去了,不仅是所有资源都被写成了http://,还有就算是手动load了这些http的不安全脚本,还是不能登录。后来经过阅读相关Typecho的源代码,才知道问题出在/var/Typecho.Request.php中的getUrlPrefix()函数中。这里调用了同文件中的isSecure()函数。而isSecure()函数中判断是https的方式有3种:

  1. PHP的$_SERVER['HTTPS']中值不为off
  2. PHP的$_SERVER['SERVER_PORT']中值为443
  3. 常量__TYPECHO_SECURE__为true

一看第三种方式处理起来最方便,于是打开/config.inc.php,在该插入的位置插入define('__TYPECHO_SECURE__', true);,就可以解决。博客的评论问题也同时可以完美解决。


自动登录浙江省高校招生考试信息管理系统


刚刚经历了浙江省的2016年10月学考选考,但不知道什么时候出成绩,于是我决定写一个自动查询的脚本。

0x00 准备

首先我打开了http://pgzy.zjzs.net:8011/login.htm,仔细观察了它的验证码。

pgzy.zjzs.net:8011

看了一下这个验证码的干扰因子很少,应该很方便识别。为了研究,我用wget下载了20个验证码。

wget http://pgzy.zjzs.net:8011/INC/VerifyCode.aspx -O $(date +%s).jpg

这里为了试验,我把20个验证码全部重命名过了。

验证码们

这里打算使用的语言是交易 3Python 3,并装好opencv和diff-match-patch。

本来想使用TensorFlow,但是我怕我在研究怎么使用它上会花费大量时间,于是使用了最机械的方法。

// 点开我,里面还有许多内容!


Cordova中deviceready事件不能触发


这两天在做一个HTML5App项目,我用Cordova进行开发。但是调试的时候却发现deviceready事件没有被触发。

deviceready没有被触发,里面的东西也没运行。后来在google上爬了一会儿,才知道页面上要引入cordova.js。

于是加了

<script src="cordova.js"></script>

程序正常运行。

cordova.js直接引入即可,是自动生成的。