极简分布式漏扫

本文内容为一个极简的手工分布式漏扫实现。
优点是对服务器性能没有任何要求。
缺点是信息交互较少,且容易产生网站丢失。

尝试时使用两台服务器,以下称为A,B服务器。
A服务器为中心服务器,负责爬虫与信息转发。
B服务器为子服务器,负责进行漏扫。

A服务器需要的环境与应用:python环境,redis数据库。
B服务器需要的环境与应用:python环境,xray,crawlergo

环境安装。
python选用python3环境,建议AB服务器环境版本相同。
安装时无特殊要求。

redis数据库下载make后,修改配置文件,增加密码,关闭限制端口访问,后测试是否可访问,可访问即可。
注意先增加密码再关闭限制,否则容易被病毒入侵。

xray与crawlergo在github下载即可。
我采用了大佬的crawlergo_xray方案,对启动文件略有修改。

下载后将crawlergo_xray的xray与crawlergo文件夹删除,放入xray与crawlergo即可。
确定可运行。



文件修改与准备。

在本次部署中,使用python脚本进行应用的粘合与爬虫的实现。

A服务器。
部署多线程爬虫,这里采用了非部署的定时爬取方式,对服务器的占用较小。
特殊点是爬取的数据内容将会调用redis.ConnectionPool()用以提高爬取的存入效率。
注意在连接时要增加password参数。
数据内容存入redis表即可。

redis本次创建2表。
表1,name表示当前爬虫被读取的次数,value记录读取的服务器ip。
表2,spider表示爬取得到的url。注,输入时候使用zset,去重复。

利用python flask框架搭建服务器进行服务器转发。

B服务器。
在使用crawlergo_xray的调用方式中,会读取tergets.txt文件。
那么重点就放到了针对tergets文件。

这里选择重写调用脚本。
首先将webhook指向a服务器的flask服务器中。
然后在读取redis时,先读取表1,list[-1]+1,判断是否插入成功,并且录入自己的id。
读取相应段url到spider.txt文件
再读取spider的后段数据到tergets。
这里使用了分段文件存储,防止文件过大时候产生读取太慢的问题。
最后即可。
将脚本编写定时使用。

可见本次尽量使用了定时任务没有使用服务器数据交互,是为了尽量将性能使用到漏扫上。
针对低性能服务器使用的方案。


进一步的方案:
B服务器使用mysql存取数据,并且在A读取数据后删除。
AB服务器搭建服务器数据交互,在有需要的时候进行爬虫,降低爬虫频率。

目前的缺点是可能会产生扫描过慢导致的网站漏扫情况。
可以通过teget文件的读取方式优化进行缓解。

这部分还没有写,有兴趣的朋友自己调整一下吧。

是一个离校时候给同学学习用的小东西, 代码已经丢了,只剩下逻辑部分了(笑

posted @ 2021-08-08 18:31  HOloBlogs  阅读(192)  评论(2)    收藏  举报