一个极其朴素的目录扫描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 ...
随机推荐
- MySql:Linux下安装MySQL-5.7.12.tar.gz
一 官网下载 mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz 目前最新为5.7.16,可以直接下载mysql-5.7.16-linux-glibc2.5-x86_ ...
- Shell常用工具find,grep,sed,awk,xargs命令
最近学习shell命令,对grep,sed,awk命令有点混乱,故小结一下,巩固一遍. 注意:find , grep , sed, awk可使用基本正则表达式字符,find,grep,awk也支持扩展 ...
- RSTP_PA协商过程
P/A协商的基本需求: P:①DP端口,②discarding A:①P2P链路 所有交换机的stp mode改为rstp,确保sw2的g0/0/3为AP,sw3的g0/0/3为DP 把sw3的g0/ ...
- python 实时监控剪切板,并替换其中的部分内容,重新写入剪切板
#实时监控剪贴板内容的变化,并替换其中的回车,换行,逗号,再写入剪切板,以供使用. import pyperclip import time last_string = pyperclip.paste ...
- SyntaxError: unexpected EOF while parsing成功解决
报错在eval()函数: 我加了个 if 判断是否为空,就可以正常运行了!
- Spark RDD编程-大数据课设
目录 一.实验目的 二.实验平台 三.实验内容.要求 1.pyspark交互式编程 2.编写独立应用程序实现数据去重 3.编写独立应用程序实现求平均值问题 四.实验过程 (一)pyspark交互式编程 ...
- MySQL主从复制的简单搭建
@ 目录 1.MySQL一主一从的简单搭建 1.1.主从复制简介 1.2.MySQL主从复制简介 1.3.主从复制的架构 1.4.前期准备 1.5.主要配置实现 1.5.1.测试环境 1.5.2.配置 ...
- docker容器技术基础之联合文件系统OverlayFS
我们在上篇介绍了容器技术中资源隔离与限制docker容器技术基础之linux cgroup.namespace 这篇小作文我们要尝试学习容器的另外一个重要技术之联合文件系统之OverlayFS,在介绍 ...
- python 连接远程服务器,修改时间
import paramiko from datetime import date, timedelta def set_time(hostname): ssh = paramiko.SSHClien ...
- SSM框架中mapper层,增删改查,如何实现
1.批量修改 <!-- 批量修改 MySQL--> <update id="updateBatch" parameterType="java.lang. ...