Giter VIP home page Giter VIP logo

cnvd-crawler's Introduction

CNVD-crawler

爬取http://www.cnvd.org.cn网站工控系统漏洞信息。

分析

通过抓包,分析出CNVD的反爬虫机制:

  • 首次访问,user-agent请求无cookie,CNVD会返回521错误,并设置了cookie值:__jsluid,并返回了一个脚本,,这个脚本便是项目目录script.js,再分析其代码,其动态构建了代码,即项目目录里的setCookie.js,这段代码根据已有的cookie,动态生成新的cookie,而且还设置了定时器,重新访问。这次带上了正确的cookie,正确获取到内容。

  • 一次尝试:既然要得到正确cooke,那么试试爬虫直接设置cookie,但是没那么简单,爬了几次以后,就会发现返回content为空。此种情况,两种可能原因:一段时间内限制IP访问次数,或者限制对应的cookie访问次数。

  • 上一步骤中,分析发现,爬虫设置的cookieuser-agent头必须匹配,而且IP要和获取时匹配,这也是其防爬手段之一。

  • 再次进入分析,多次刷新页面,会发现很快会返回content为空。删除Cookie,重新访问即可回到第一步,正常得到内容。因此,可以得出结论:CNVD对同一Cookie,在一段时间内的访问次数做了限制。

  • 解决方案:既然cookie访问次数有限制,那么我们可以每次爬取都进入第一步,即不带cookie,但是这种情况需要模拟browser行为,接受cookie,执行动态脚本,生成完整cookie,再次访问。

  • 不用慌,既然IP访问次数都没限制,那么所有问题都不是问题,要模拟browser行为,有许多现成工具,如phantomjsnightmare。有趣的是,我们在CNVD的动态脚本代码setCookie.js中,发现了这么一句:

while (window._phantom || window.__phantomas) {};

这是在防phantomjs的节奏啊...具体phantom的情况我没测试,我用的nightmare~

其他

  • 并发控制,注意控制并发数量,避免因并发过高而受限
  • script.jssetCookie.js仅用于分析,无需依赖
  • 代码实际上完全可以复用来爬取除了工控系统漏洞外其他漏洞信息,仅需简单修改URL(confg.urls)信息。

使用

  • 安装依赖
npm install
  • 启动Mongod,并配置配置文件(数据库相关,爬取URL,并发数控制)
vim config.js
  • 开始爬取
npm run start

cnvd-crawler's People

Contributors

laoqiren avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

ii0 navigator129

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.