python 追加到字典_扫描器篇(三)之python编写基于字典的网站目录探测脚本
工具原理:
通过读取字典获取内容,拼接url执行get http请求获取
响应状态码,根据状态码判断目录文件资源是否存在
1
2
思路:
工具命令行参数获取
1
字典读取
1
多线程访问
1
状态码获得判断输出结果
1
工具初始化
定义一个banner信息函数 def banner()
用于介绍工具与名称
1
2
def banner():
print("*" * 51)
print("*" * 2 + " " * 17 + "DirBurte v1.0" + ' ' * 17 + "*" * 2)
print('*' * 51)
print("This tool just debvlop for education!")
1
2
3
4
5
使用方法信息函数:
def usage():使用方法
1. url
2. thread
3. dictionary
1
2
3
4
def usage():
print("This is the tool's usage")
print("python Dirbrute.py -r u url -t thread -d dictionary")
1
2
3
参数获取
模块介绍
1
sys sys.argv获取python命令行执行的数据,sys.argv[0]
1
getopt python自带的解析命令行参数模块
1
参数获得
opts,args = getopt.getopt(sys.argv[1:],"u:t:d")
每一个参数都有一个值,传递给opts,输出opts
可以看到是一个列表类型
1
2
3
根据使用方法,可知len(sys.argv)等于7才能执行
将参数获得的内容封装到start函数中
1
2
def start():
if len(sys.argv) == 7:
opts,argv = getopt.getopt(sys.argv[1:],'u:t:d:')
for k,v in opts:
if k == "-u":
url = v
elif k == "-t":
threads = v
elif k == "-d":
dic = v
multi_scan(url,threads,dic)
else:
print("error Argument")
sys.exit()
字典文件的读取
python字典文件读取
with open(filename,mode)as f:
f.readlines()
这里使用with open() as f的好处在于
如果打开一个字典文件或者其他文件,那么
这个文件流只有再调用close()的时候才会关闭
1
2
3
不调用的话,文件流会一直处于打开状态
即是占用资源又占用文件,使得无法进行其他操作
例如删除等
多线程思路
一个线程读取固定数目的字典文件内容
制作多线程使用的字典列表,存储都是以列表格式
def multi_scan(url,threads,dic):
with open("dir",'r') as f:
dic_list = f.readlines()#读取字典
result_list = []#用来存放字典列表
threads_list = []#生成一个空的线程列表,后面用来追加子线程
##第二步确认字典行数
if len(dic_list) % int(threads) == 0:
threads_read_line_num = len(dic_list) / int(threads)
else:
threads_read_line_num = math.ceil(len(dic_list) / int(threads))
i = 0
temp_list = []
for line in dic_list:
i += 1
if i % threads_read_line_num == 0:
temp_list.append(line.strip())
result_list.append(temp_list)#向临时列表追加每个线程的分配的字典内容
temp_list = []#里不把这个临时的列表重置的话,下一个循环无法追加数据
else:
temp_list.append(line.strip())
for i in result_list:
threads_list.append(threading.Thread(target=scan,args=(url,i)))
for t in threads_list:
t.start()
线程列表
读取字典列表中的内容
扫描scan函数
def scan(url,dic):
for line in dic:
r = requests.get(url+'/'+line)
if r.status_code == 200:
print(r.url+':'+str(r.status_code))
else:
pass
完整代码为
#!/usr/bin/python3
import getopt
import sys
import math
import threading
import requests
def banner():
print("*"*51)
print("*"*2+" "*17+"DirBurte v1.0"+' '*17 +"*"*2)
print('*'*51)
print("This tool just debvlop for education!")
def usage():
print("This is the tool's usage")
print("python Dirbrute.py -r u url -t thread -d dictionary")
def start():
if len(sys.argv) == 7:
opts,argv = getopt.getopt(sys.argv[1:],'u:t:d:')
for k,v in opts:
if k == "-u":
url = v
elif k == "-t":
threads = v
elif k == "-d":
dic = v
multi_scan(url,threads,dic)
else:
print("error Argument")
sys.exit()
def multi_scan(url,threads,dic):
with open("dir",'r') as f:
dic_list = f.readlines()
result_list = []
threads_list = []
if len(dic_list) % int(threads) == 0:
threads_read_line_num = len(dic_list) / int(threads)
else:
threads_read_line_num = math.ceil(len(dic_list) / int(threads))
i = 0
temp_list = []
for line in dic_list:
i += 1
if i % threads_read_line_num == 0:
temp_list.append(line.strip())
result_list.append(temp_list)
temp_list = []
else:
temp_list.append(line.strip())
for i in result_list:
threads_list.append(threading.Thread(target=scan,args=(url,i)))
for t in threads_list:
t.start()
def scan(url,dic):
for line in dic:
r = requests.get(url+'/'+line)
if r.status_code == 200:
print(r.url+':'+str(r.status_code))
else:
pass
start()
python 追加到字典_扫描器篇(三)之python编写基于字典的网站目录探测脚本相关推荐
- python list除以_扫描器篇(三)之python编写基于字典的网站目录探测脚本
工具原理: 通过读取字典获取内容,拼接url执行get http请求获取 响应状态码,根据状态码判断目录文件资源是否存在 1 2 思路: 工具命令行参数获取 1 字典读取 1 多线程访问 1 状态码获 ...
- 判断端口是否能用_扫描器篇(八)之python+scapy构造TCP协议包扫描主机端口
TCP协议端口扫描 要使用TCP协议去完成端口扫描,肯定是需要了解TCP协议通信过程和原理才能完成的 TCP协议的特点 1 面向连接的:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写, ...
- python 逆向生成正则表达式_一篇搞定Python正则表达式
1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符类,字符类 ...
- web目录字典_白帽子黑客教你:如何使用Dirbuster网站目录扫描神器?
声明:本头条号分享仅做学习交流,请自觉遵守网络安全法等法律法规! 据说点击了解更多,还有更多干货!但这干货有没有用,等你看了再说! 一.背景介绍 DirBuster是用来探测web服务器上的目录和隐藏 ...
- python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析
Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...
- Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- 支持字典_手把手教你学Python之字典
字典是一种无序可变的容器,字典中的元素都是"键(key):值(value)"对, "键"和"值"之间用冒号隔开,所有"键值对&qu ...
- python编译器入门教程_一篇让你直接入门的 Python 教程
目录(1)Python是什么?Python属性 (2)获取Python-一个Prelim选择Python版本 (3)如何获得Python? (4)确认Python安装PythonShell (5)语言 ...
最新文章
- UA MATH567 高维统计I 概率不等式11 Azuma不等式
- C++之const修饰得到是谁
- 二维数组数组名的使用
- (原创) JavaScript是什么?
- 浅析pc机上如何将vmlinuz-2.6.31-14-generic解压出vmlinux
- 额外参数_Redis的复制参数学习笔记
- html5 显示圆形图片,《小白HTML5成长之路40》怎样显示圆角图片
- 共享服务器切换账号,win7切换用户访问共享、共享文件夹切换方法
- 证券公司八大业务最全梳理
- learning bamboo flute
- valgrind内存泄漏检测
- 直角三角形 纪中 1385 数学_斜率
- 前台HTML现在预览附件
- redis 缓存防止击穿
- 【Java+JSP+MySql】12306购票系统(五)购买车票
- 我的人工智能梦(一、前言)
- 【转】教你如何下载在线视频
- 恒温加热平台控制系统(C51、Proteus、Qt)
- 初学ISE 半加器仿真 VHDL
- 服务器系统945主板,IT教程:945主板最高装什么cpu
热门文章
- python基础(part15)--迭代
- HTML基础(part4)--常用标签之图片标签
- SAP 产品 UI 里的容器组件的概念和开发概述
- SAP Spartacus SeoMetaService 的单元测试代码
- 选择 SAP Spartacus 作为 SAP Commerce Cloud Storefront 实现框架的五个理由
- ng-content的一个实际例子
- 如何使用Angular rxjs进行优雅限流
- 如何免费获得Gartner关于field Service management各产品魔力象限报告
- 把Hybris Commerce本地tomcat的keystore给本机的tomcat使用
- SAP Fiori里的manifest.json