之前问了一下学长,目前的每日安全新闻推送框架有没有开源的,发现目前好像大家都是自己用自己的,也比较浪费时间,就有了写一个通用框架来推送信息的想法。
日常解析RSS内容:
请忽略我的字体...
内置了155个插件,包含各个类别的安全博客、论坛、社区等。
├── generat_plugin.py
├── info_collect.py
└── plugins
├── ...
将文章分为web、re、pwn、generic、coding、news这几类,方便推送给用户时,用户可根据自身需求快速查看对应文章,如需增加类别,需要修改以下代码:
在model_types中添加你要新增的类别名称即可。
RSS源:zer0yu/CyberSecurityRSS: RSS: 优秀的网络安全知识来源
存入mongodb的数据字段:
使用插件式开发,可以满足自定义插件以及自定义类别的需求,只需要按照格式写好对应的插件即可。
插件格式:{}_{}_plugin.format(name,type,)
⚠️:插件一定要满足这个格式,否则是无法正常使用的,比如chy的插件名格式为chybeta_web_plugin,以此类推。
generat_plugin.py是用来以模板形式生成插件的,usage如下:
usage: generat_plugin.py [-h] -u URL -pn PLUGIN_NAME --type TYPE
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL Rss Url.
-pn PLUGIN_NAME, --plugin_name PLUGIN_NAME
Plugin name.
--type TYPE Plugin type.
这几个参数都是必须要传入的,url是rss的url,pn是插件的名称,type是插件的type,即web、re、pwn这些,使用这款插件生成工具,可以解决百分之90的rss源解析。
使用方式:
按照格式传入信息后,会在当前目录下生成插件:
如果输出如上,即打印出了rss内的文章信息,并且两个时间格式都是相同的,就可以直接用了,不过在用之前要删去这两行:
PS:我在模板中设置了rss的解析时间为10s,如果超出这个解析时间,默认定为解析失败,有需要的可以自行修改。
⚠️:插件生成工具不是万能的,有的插件并不支持我自定义好了的模板,比如某one插件。
他的rss是这样的:
里边没有我在模板中写好的updated参数,所以插件直接生成的脚本用不了,稍微改改才能用,最终运行效果如下。
另外,写插件也并不一定非要是解析RSS的插件,其他插件都是可以的,只要最终往mongodb中插入指定结构的数据即可。
下面演示如何把chybeta写成一个插件:
这是一个python3协程的bug,也不知道为什么会一直卡住,之前在群里问了许多师傅都没得到解决办法,遂在stackoverflow写了个帖子,目前还没人回复,我会一直跟进。
stackflow地址:asyncio wait_for timeout exceptions but the program didn't exit。
短期解决办法:
这个是最简单的问题了,既然数据都有了,无非就是套各种的推送工具,如qq机器人、企业微信机器人...等等。
当然,如果你想写个前端来展示这些数据的话,也是很简单的,只需要学一天django就够了,奈何我前端实在太烂,之前想写个在线工具来用,后端一个下午解决,前端写了三天还没写好,最终他长这个样子:
综上所述,如果想实现一个推送demo,其实很简单,把数据每天定时代进去就好了,附上企业微信推送的方法。
先下载企业微信,在群聊里添加一个机器人,会得到一个api地址。
def push_wechat_group(content):
resp = requests.post("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=9651234b-f90e-4064-80fd-0a69d6c1d867",
json={"msgtype": "markdown",
"markdown": {"content": content}})
if resp.json()["errno"] != 0:
raise ValueError("push wechat group failed, %s" % resp.text)
最后把数据展示成content,传给api就好了,如上⬆️。
以下是我第一版还没做分类时的推送效果:
开发不易,且嫖且珍惜。(开玩笑