前言
对于信安学习来讲,Python要求掌握较好的编程能力,所以必不可少的需要自己编写一些小工具,本次编写最为常见的网站目录扫描器,使用的目录是御剑的目录。
预备知识点
queue库
简介
- queue是python的标准库,又称队列,可以直接import
- 在python中,多个线程之间的数据是共享的,queue有助于保证线程间数据交换的安全性和一致性。
三种队列
- Python queue模块的FIFO队列先进先出。 class queue.Queue(maxsize)
- LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)
- 还有一种是优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)
常用方法
- queue.qsize():返回队列的大小
- queue.empty() 如果队列为空,返回True,反之False
- queue.full() 如果队列满了,返回True,反之False
- queue.full 与 maxsize 大小对应
- queue.get([block[, timeout]])获取队列,timeout等待时间
- queue.get_nowait() 相当queue.get(False)
- queue.put(item) 写入队列,timeout等待时间
- queue.put_nowait(item) 相当queue.put(item, False)
- queue.task_done() 在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
- queue.join() 实际上意味着等到队列为空,再执行别的操作
threading库
threading模块中最核心的内容就是Thread类。
我们需要创建Thread对象,然后让它们运行,每个Thread对象代表一个线程,每一个线程中我们都可以让程序处理不同的任务,这就是多线程编程。
创建Thread对象有两种方法。
- 直接创建Thread,将一个callable对象从类的构造器传递进去,这个callable就是回调函数,用来处理任务。
- 编写一个自定义类继承Thread,复写run()方法,在run()方法中编写任务处理代码,然后创建这个Thread的子类。
直接创建Thread对象
Thread的构造方法中最重要的参数是target,所以我们需要将一个callable对象赋值给他,线程才能正常运行。
如果要让一个Thread对象启动,直接调用start()方法就可以了。
构思程序逻辑
- 输入目标网站
- 拼接上字典中可能存在的目录并查询
- 返回状态码为200的网站
源码
1 | # -*- codeing = utf-8 -*- |