(原创)利用页面交叉引用反馈爬取vulners.com的数据

来源:互联网 发布:找客源软件 编辑:程序博客网 时间:2024/06/05 06:54

利用页面交叉引用反馈爬取vulners.com的数据

  • 利用页面交叉引用反馈爬取vulnerscom的数据
    • 可选方案
    • 各个方案的评估
    • vulners api
    • 爬取方案

因为实验室的工作需要,需要对vulners.com网站上的漏洞信息和相关链接进行数据爬取,但是vulners本身对爬虫的限制非常严格,前端页面都是由react.js生成的,很难单纯靠爬虫获取html数据。

vulners网址:https://vulners.com/

可选方案

(1)利用chrome driver+ selenium获取数据。
(2)利用chrome 插件本身作为数据爬虫的载体。
(3)利用PhantomJS或者scarpy-splash进行加载。
(4)采用官方API进行爬取。

各个方案的评估

(1)由于vulners是境外网站,在国内加载速度很慢,而这些浏览器加载工具仅仅在加载完成之后才会进行。这样速度就很慢了。
(说明:现代浏览器例如chrome都采用了多线程加载和一边渲染一遍展示的技术,因此给用户的感觉就是很快就能把页面渲染出来,其实后台的工作还没有完成,再加上现代的web前段常用的异步加载工具例如ajax等,更进一步降低了方法(1)(2)的效率)
(2)之前采用过PhantomJS之类的js加载工具,但是其功能还是相对有限。对于exploit-db之类的简单的js网站效果相对好一些,而在vulners上表现的不太好。

vulners api

最终笔者采用了使用vulners api的方法来进行数据提取,而vulners api这个方法也是存在问题的,就是每次最多能够获取2000到10000条数据,然而vulners本身有将近70w条数据。

爬取方案

由于最近vulners网站升级,因此具体的api内容暂时无法发布与此。现在介绍一下爬取思路和具体的工作方案。
爬取过程分两个大步:
(1)利用组里的软件漏洞词典,进行初始数据积累:
   这个过程和”薅羊毛”类似,利用字典里面的分词,在vulners网站的搜索api上进行查询获取
   具体的API为:https://vulners.com/api/v3/search/lucene/?query=(关键词)
        这一过程一共积累了33w条数据。
(2)利用网页上的交叉引用,进一步获取数据。
         vulners.com网站的每个漏洞页面上会有一些和它相关的漏洞的页面链接,之后可以利用这些数据来作为进一步获取的跳板。
         https://vulners.com/api/v3/search/lucene/?query=(关键词)
&&reference=True。添加一个参数就可以获取相关数据。

总体来说系统的工作是按照如下流程进行的。

    urls_to_fetch = [] #待爬取url队列    for token in software_vul_dict:        url = gen_url(token)        insert_db(search_by_lucence(url))        #这个过程是基础数据积累过程:    for item in db:        urls_to_fetch.append(gen_url(item))    for url in urls_to_fetch:#注意,这个队列有更新操作,因此迭代过程应该注意        (result,result_ref)=search_by_id_with_ref(url)                  insert_db(result)        urls_to_fetch.append(gen_url(result_ref))