Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Quison/XssDetect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

113 Commits

Repository files navigation

Xss探测器


1、项目结构说明

系统有如下结构目录:

  • bin/,可执行程序目录
  • document/,相关文档存放目录
  • source/,源码存放目录 -check/,Xss检测代码存放目录 -comm/,存放公用代码以及工具类 -gui/,存放界面相关代码存放目录 -spider/,爬虫程序相关代码存放 -test/,测试代码存放目录

2、项目相关运行环境以及依赖

运行环境:win7 开发语言:python 2.7.10 依赖的库如下:

  1. requests - 2.10,下载地址:https://codeload.github.com/kennethreitz/requests/legacy.tar.gz/master ,安装;
  2. wxPython -3.0,下载地址: http://www.wxpython.org/download.php#msw, 选择对应环境版本安装,界面的编辑可以下载wxFormBuilder来编辑;
  3. SQLite3(数据库),下载地址:http://www.sqlite.org/download.html;
  4. lxml,解析页面。

其中sqlite3的使用:https://github.com/palantir/sqlite3worker ,采用这个库来使用对数据库的操作

from sqlite3worker import Sqlite3Worker
sql_worker = Sqlite3Worker("/tmp/test.sqlite")
sql_worker.execute("CREATE TABLE tester (timestamp DATETIME, uuid TEXT)")
sql_worker.execute("INSERT into tester values (?, ?)", ("2010-01-01 13:00:00", "bow"))
sql_worker.execute("INSERT into tester values (?, ?)", ("2011-02-02 14:14:14", "dog"))
results = sql_worker.execute("SELECT * from tester")
for timestamp, uuid in results:
 print(timestamp, uuid)
sql_worker.close()

3、运行

界面的运行直接运行gui目录下的XssDetect.py就可以了(后期后调整):

python XssDetect.py

4、数据库设计

爬虫的数据库字段如下:

  1. id,类型Integer,自增id;
  2. url,类型Text,链接;
  3. depth,类型Integer,链接深度;
  4. method,类型Text,请求方法,get或者post;
  5. param,类型Text,请求的参数,method为post才有,get默认为空。

5、多线程爬虫原理

线程使用宽度优先的方式,也就是待爬取的队列使用的是先进先出的Queue(它还有先进后出方式,以及优先级方式)。 在多个线程同步工作的情况下,就是个线程都同用一个待爬取的url队列,所以只有在"待爬取的队列为空"且"等待的线程的数量等于最大的线程数量"时才会线程才会完成工作退出。当然我们为了暂停设置了一个暂停标志位,如果我们控制退出了也就会结束工作退出。 多线程爬虫的工作流程如下:

  1. 初始化线程,初始化的工作包括把种子链接加入公用的url待爬取队列,且种子链接的深度是0;
  2. 开始爬取,生成多个线程,并且开始线程,然后每个线程会进入工作(后面会讲解单个线程的内部工作);
  3. 同时开启一个线程监控所有的线程是否都已经完成工作,如果完成了那么做些收尾的工作,比如界面提醒"爬取完成"和关闭数据库链接什么的;

单个线程的工作流程如下:

  1. 判断,设置的标志位,是否要退出,如果是就退出,否则继续下一步;
  2. 判断,待爬取队列是否为空且等待的线程数量为最大线程数,如果条件为真则退出,否则继续下一步;
  3. 判断,队列是否为空,如果为空了,那么进入等待状态,如果不为空那么继续下一步;
  4. 判断,等待的线程数是否等于0,如果等于0进入等待状态,否则继续下一步;
  5. 正式进入工作,那么等待的线程数减一表示自己进入工作状态;
  6. 从队列中获取一个url,使用下载器下载内容,返回之后将内容给解析器解析,并且将这个url写入数据库;
  7. 判断新解析的url是否符合爬取的深度,如果符合那么加入队列中,并且唤醒因为队列为空而进入等待的线程;
  8. 最后判断当前的线程是否小于最大线程数,如果小于那么此线程进入等待状态,并且唤醒因为等待线程等于0而进入等待线程;
  9. 回到第一步继续循环。

About

一个XSS的检测项目

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /