一个极其朴素的目录扫描Python脚本
如果目录扫描工具被某些种类的waf拦截了,可以尝试(只是尝试,不是绝对能过)用脚本发出请求,具体功能看需求而定
原理。。。没啥原理,也没啥技术含量,相信大家都能看得懂的,nobody knows better than yourself
套用了一些常用写法(按部就班),想法非常朴素,没啥太大意义,个人单纯mark一下
Python3的
1 #coding:utf-8
2 import sys
3 import time
4 import random
5 import requests
6 import threading
7 from optparse import OptionParser
8 from queue import Queue
9
10 class DirScan:
11 def __init__(self, options):
12 self.url = options.url
13 self.file_name = options.file_name
14 self.numbers = options.numbers
15 '''
16 自定义Threading类继承Thread
17 '''
18 class Threading(threading.Thread):
19 def __init__(self, queue, total):
20 threading.Thread.__init__(self)
21 self.sub_queue = queue
22 self.sub_total = total
23 '''
24 重写run方法
25 '''
26 def run(self):
27 while not self.sub_queue.empty():
28 url = self.sub_queue.get()
29 threading.Thread(target=self.progress).start()
30 try:
31 r = requests.get(url=url, headers=self.get_user_agent(), timeout=4)
32 time.sleep(3)
33 if r.status_code == 200:
34 sys.stdout.write('\r' + '[--------]%s\n' % url)
35 result = open('result.html', 'a+') #追加写+读
36 result.write('<a href="' + url + '"target="_blank">' + url + '</a>')
37 result.write('\r\n</br>')
38 result.close()
39 except Exception:
40 pass
41
42 def progress(self):
43 per = 100 - float(self.sub_queue.qsize()) / float(self.sub_total) * 100
44 percent = "%s Items Complete in %1.f %s" % (
45 (self.sub_total - self.sub_queue.qsize()), per, '%')
46 sys.stdout.write('\r' + '[*]' + percent)
47
48 def get_user_agent(self):
49 user_agent_list = [{
50 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'},
51 {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'},
52 {
53 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},
54 {
55 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)'}
56 ]
57 return random.choice(user_agent_list)
58
59 def startscan(self):
60 result = open('result.html', 'w') # 以写方式打开
61 result.close()
62 queue = Queue()
63 f = open('dict.txt', 'r')
64 for i in f.readlines():
65 queue.put(self.url + "/" + i.strip('\n'))
66 total = queue.qsize()
67 threads = []
68 thread_count = int(self.numbers)
69 for i in range(thread_count):
70 threads.append(self.Threading(queue, total))
71 for thread in threads:
72 thread.start()
73 for thread in threads:
74 thread.join()
75
76 def main():
77 print(" ___ ___ __ _ _____ ")
78 print(" / __| / __|/ _ || _ | __ ")
79 print(" \__ \| (__| (_| || | | | | | | ")
80 print(" |___/ \___|\__,_||_| |_| |.|__| ")
81 print("Welcome to my NOOB DirScan ver1.0")
82 parser = OptionParser('python dir_scan.py -u <Target URL> -f <Dictionary File Name> -t <Thread numbers>')
83 parser.add_option('-u', '--url', dest='url', type='string', help='the URL you wanna scan(such as http://123.206.84.240:9000)')
84 parser.add_option('-f', '--file', dest='file_name', type='string', help='the dictionary you wanna choose')
85 parser.add_option('-t', '--thread', dest='numbers', type='int', help='the number of threads you wanna choose')
86 (options, args) = parser.parse_args()
87 if options.url and options.file_name:
88 dirscan = DirScan(options)
89 dirscan.startscan()
90 sys.exit(1)
91 else:
92 parser.print_help()
93 sys.exit(1)
94
95 if __name__=='__main__':
96 main()
user_agent头可以多加点
随便转载,请标明作者出处
一个极其朴素的目录扫描Python脚本的更多相关文章
- 简单高效的端口扫描python脚本
欢迎python爱好者加入:学习交流群 667279387 最近为了获取虚拟机端口开放情况,写了一个简单脚本来查看.共享给大家.下面的代码在python2种测试通过 说明:concurrent是pyt ...
- 分享一个批量修改文件编码的python脚本
分享一个自己编写的递归查找子目录,将所有cpp文件编码修改为utf-8编码格式的小脚本 #i!/usr/bin/env python3 # -*- coding:utf-8 -*- import os ...
- 一个简单的app自动登录Python脚本案例
- Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器
1.前提是:windows已经配置好Python的环境变量: 2.进入cmd命令行模式: **输入python命令,检测是否环境配置好:显示这样说明配置环境变量没问题 **用cd命令进入Python脚 ...
- py2exe打包python脚本
在工作中遇到将python脚本转换成exe可执行程序的需求,通过查询可以使用py2exe来构建满足要求的程序,这里简要说明一下使用步骤. 一.py2exe是一个将python脚本转换成windows上 ...
- 如何编写一个带命令行参数的Python文件
看到别人执行一个带命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持带命 ...
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...
- Python打造一个目录扫描工具
目标:用Python3写一款小型的web目录扫描工具 功能:1.扫描指定站点 2.指定网站脚本类型来扫描 3.可控线程 4.可保存扫描结果 首先定义一个命令参数的函数 def parse_option ...
- Windows 下针对python脚本做一个简单的进程保护
前提: 大家运行的脚本程序经常会碰到系统异常关闭.或被其他用户错杀的情况.这样就需要一个进程保护的工具. 本文结合windows 的计划任务,实现一个简单的进程保护的功能. 利用py2exe生产 ex ...
随机推荐
- Shell中[和[[的异同
1. 概念上来说 "[[",是关键字,许多shell(如ash bsh)并不支持这种方式.ksh, bash(据说从2.02起引入对[[的支持)等支持."[&qu ...
- 线程中的join()
http://blog.itpub.net/31555134/viewspace-2221319/ 一直对join()方法不是很理解,在A线程中, B线程调用了join()方法,然后在内部实际是wai ...
- 剑指 Offer 12. 矩阵中的路径
题目描述 是一道很常见的深搜题目,不过里面要考虑一些边界问题,比如走过的路径是不能再次走入的,所以我这里我自己的 代码想到是利用一个新的二维的数组,记录走过的路径,不过题解的直接将原二维数组中的路径隐 ...
- XCTF easyGo
拖入ida,发现符号表需要还原一下,载入一个还原符号表的脚本. go这个语言就有点恶心,字符串后面没有反斜杆零,ida识别出来,字符串就会挤在一堆,就很难看,看了某位师傅的wp,觉得这方法不错,就记录 ...
- ESP32-http client笔记
基于ESP-IDF4.1 #include <string.h> #include <stdlib.h> #include "freertos/FreeRTOS.h& ...
- FreeRTOS+LVGL|Freertos+lvgl如何配置lvgl的心跳和任务管理器
目录 配置lvgl心跳(Tick) 配置lvgl任务管理器(Task Handler) LVGL中文手册 lvgl需要系统滴答声(心跳)才能知道动画和其他任务的经过时间,所以我们必须要配置好lvgl的 ...
- STP、生成树的算法
STP.生成树的算法 一.STP 1)STP概述 2)交换网络环路的产生 3)STP简介 4)STP的工作原理 5)S ...
- 【Azure Redis 缓存】云服务Worker Role中调用StackExchange.Redis,遇见莫名异常(RedisConnectionException: UnableToConnect on xxx 或 No connection is available to service this operation: xxx)
问题描述 在Visual Studio 2019中,通过Cloud Service模板创建了一个Worker Role的角色,在角色中使用StackExchange.Redis来连接Redis.遇见了 ...
- 使用python对工作簿每个sheet表进行数据可视化展示(本案例是从第2个sheet开始循环读取也就是索引为1的表)
# 导入相关模块from pyecharts.charts import Barfrom pyecharts import options as optsfrom pyecharts.charts i ...
- C标准库学习
前言 C标准库源码可通过下列两个网站进行查看:The GNU C Library.Welcome to uClibc-ng! - Embedded C library 以下学习记录也是以这两个网站提供 ...