1.使用了多线程+队列的方式
2.使用了随机user-agent头来发起网络请求
3.使用了asp网站目录字典,拼接url发起网络请求,探查网站是否存在潜在url
4.使用了Figlet工具转换字符做脚本LOGO,提升美观性
5.使用了optparse模块,做调用脚本的参数,具备了–help帮助说明,可设置默认线程数
6.使用了sys.stdout模块,在cmd命令行内动态展示扫描过程的详情,显示待扫描数、扫描总数、剩余百分比

#!/usr/bin/env python
# -*- coding: utf-8 -*-# 目录扫描,敏感文件扫描
# 字典很重要是扫描器的基石
# 取出字典内容,和目标网站url进行拼接,发送网络请求进行识别
# 使用Figlet工具转换字符做脚本LOGO      http://www.network-science.de/ascii/
# 使用optparse参数说明模块    https://docs.python.org/2/library/optparse.html
# baidu搜目标网站语法  inurl:admin.asp
# asp网站目录字典txt  asp_dir_dic.txt
# 随机user-agent头 user_agent_list.pyimport requests
from queue import Queue
import sys
import threading
import user_agent_list
from optparse import OptionParserclass DirScanMain:def __init__(self, options):self.url = options.urlself.ext = options.extself.count = options.count# 内部类DirScanclass DirScan(threading.Thread):# 构造参数,创建原始的线程对象,拿到传入的queue队列对象和total队列总数def __init__(self, queue, total):threading.Thread.__init__(self)self.queue = queueself.total = total# 一个run方法,谁来调用这个方法?def run(self):# 当队列queue的数量不为空时,就开始干活了while not self.queue.empty():# 取出队列里的urlurl = self.queue.get()# 打印queue队列中的第一个url看看# print(url)# 让线程对象执行self.msg方法threading.Thread(target=self.msg).start()try:r = requests.get(url=url, headers=user_agent_list.get_user_agent(), timeout=8, )# 发送网络请求,如果我们拼接的url,访问是存在的,我们就写到result.html文件中,并且调用sys.stdout来cmd命令台输出if r.status_code == 200:# print('[*]' + url)# 调用sys系统模块stdout输出展示信息sys.stdout.write('\r' + '[*]扫描到存在的网址=======>%s\t\n' % (url))# 开始往result.html文件中追加写入信息f = open('result.html', 'a+')# 按照html语言语法,把url地址写入f.write('<a href="' + url + '"" target="_blank">' + url + '</a>')# \r是回车(光标移动到本行的行首),\n是换行(光标所在位置向下移动一行),\r\n是回车换行(光标回到下一行的行首)f.write('\r\n</br>')f.close()except Exception as e:print(e)pass# 获得扫描了多少个的信息的方法def msg(self):# self.total是总任务数,self.queue.qsize()是队列里还剩的数# print(self.total,self.queue.qsize())# 输出百分比,队列里还剩的数/总数per = ('{:.0%}'.format(self.queue.qsize() / self.total))msg = '剩余扫描数: %s |总任务数: %s |剩余百分比: %s ' % (self.queue.qsize(), self.total, per)sys.stdout.write('\r' + '[#]' + msg)# 类启动的方法def start(self):# 创建一个result.html文件f = open('result.html', 'w')f.close()# 创建一个空队列queue = Queue()# 读取本目录下的字典文件,比如运行脚本传入的-f asp_dir_dic,那么就去找asp_dir_dic.txt,去读取f = open('./%s' % (self.ext), 'r')# 读取asp.txt文件中的每一行,放进queue队列里,消除回车for i in f:queue.put(self.url + i.rstrip('\n'))# 得到队列中条目的总数total = queue.qsize()# 创建空的线程对象列表threads = []# 根据传进来的线程数参数,拿到线程数量thread_count = self.count# 开始根据线程数来创造线程对象,给内部类DirScan传入需要的queue队列对象和total队列总数# 这一步很关键,main方法中创建了大类的对象,之后调用大类对象中的start方法,现在在这个start方法中,线程append追加,来创建内部类DirScanfor i in range(thread_count):threads.append(self.DirScan(queue, total))# 启动线程对象for t in threads:t.start()t.join()if __name__ == '__main__':print('''_          _  _                               | |        | |(_)
__      __ ___ | |__    __| | _  _ __  ___   ___  __ _  _ __
\ \ /\ / // _ \| '_ \  / _` || || '__|/ __| / __|/ _` || '_ \ \ V  V /|  __/| |_) || (_| || || |   \__ \| (__| (_| || | | |\_/\_/  \___||_.__/  \__,_||_||_|   |___/ \___|\__,_||_| |_|______        ______                        |______|      |______|                      by:j01012021.03.08''')# optparse参数说明模块    https://docs.python.org/2/library/optparse.htmlparser = OptionParser()# 人为给定url参数parser.add_option("-u", "--url", dest="url", help="target url for scan")# 人为给定执行方式parser.add_option("-f", "--file", dest="ext", help="target url ext")# 线程可以设置默认值default=10parser.add_option("-t", "--thread", dest="count", type="int", default=30, help="scan thread_count")(options, args) = parser.parse_args()if options.url and options.ext:# start(options.url,options.ext,options.count)# 创建DirScanMain大类的对象,把options对象传入d = DirScanMain(options)# print(type(d))    打印的是类对象的类别 <class '__main__.DirScanMain'>d.start()print('\r\n')print('\r\n*-*-*-*-*-*扫描结果已保存至result.html*-*-*-*-*-*')sys.exit(1)else:parser.print_help()sys.exit(1)

asp网站潜在目录字典asp_dir_dic.py(网上一搜全都是):

/admin.asp
/admin.asp.bak
/admin/admin_login.asp
/admin/admin_login.asp.bak
/admin/admin_login.asp.bk
/admin/login.asp
/admin/login.asp.bak
/admin/login.asp.bk
/admin_admin.asp
/admin_admin.asp.bak
/admin_chklogin.asp
/admin_chklogin.asp.bak
/admin_config.asp
/admin_config.asp.bak
/admin_index.asp
/admin_index.asp.bak
/admin_login.asp
/admin_login.asp.bak
/admin_login.asp.bk
/admin_main.asp
/admin_main.asp.bak
/admin_menu.asp
/admin_menu.asp.bak
/bin/scripts/openvendor/gnete/retrievepnbody.asp
/book/inc/conn.asp
/book/inc/conn.asp.bak
/clients.asp
/config.asp
/config.asp.bak
/conn.asp
/conn.asp.bak
/conn.asp.bk
/dbconnect.asp
/dbconnect.asp.bak
/dbconnect.asp.bk
/default.asp
/default.asp%2e
/default.asp%2e%41sp
/default.asp%3f+.htr
/default.asp%81
/default.asp+.htr
/default.asp.
/default.asp.bak
/default.asp::$data
/default.asp\
/default.asp\\
/iissamples/exair/howitworks/code.asp
/iissamples/exair/howitworks/codebrw1.asp
/iissamples/exair/howitworks/codebrws.asp
/iissamples/exair/howitworks/codebrws.asp?source=/index.asp
/iissamples/exair/howitworks/codebrws.asp?source=/login.asp
/iissamples/exair/howitworks/showcode.asp
/iissamples/exair/search/advsearch.asp
/iissamples/exair/search/advsearch.asp::$data
/iissamples/exair/search/query.asp
/iissamples/exair/search/search.asp
/iissamples/iissamples/query.asp
/iissamples/sdk/asp/docs/codebraws.asp
/iissamples/sdk/asp/docs/codebrws.asp
/iissamples/sdk/asp/docs/codebrws.asp?source=/iissamples/%c0%ae%c0%ae/default.asp
/iissamples/sdk/asp/docs/showcode.asp
/iisstart.asp
/inc/conn.asp
/inc/conn.asp.bak
/inc/conn.asp.bk
/inc/dbconnect.asp
/inc/dbconnect.asp.bak
/inc/dbconnect.asp.bk
/include/conn.asp
/include/conn.asp.bak
/include/conn.asp.bk
/include/dbconnect.asp
/include/dbconnect.asp.bak
/include/dbconnect.asp.bk
/index%252easp
/index%2easp
/index.asp
/index.asp%2e
/index.asp%2e%41sp
/index.asp%3f+.htr
/index.asp%3f.jsp
/index.asp%81
/index.asp+.htr
/index.asp.
/index.asp.bak
/index.asp::$data
/index.asp\
/index.asp\\
/list.asp
/list.asp.bak
/login.asp
/login.asp%3f+.htr
/login.asp.bak
/login.asp.bk
/login.asp?+.htr
/main.asp
/main.asp%
/main.asp%2e
/main.asp%2e%41sp
/main.asp%3f.htr
/main.asp%81
/main.asp+.htr
/main.asp.
/main.asp.bak
/main.asp::$data
/main.asp\
/main.asp\\
/manage.asp
/manage.asp.bak
/menu.asp
/menu.asp.bak
/msadc/samples/adctest.asp
/msadc/samples/selector/codebrws.asp
/msadc/samples/selector/showcode.asp
/msadc/samples/selector/showcode.asp_2
/null.htw?ciwebhitsfile=/index.asp%20&cirestriction=none&cihilitetype=full
/opt/casp/admin/conf/hkey.current.user
/pass.asp
/password.asp
/passwords.asp
/product.asp
/right.asp
/right.asp.bak
/sample.asp
/samples/showfile.asp
/scripts/admin.asp
/scripts/dasp/fm_shell.asp
/scripts/default.asp+.pl
/scripts/login.asp
/scripts/pass.asp
/scripts/password.asp
/scripts/postinfo.asp
/scripts/repost.asp
/scripts/showfile.asp
/scripts/tools/uploadn.asp
/scripts/tools/uploadx.asp
/scripts/upload.asp
/scripts/uploadn.asp
/scripts/uploadx.asp
/scripts/users.asp
/search/advsearch.asp
/search/query.asp
/search/search.asp
/showfile.asp
/site/eg/source.asp
/sites/knowledge/membership/inspired/viewcode.asp
/sites/knowledge/membership/inspiredtutorial/viewcode.asp
/sites/samples/knowledge/membership/inspired/viewcode.asp
/sites/samples/knowledge/membership/inspiredtutorial/viewcode.asp
/sites/samples/knowledge/push/viewcode.asp
/sites/samples/knowledge/search/viewcode.asp
/siteserver/publishing/viewcode.asp
/test.asp
/test.asp.bak
/user.asp
/usermanage.asp
/usermanage.asp.bak
/users.asp

user_agent_list.py(随机获取一个user_agent头):

#!/usr/bin/env python
# -*- coding: utf-8 -*-import random#获取随机的一个User-Agent头
def get_user_agent():user_agent_list = [{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'},{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'},{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'},{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'},{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},{'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},]return random.choice(user_agent_list)

cmd命令行执行脚本,-u 地址,-f 字典文件:

程序执行后,保存扫描出的网站目录url至result.html(可点击查看):

optparse模块–help帮助页面:

加载字典文件,扫描网站潜在目录相关推荐

  1. php动态页面加载慢,通过动态加载JS文件提升网站访问速度

    相对与HTML,CSS,javascript是最影响浏览器性能的,因为浏览器在遇到<script>标签时,必须等待js代码下载和执行完毕后再执行后面的内容,因此当页面中js文件过多时,网站 ...

  2. php源码自动识别文本中的链接,自动加载识别文件Auto.php

    用于本应用的控制器自动加载类设置,用法如同\CodeIgniter\Config\AutoloadConfig 自动加载识别文件:dayrui/App/应用目录/Config/Auto.php 语法格 ...

  3. java 加载class文件路径_动手实现MVC: 1. Java 扫描并加载包路径下class文件

    背景 用过spring框架之后,有个指定扫描包路径,然后自动实例化一些bean,这个过程还是比较有意思的,抽象一下,即下面三个点 如何扫描包路径下所有的class文件 如何扫描jar包中对应包路径下所 ...

  4. Unity网页插件Embedded Browser(ZFBrowser)打包文件无法加载本地网页或网站网址解决方法

    Unity网页插件Embedded Browser(ZFBrowser)打包文件无法加载本地网页或网站网址解决方法 问题:最近使用ZFBrowser开发VR嵌入网页发现出现一个问题,在编辑器模式下场景 ...

  5. idea overlays文件夹_使用IDEA加载maven项目没有出现overlays目录的解决方法

    使用IDEA加载maven项目没有出现overlays目录的解决方法 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdo ...

  6. java class文件 代码_java_基础——用代码编译.java文件+加载class文件

    java_基础--用代码编译.java文件+加载class文件 java_基础--用代码编译.java文件+加载class文件 [简单编译的流程] package com.zjm.www.test; ...

  7. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描...

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  8. JVM加载class文件的原理机制

    阅读目录 1.JVM 简介 2.JVM 的组成部分 3.JVM加载class文件的原理机制 在面试java工程师的时候,这道题经常被问到,故需特别注意. 回到顶部 1.JVM 简介 JVM 是我们Ja ...

  9. Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)...

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7596118 ,转载请注明出处! 有时候你会发现过去一直启动正常的系统,某天启动时会报出 ...

  10. Spring如何加载XSD文件

    http://blog.csdn.net/bluishglc/article/details/7596118 本文原文连接: http://blog.csdn.net/bluishglc/articl ...

最新文章

  1. SAP WM 自动创建TO单的JOB运行报错 - Enter the storage unit type - 对策
  2. Python 学习笔记 - 字典
  3. 1-VMware workstation认识
  4. 修改已经打开的对话框的浏览路径
  5. 看完这篇文章保你面试稳操胜券——小程序篇
  6. 解决水晶报表部署时出错的问题
  7. c语言int超出范围字符串,Go返回int64类型字段超出javascript Number范围的解决方法...
  8. ELV局部视图与差分隐私【敏感度到底怎么理解】【上】
  9. 理解 LruCache 机制
  10. MyBatis学习笔记(一):MAVEN的下载,安装与环境配置和在IDEA中配置maven
  11. 如何快速将所有东西从旧的Intel Mac迁移到新的M1 MacBook
  12. 【语音识别】基于matlab GUI语音识别信号灯图像模拟控制(带面板)【含Matlab源码 757期】
  13. 更新sdk_即构ZegoLiveRoom SDK版本更新,新增多项功能及自定义设置
  14. java武士风度_CH2906 武士风度的牛(算竞进阶习题)
  15. 3D打印机的精度差异在哪里
  16. 计算机办公软件基础知识题库,办公软件基础知识试题--题库.doc
  17. 腾讯自选股如何实现单位小时内完成千万级数据运算
  18. python第四次作业——陈灵院
  19. 全球与中国PMN-PT压电单晶市场深度研究分析报告
  20. Parallels Desktop 安装 Windows10 提示“安全启动功能防止操作系统启动”怎么解决?

热门文章

  1. python3修改文件内容_使用python 修改文件内容
  2. 去掉左边0_TiDB 4.0 在 VIPKID 的应用实践
  3. 空间数据引擎oracle_Oracle-Spatial空间数据库基础
  4. 科罗拉多州立大学计算机科学专业,科罗拉多州立大学有哪些专业_专业排名(QS世界排名)...
  5. 将json字符串转换成html,根据json字符串生成Html的一种方式
  6. error: 'EOF' was not declared in this scope的解决办法
  7. NYOJ a problem is easy
  8. NYOJ759 你知道这个规律吗
  9. jq实现底部弹框_WPF MVVM 弹框之等待框
  10. deepfake ai智能换脸_AI换脸朱茵变杨幂,人工智能时代的“细思恐极”