工具原理:

通过读取字典获取内容,拼接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编写基于字典的网站目录探测脚本相关推荐

  1. python list除以_扫描器篇(三)之python编写基于字典的网站目录探测脚本

    工具原理: 通过读取字典获取内容,拼接url执行get http请求获取 响应状态码,根据状态码判断目录文件资源是否存在 1 2 思路: 工具命令行参数获取 1 字典读取 1 多线程访问 1 状态码获 ...

  2. 判断端口是否能用_扫描器篇(八)之python+scapy构造TCP协议包扫描主机端口

    TCP协议端口扫描 要使用TCP协议去完成端口扫描,肯定是需要了解TCP协议通信过程和原理才能完成的 TCP协议的特点 1 面向连接的:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写, ...

  3. python 逆向生成正则表达式_一篇搞定Python正则表达式

    1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符类,字符类 ...

  4. web目录字典_白帽子黑客教你:如何使用Dirbuster网站目录扫描神器?

    声明:本头条号分享仅做学习交流,请自觉遵守网络安全法等法律法规! 据说点击了解更多,还有更多干货!但这干货有没有用,等你看了再说! 一.背景介绍 DirBuster是用来探测web服务器上的目录和隐藏 ...

  5. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

  6. Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...

  7. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  8. 支持字典_手把手教你学Python之字典

    字典是一种无序可变的容器,字典中的元素都是"键(key):值(value)"对, "键"和"值"之间用冒号隔开,所有"键值对&qu ...

  9. python编译器入门教程_一篇让你直接入门的 Python 教程

    目录(1)Python是什么?Python属性 (2)获取Python-一个Prelim选择Python版本 (3)如何获得Python? (4)确认Python安装PythonShell (5)语言 ...

最新文章

  1. UA MATH567 高维统计I 概率不等式11 Azuma不等式
  2. C++之const修饰得到是谁
  3. 二维数组数组名的使用
  4. (原创) JavaScript是什么?
  5. 浅析pc机上如何将vmlinuz-2.6.31-14-generic解压出vmlinux
  6. 额外参数_Redis的复制参数学习笔记
  7. html5 显示圆形图片,《小白HTML5成长之路40》怎样显示圆角图片
  8. 共享服务器切换账号,win7切换用户访问共享、共享文件夹切换方法
  9. 证券公司八大业务最全梳理
  10. learning bamboo flute
  11. valgrind内存泄漏检测
  12. 直角三角形 纪中 1385 数学_斜率
  13. 前台HTML现在预览附件
  14. redis 缓存防止击穿
  15. 【Java+JSP+MySql】12306购票系统(五)购买车票
  16. 我的人工智能梦(一、前言)
  17. 【转】教你如何下载在线视频
  18. 恒温加热平台控制系统(C51、Proteus、Qt)
  19. 初学ISE 半加器仿真 VHDL
  20. 服务器系统945主板,IT教程:945主板最高装什么cpu

热门文章

  1. python基础(part15)--迭代
  2. HTML基础(part4)--常用标签之图片标签
  3. SAP 产品 UI 里的容器组件的概念和开发概述
  4. SAP Spartacus SeoMetaService 的单元测试代码
  5. 选择 SAP Spartacus 作为 SAP Commerce Cloud Storefront 实现框架的五个理由
  6. ng-content的一个实际例子
  7. 如何使用Angular rxjs进行优雅限流
  8. 如何免费获得Gartner关于field Service management各产品魔力象限报告
  9. 把Hybris Commerce本地tomcat的keystore给本机的tomcat使用
  10. SAP Fiori里的manifest.json