一个极其朴素的目录扫描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 ...
随机推荐
- head tail 用法
tail 显示最后几行,-n后面的数字无符号,表示行数 tail -n 1000:显示最后1000行 tail -n +1000:从1000行开始显示到最后 tail -n -1000:从负1000行 ...
- Hive源码上手及问题解决
一.编译准备 1.下载源码包 https://github.com/apache/hive/archive/refs/tags/rel/release-2.3.7.zip 或使用git直接拉取 无法解 ...
- Pytest学习笔记12-配置文件pytest.ini
前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. 常用的配置项 marks 作用:测试用例中添加了自定义标记( ...
- sql 建立新表
USE [exam]GO /****** Object: Table [dbo].[tx] Script Date: 12/13/2020 22:19:59 ******/SET ANSI_NULLS ...
- python 读取 写入txt文件
filename = 'pi_digits.txt' with open(filename) as f:#默认以只读方式打开文件 lines = f.readlines()#读取所有行,结果为列表,每 ...
- flutter实战demo,仿luckin coffee。
flutter_luckin_coffee flutter luckin coffee application(仿瑞幸咖啡) 目录 前言 安卓扫码体验 flutter版本信息 安装 相关插件 维护者 ...
- 解决Git Clone速度过慢的方法
Git Clone速度慢,原因很简单,默认的源是国外的,只需要使用国内源,速度就起飞了(当然,也没有太快,至少可以忍受了).使用方法很简单,在clone某个项目的时候将github.com替换为git ...
- python -- os处理模块
# --------------------------------# 使用os模块操作目录和文件# --------------------------------# getcwd() 获取当前目录 ...
- python -- 面向对象编程(继承、重写)
一.继承 子类可以继承父类的所有公有成员,但不能直接访问父类的私有成员,只能通过父类的公有方法间接访问私有属性或私有方法. 如: class DerviedClassName(BaseClassNam ...
- K8S系列第三篇(Docker网络)
目录 docker 网络 Docker 的四种网络模 一.网络基础 1.网络名称空间介绍 2.创建一个命名空间 1)Veth设备对 2)Veth设备操作 1> 创建Veth设备对 2> 绑 ...